name: Sync Locize Translations & Create Translation PR on: push: branches: [main] paths-ignore: - '**.md' repository_dispatch: types: [locize/versionPublished] permissions: contents: read jobs: sync-translations: name: Sync Translation Keys with Locize runs-on: ubuntu-latest steps: - name: Checkout Repository uses: actions/checkout@v4 with: persist-credentials: false - name: Set Up Node.js uses: actions/setup-node@v4 with: node-version: '24.16.0' - name: Install locize CLI run: npm install -g locize-cli@12.2.0 --ignore-scripts --no-audit --no-fund # Sync translations (Push missing keys & remove deleted ones) - name: Sync Locize with Repository if: ${{ github.event_name == 'push' }} env: LOCIZE_API_KEY: ${{ secrets.LOCIZE_API_KEY }} LOCIZE_PROJECT_ID: ${{ secrets.LOCIZE_PROJECT_ID }} run: | cd client/src/locales locize sync --cdn-type pro --api-key "$LOCIZE_API_KEY" --project-id "$LOCIZE_PROJECT_ID" --language en # When triggered by repository_dispatch, skip sync step. - name: Skip sync step on non-push events if: ${{ github.event_name != 'push' }} run: echo "Skipping sync as the event is not a push." create-pull-request: name: Create Translation PR on Version Published runs-on: ubuntu-latest needs: sync-translations permissions: contents: read steps: # 1. Check out the repository. - name: Checkout Repository uses: actions/checkout@v4 with: persist-credentials: false # 2. Download translation files from locize. - name: Download Translations from locize uses: locize/download@v2 with: project-id: ${{ secrets.LOCIZE_PROJECT_ID }} path: "client/src/locales" # 3. Create a Pull Request using a dedicated fine-grained PAT so this # workflow does not depend on the global GITHUB_TOKEN PR-creation setting. - name: Create Pull Request id: create-pull-request uses: peter-evans/create-pull-request@v7 with: token: ${{ secrets.LOCIZE_PR_TOKEN }} add-paths: | client/src/locales/** commit-message: "🌍 i18n: Update translation.json with latest translations" base: main branch: i18n/locize-translation-update title: "🌍 i18n: Update translation.json with latest translations" body: | **Description**: - 🎯 **Objective**: Update `translation.json` with the latest translations from locize. - 🔍 **Details**: This PR is automatically generated upon receiving a versionPublished event with version "latest". It reflects the newest translations provided by locize. - ✅ **Status**: Ready for review. labels: "🌍 i18n" - name: Request Reviewer if: ${{ steps.create-pull-request.outputs.pull-request-number != '' }} env: GH_TOKEN: ${{ secrets.LOCIZE_PR_TOKEN }} PR_NUMBER: ${{ steps.create-pull-request.outputs.pull-request-number }} REVIEWER: danny-avila run: | author="$(gh pr view "$PR_NUMBER" --repo "$GITHUB_REPOSITORY" --json author --jq '.author.login')" if [ "$author" = "$REVIEWER" ]; then echo "Skipping reviewer request because $REVIEWER authored PR #$PR_NUMBER." exit 0 fi gh pr edit "$PR_NUMBER" --repo "$GITHUB_REPOSITORY" --add-reviewer "$REVIEWER"