GitHub Actions

AI-перевод с помощью GitHub Actions и Lingo.dev CI/CD

Что такое GitHub Actions?

GitHub Actions — это платформа CI/CD и автоматизации, встроенная в GitHub. Она позволяет пользователям определять рабочие процессы в YAML-файлах для сборки, тестирования и деплоя кода или автоматизации задач, запускаемых событиями в репозитории.

Что такое Lingo.dev CI/CD?

Lingo.dev CI/CD — это инструмент на базе ИИ для локализации приложений и контента в CI/CD, который гарантирует, что переводы всегда актуальны. Для GitHub Lingo.dev предоставляет собственный GitHub Action, упрощающий интеграцию.

О данном руководстве

В этом руководстве объясняется, как настроить Lingo.dev CI/CD с помощью Lingo.dev GitHub Action и Lingo.dev Engine.

Шаг 1. Установите Lingo.dev CLI

Для начала следуйте быстрому старту для Lingo.dev CLI.

В итоге у вас будет:

  • API-ключ для Lingo.dev
  • файл i18n.json, который настраивает поведение пайплайна перевода
  • возможность переводить контент с помощью npx lingo.dev@latest run

Шаг 2. Настройте секрет репозитория

  1. Перейдите в Settings > Secrets and variables > Actions.
  2. Нажмите New repository secret.
  3. В поле Name введите LINGODOTDEV_API_KEY.
  4. В поле Secret введите API-ключ Lingo.dev.
  5. Нажмите Add secret.

Шаг 3. Выберите рабочий процесс

Вы можете настроить Lingo.dev CI/CD по-разному, чтобы поддерживать разные рабочие процессы. Вот некоторые из рекомендуемых нами вариантов (и примеры для них):

  • Когда контент сливается в main, переводы коммитятся в main
  • Когда контент сливается в main, создаётся pull request из main
  • Когда контент объединяется в feature-ветку, переводы коммитятся в эту ветку
  • Когда контент объединяется в feature-ветку, создаётся pull request из этой ветки

Но не существует «лучшего» рабочего процесса. У каждого есть свои плюсы и минусы. Если не знаешь, с чего начать, советуем выбрать первый вариант. Это самый простой и незаметный рабочий процесс.

Шаг 4. Настрой рабочий процесс

  1. В репозитории создай директорию .github/workflows:

    mkdir -p .github/workflows
    

    Обязательно добавь . в начало .github.

  2. В директории .github/workflows создай YAML-файл:

    touch .github/workflows/translate.yml
    

    Имя файла не важно.

  3. Скопируй один из примеров workflow в файл.

  4. Если workflow создаёт pull request'ы:

    1. Перейди в Settings > Actions > General.
    2. Включи Allow GitHub Actions to create and approve pull requests.
    3. Нажми Save.
  5. Зафиксируй и отправь изменения в ветку main:

    git add  .github/workflows/translate.yml
    git commit -m "feat: GitHub action for Lingo.dev"
    git push
    

(Необязательно) Шаг 5. Кастомизируй рабочий процесс

Lingo.dev CI/CD использует значения по умолчанию, которые в большинстве случаев менять не нужно. Их можно переопределить, передав параметры в GitHub Action:

Доступные параметры:

  • version: версия Lingo.dev CLI (по умолчанию: "latest")
  • api-key: Lingo.dev Platform API Key (обязательный)
  • pull-request: создать pull request с изменениями (по умолчанию: false)
  • commit-message: кастомное сообщение коммита (по умолчанию: "feat: update translations via @LingoDotDev")
  • pull-request-title: кастомный заголовок pull request'а (по умолчанию: "feat: update translations via @LingoDotDev")
  • commit-author-name: имя автора git-коммита (по умолчанию: "Lingo.dev")
  • commit-author-email: email автора git-коммита (по умолчанию: "[email protected]")
  • working-directory: рабочая директория (по умолчанию: ".")
  • process-own-commits: обрабатывать коммиты, сделанные этим действием (по умолчанию: false)
  • parallel: запускать в параллельном режиме (по умолчанию: false)

Пример с кастомными параметрами:

- name: Lingo.dev
  uses: lingodotdev/lingo.dev@main
  with:
    api-key: ${{ secrets.LINGODOTDEV_API_KEY }}
    commit-message: "My custom commit message!"
    parallel: true

Примеры workflow

Коммит в main

Когда контент объединяется в main, переводы коммитятся в main.

name: Translate

on:
  push:
    branches: [main]

permissions:
  contents: write

jobs:
  translate:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Lingo.dev
        uses: lingodotdev/lingo.dev@main
        with:
          api-key: ${{ secrets.LINGODOTDEV_API_KEY }}

Смотреть на GitHub

Pull request из main

Когда контент объединяется в main, создается pull request из main.

name: Translate

on:
  push:
    branches: [main]

permissions:
  contents: write
  pull-requests: write

jobs:
  translate:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Lingo.dev
        uses: lingodotdev/lingo.dev@main
        with:
          api-key: ${{ secrets.LINGODOTDEV_API_KEY }}
          pull-request: true
        env:
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}

Смотреть на GitHub

Коммит в feature-ветку

Когда контент объединяется в feature-ветку, переводы коммитятся в эту ветку.

name: Translate

on:
  push:
    branches-ignore: [main]

permissions:
  contents: write

jobs:
  translate:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Lingo.dev
        uses: lingodotdev/lingo.dev@main
        with:
          api-key: ${{ secrets.LINGODOTDEV_API_KEY }}

Смотреть на GitHub

Pull request из feature-ветки

Когда контент объединяется в feature-ветку, создается pull request из этой ветки.

name: Translate

on:
  push:
    branches-ignore: [main]

permissions:
  contents: write
  pull-requests: write

jobs:
  translate:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Lingo.dev
        uses: lingodotdev/lingo.dev@main
        with:
          api-key: ${{ secrets.LINGODOTDEV_API_KEY }}
          pull-request: true
        env:
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}

Смотреть на GitHub