Автоматически управляй ключами переводов для интернационализации с помощью Cursor CLI. Этот воркфлоу обнаруживает новые или измененные i18n ключи в пулл-реквестах и заполняет недостающие переводы, не перезаписывая существующие.
name: Auto Translate Keys

on:
  pull_request:
    types: [opened, synchronize, reopened, ready_for_review]

permissions:
  contents: write
  pull-requests: write

jobs:
  i18n:
    if: ${{ !startsWith(github.head_ref, 'translate/') }}
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repository
        uses: actions/checkout@v4
        with:
          fetch-depth: 0

      - name: Install Cursor CLI
        run: |
          curl https://cursor.com/install -fsS | bash
          echo "$HOME/.cursor/bin" >> $GITHUB_PATH

      - name: Configure git identity
        run: |
          git config user.name "Cursor Agent"
          git config user.email "cursoragent@cursor.com"

      - name: Propose i18n updates
        env:
          CURSOR_API_KEY: ${{ secrets.CURSOR_API_KEY }}
          MODEL: gpt-5
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          BRANCH_PREFIX: translate
        run: |
          cursor-agent -p "Ты работаешь в GitHub Actions runner.

          GitHub CLI доступен как `gh` и аутентифицирован через `GH_TOKEN`. Git доступен. У тебя есть доступ на запись к содержимому репозитория, и ты можешь комментировать пулл-реквесты, но не должен создавать или редактировать PR напрямую.

          # Контекст:
          - Репозиторий: ${{ github.repository }}
          - Номер PR: ${{ github.event.pull_request.number }}
          - Head Ref: ${{ github.head_ref }}
          - Префикс ветки переводов: ${{ env.BRANCH_PREFIX }}

          # Цель:
          - Обнаружить i18n ключи, добавленные или измененные в PR, и заполнить только недостающие локали в файлах сообщений. Никогда не перезаписывай существующие переводы.

          # Требования:
          1) Определить измененные ключи, проанализировав diff PR (исходные файлы и файлы сообщений).
          2) Вычислить недостающие ключи для каждой локали, используя исходную/каноническую локаль как эталон.
          3) Добавить записи только для недостающих ключей. Сохранить все существующие значения нетронутыми.
          4) Проверить форматирование JSON и схемы.
          5) Поддерживать постоянную ветку переводов для этого PR head, используя префикс ветки переводов из контекста. Создать её, если отсутствует, иначе обновить, и запушить изменения в origin.
          6) Опубликовать или обновить единственный комментарий PR в оригинальном PR, написанный естественным языком (1–2 предложения), который кратко объясняет, что было обновлено и почему, и включает встроенную ссылку сравнения для быстрого создания PR.
          7) Избегать дублирующих комментариев; обновить предыдущий комментарий бота, если он есть.
          8) Если изменения не нужны, не делать коммитов и не публиковать комментарии.

          # Входные данные и соглашения:
          - Использовать `gh pr diff` и историю git для обнаружения изменений.

          # Результаты при наличии обновлений:
          - Запушенные коммиты в постоянную ветку переводов для этого PR head.
          - Единственный комментарий PR на естественном языке в оригинальном PR со ссылкой сравнения выше.
          " --force --model "$MODEL" --output-format=text