name: docs-locale-sync

on:
  push:
    branches:
      - dev
    paths:
      - packages/web/src/content/docs/*.mdx

jobs:
  sync-locales:
    if: github.actor != 'opencode-agent[bot]'
    runs-on: blacksmith-4vcpu-ubuntu-2404
    permissions:
      contents: write
    steps:
      - name: Checkout repository
        uses: actions/checkout@v4
        with:
          persist-credentials: false
          fetch-depth: 0
          ref: ${{ github.ref_name }}

      - name: Setup Bun
        uses: ./.github/actions/setup-bun

      - name: Setup git committer
        id: committer
        uses: ./.github/actions/setup-git-committer
        with:
          opencode-app-id: ${{ vars.OPENCODE_APP_ID }}
          opencode-app-secret: ${{ secrets.OPENCODE_APP_SECRET }}

      - name: Compute changed English docs
        id: changes
        run: |
          FILES=$(git diff --name-only "${{ github.event.before }}" "${{ github.sha }}" -- 'packages/web/src/content/docs/*.mdx' || true)
          if [ -z "$FILES" ]; then
            echo "has_changes=false" >> "$GITHUB_OUTPUT"
            echo "No English docs changed in push range"
            exit 0
          fi
          echo "has_changes=true" >> "$GITHUB_OUTPUT"
          {
            echo "files<<EOF"
            echo "$FILES"
            echo "EOF"
          } >> "$GITHUB_OUTPUT"

      - name: Sync locale docs with OpenCode
        if: steps.changes.outputs.has_changes == 'true'
        uses: sst/opencode/github@latest
        env:
          OPENCODE_API_KEY: ${{ secrets.OPENCODE_API_KEY }}
          GITHUB_TOKEN: ${{ steps.committer.outputs.token }}
          OPENCODE_CONFIG_CONTENT: |
            {
              "permission": {
                "*": "deny",
                "read": {
                  "*": "deny",
                  "packages/web/src/content/docs": "allow",
                  "packages/web/src/content/docs/*": "allow",
                  "packages/web/src/content/docs/*.mdx": "allow",
                  "packages/web/src/content/docs/*/*.mdx": "allow",
                  ".opencode": "allow",
                  ".opencode/agent": "allow",
                  ".opencode/agent/glossary": "allow",
                  ".opencode/agent/translator.md": "allow",
                  ".opencode/agent/glossary/*.md": "allow"
                },
                "edit": {
                  "*": "deny",
                  "packages/web/src/content/docs/*/*.mdx": "allow"
                },
                "glob": {
                  "*": "deny",
                  "packages/web/src/content/docs*": "allow",
                  ".opencode/agent/glossary*": "allow"
                },
                "task": {
                  "*": "deny",
                  "translator": "allow"
                }
              },
              "agent": {
                "translator": {
                  "permission": {
                    "*": "deny",
                    "read": {
                      "*": "deny",
                      ".opencode/agent/translator.md": "allow",
                      ".opencode/agent/glossary/*.md": "allow"
                    }
                  }
                }
              }
            }
        with:
          model: opencode/gpt-5.3-codex
          agent: docs
          use_github_token: true
          prompt: |
            Update localized docs to match the latest English docs changes.

            Changed English doc files:
            <changed_english_docs>
            ${{ steps.changes.outputs.files }}
            </changed_english_docs>

            Requirements:
            1. Update all relevant locale docs under packages/web/src/content/docs/<locale>/ so they reflect these English page changes.
            2. You MUST use the Task tool for translation work and launch subagents with subagent_type `translator` (defined in .opencode/agent/translator.md).
            3. Do not translate directly in the primary agent. Use translator subagent output as the source for locale text updates.
            4. Run translator subagent Task calls in parallel whenever file/locale translation work is independent.
            5. Use only the minimum tools needed for this task (read/glob, file edits, and translator Task). Do not use shell, web, search, or GitHub tools for translation work.
            6. Preserve frontmatter keys, internal links, code blocks, and existing locale-specific metadata unless the English change requires an update.
            7. Keep locale docs structure aligned with their corresponding English pages.
            8. Do not modify English source docs in packages/web/src/content/docs/*.mdx.
            9. If no locale updates are needed, make no changes.

      - name: Commit and push locale docs updates
        if: steps.changes.outputs.has_changes == 'true'
        run: |
          if [ -z "$(git status --porcelain)" ]; then
            echo "No locale docs changes to commit"
            exit 0
          fi
          git add -A
          git commit -m "docs(i18n): sync locale docs from english changes"
          git pull --rebase --autostash origin "$GITHUB_REF_NAME"
          git push origin HEAD:"$GITHUB_REF_NAME"
