Skip to content

GitHub Actions

Use o GitHub Actions quando você quiser que um repositório traduza automaticamente a documentação alterada e abra um pull request com os resultados gerados.

A maioria dos repositórios deve usar a configuração padrão GITHUB_TOKEN. Use a configuração com GitHub App apenas quando sua organização restringe as permissões do token padrão ou exige autenticação baseada em app.

Pré-requisitos

Antes de criar o workflow, configure os segredos do serviço de IA que sua execução de tradução precisa.

A tradução de texto exige um provedor de modelo de linguagem:

  • Azure OpenAI: AZURE_OPENAI_API_KEY, AZURE_OPENAI_ENDPOINT, AZURE_OPENAI_MODEL_NAME, AZURE_OPENAI_CHAT_DEPLOYMENT_NAME, AZURE_OPENAI_API_VERSION
  • OpenAI: OPENAI_API_KEY, OPENAI_CHAT_MODEL_ID, além de opcionais OPENAI_ORG_ID e OPENAI_BASE_URL

A tradução de imagens adicionalmente requer Azure AI Vision:

  • AZURE_AI_SERVICE_API_KEY
  • AZURE_AI_SERVICE_ENDPOINT

Consulte Configuração e Configuração do Azure AI para detalhes de configuração local.

Configuração Padrão

Use esta configuração para a maioria dos repositórios públicos e privados.

Passo 1: Adicionar Segredos do Repositório

No repositório de destino, abra Settings > Secrets and variables > Actions, então adicione os segredos do provedor que seu workflow irá usar.

Selecionar segredos do Actions

Passo 2: Habilitar Permissões do Workflow

Abra Settings > Actions > General.

Em Workflow permissions:

  1. Selecione Read and write permissions.
  2. Habilite Allow GitHub Actions to create and approve pull requests.
  3. Salve a configuração.

Configuração de permissão do fluxo de trabalho

Passo 3: Adicionar o Workflow

Crie .github/workflows/co-op-translator.yml:

name: Co-op Translator

on:
  push:
    branches:
      - main

jobs:
  co-op-translator:
    runs-on: ubuntu-latest

    permissions:
      contents: write
      pull-requests: write

    steps:
      - name: Checkout repository
        uses: actions/checkout@v4
        with:
          fetch-depth: 0

      - name: Set up Python
        uses: actions/setup-python@v4
        with:
          python-version: "3.10"

      - name: Install Co-op Translator
        run: |
          python -m pip install --upgrade pip
          pip install co-op-translator

      - name: Run Co-op Translator
        env:
          PYTHONIOENCODING: utf-8
          AZURE_AI_SERVICE_API_KEY: ${{ secrets.AZURE_AI_SERVICE_API_KEY }}
          AZURE_AI_SERVICE_ENDPOINT: ${{ secrets.AZURE_AI_SERVICE_ENDPOINT }}
          AZURE_OPENAI_API_KEY: ${{ secrets.AZURE_OPENAI_API_KEY }}
          AZURE_OPENAI_ENDPOINT: ${{ secrets.AZURE_OPENAI_ENDPOINT }}
          AZURE_OPENAI_MODEL_NAME: ${{ secrets.AZURE_OPENAI_MODEL_NAME }}
          AZURE_OPENAI_CHAT_DEPLOYMENT_NAME: ${{ secrets.AZURE_OPENAI_CHAT_DEPLOYMENT_NAME }}
          AZURE_OPENAI_API_VERSION: ${{ secrets.AZURE_OPENAI_API_VERSION }}
          OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
          OPENAI_ORG_ID: ${{ secrets.OPENAI_ORG_ID }}
          OPENAI_CHAT_MODEL_ID: ${{ secrets.OPENAI_CHAT_MODEL_ID }}
          OPENAI_BASE_URL: ${{ secrets.OPENAI_BASE_URL }}
        run: |
          translate -l "es fr de" -y

      - name: Create Pull Request with translations
        uses: peter-evans/create-pull-request@v5
        with:
          token: ${{ secrets.GITHUB_TOKEN }}
          commit-message: "Update translations via Co-op Translator"
          title: "Update translations via Co-op Translator"
          body: |
            This PR updates translations for recent changes to the main branch.

            Generated by Co-op Translator.
          branch: update-translations
          base: main
          labels: translation, automated-pr
          delete-branch: true
          add-paths: |
            translations/
            translated_images/

Altere translate -l "es fr de" -y para os idiomas-alvo e flags de conteúdo que seu projeto precisa. Para repositórios grandes, adicione um filtro paths: sob on: para que o workflow execute apenas quando a documentação for alterada.

Configuração com GitHub App

Use esta configuração quando GITHUB_TOKEN não puder criar commits ou pull requests em sua organização.

Passo 1: Criar ou Instalar um GitHub App

Crie um GitHub App com acesso de leitura/escrita a Contents e Pull requests, ou instale o app fornecido pela organização se sua organização já mantiver um.

Registre:

  • App ID
  • Conteúdo da chave privada

Armazene-os como segredos do repositório:

  • GH_APP_ID
  • GH_APP_PRIVATE_KEY

Passo 2: Gerar um Token do App

Use o mesmo workflow da configuração padrão, mas adicione um passo app-token antes do passo do pull request:

      - name: Authenticate GitHub App
        id: generate_token
        uses: tibdex/github-app-token@v1
        with:
          app_id: ${{ secrets.GH_APP_ID }}
          private_key: ${{ secrets.GH_APP_PRIVATE_KEY }}

      - name: Create Pull Request with translations
        uses: peter-evans/create-pull-request@v5
        with:
          token: ${{ steps.generate_token.outputs.token }}
          commit-message: "Update translations via Co-op Translator"
          title: "Update translations via Co-op Translator"
          branch: update-translations
          base: main
          delete-branch: true
          add-paths: |
            translations/
            translated_images/

Limites do Runner

Os runners hospedados pelo GitHub têm uma duração máxima de job. Repositórios grandes ou muitos idiomas-alvo podem exceder esse limite.

Para grandes cargas de trabalho de tradução:

  • Traduza menos idiomas por execução.
  • Use flags de conteúdo como -md, -nb ou -img.
  • Use um runner self-hosted quando o tamanho do repositório ou a latência do modelo tornar os runners hospedados pouco confiáveis.

Revisão no CI

Use co-op-review quando um pull request deve validar traduções geradas sem chamar provedores LLM ou Vision.

      - name: Review translated outputs
        run: |
          co-op-review --changed-from "origin/${{ github.base_ref }}" --format github

co-op-review é um comando de revisão determinístico em beta. Suas verificações e esquema de saída podem evoluir, mas ele foi projetado para ser seguro para CI porque não escreve arquivos nem chama provedores de modelo.