Sync Translated Content #1844
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Sync Translated Content | |
| on: | |
| workflow_dispatch: | |
| inputs: | |
| notes: | |
| description: "Notes" | |
| required: false | |
| default: "" | |
| schedule: | |
| # * is a special character in YAML so you have to quote this string | |
| - cron: "0 1 * * *" | |
| permissions: | |
| contents: read | |
| jobs: | |
| build: | |
| if: github.repository == 'mdn/translated-content' | |
| runs-on: ubuntu-latest | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| lang: | |
| - es | |
| - fr | |
| - ja | |
| - ko | |
| - pt-br | |
| - ru | |
| - zh-cn | |
| - zh-tw | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 | |
| with: | |
| persist-credentials: false | |
| - name: Checkout (content) | |
| uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 | |
| with: | |
| repository: mdn/content | |
| path: mdn/content | |
| persist-credentials: false | |
| - name: Setup Node.js environment | |
| uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0 | |
| with: | |
| node-version-file: mdn/content/.nvmrc | |
| package-manager-cache: false | |
| - name: Install | |
| working-directory: ${{ github.workspace }}/mdn/content | |
| run: npm ci | |
| env: | |
| # https://github.com/microsoft/vscode-ripgrep#github-api-limit-note | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| - name: Sync translated content | |
| env: | |
| CONTENT_ROOT: ${{ github.workspace }}/mdn/content/files | |
| CONTENT_TRANSLATED_ROOT: ${{ github.workspace }}/files | |
| # Used by the `rari` cli to avoid rate limiting issues | |
| # when fetching the latest releases info from the GitHub API. | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| working-directory: ${{ github.workspace }}/mdn/content | |
| run: npm run content sync-translated-content ${{ matrix.lang }} | |
| - name: Gather related upstream commits | |
| id: gather | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| run: | | |
| # get upstream head sha | |
| UPSTREAM_HEAD_SHA=$(cd "${{ github.workspace }}/mdn/content" && git rev-parse HEAD) | |
| echo "upstream head sha: ${UPSTREAM_HEAD_SHA}" | |
| # get original path of moved files | |
| MOVED_FILES=$(git diff --cached --name-status --diff-filter=R | cut -f2 | sed "s|files/${{ matrix.lang }}|files/en-us|") | |
| FILE_COMMIT_URLS="" | |
| while read -r MOVED_FILE; do | |
| # gather related upstream commits | |
| COMMIT_URL=$(gh api -XGET repos/mdn/content/commits -F path="${MOVED_FILE}" -F per_page=1 -F sha="${UPSTREAM_HEAD_SHA}" --jq '.[0].html_url') | |
| if [ -n "${COMMIT_URL}" ]; then | |
| FILE_COMMIT_URLS+="- ${COMMIT_URL}\n" | |
| fi | |
| done <<< "${MOVED_FILES}" | |
| FILE_COMMIT_URLS=$(echo -e "${FILE_COMMIT_URLS}" | grep -v '^$' | sort | uniq) | |
| echo -e "commit urls:\n${FILE_COMMIT_URLS}" | |
| # set multiline string to output | |
| # https://docs.github.com/actions/using-workflows/workflow-commands-for-github-actions#multiline-strings | |
| # as the commit urls would not contain 'EOF', we can use it as a delimiter | |
| { | |
| echo 'COMMIT_URLS<<EOF' | |
| echo "${FILE_COMMIT_URLS}" | |
| echo EOF | |
| } >> "$GITHUB_OUTPUT" | |
| - name: Create PR with sync for ${{ matrix.lang }} | |
| uses: peter-evans/create-pull-request@c0f553fe549906ede9cf27b5156039d195d2ece0 # v8.1.0 | |
| with: | |
| commit-message: "${{ matrix.lang }}: sync translated content" | |
| branch: content-sync-${{ matrix.lang }} | |
| title: "[${{ matrix.lang }}] sync translated content" | |
| author: mdn-bot <108879845+mdn-bot@users.noreply.github.com> | |
| committer: mdn-bot <108879845+mdn-bot@users.noreply.github.com> | |
| body: "Rari generated sync. Related upstream commits: | |
| ${{ steps.gather.outputs.COMMIT_URLS }}" | |
| labels: | | |
| automated pr | |
| token: ${{ secrets.AUTOMERGE_TOKEN }} |