Skip to content

GitHub Actions

當您希望儲存庫自動翻譯已變更的文件並用產生的輸出建立拉取請求時,請使用 GitHub Actions。

大多數儲存庫應使用標準的 GITHUB_TOKEN 設定。只有當您的組織限制預設權杖權限或需要基於應用程式的驗證時,才使用 GitHub App 設定。

Prerequisites

在建立工作流程之前,請設定翻譯執行所需的 AI 服務機密。

文字翻譯需要一個語言模型供應商:

  • 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, 加上可選的 OPENAI_ORG_IDOPENAI_BASE_URL

影像翻譯另外需要 Azure AI Vision:

  • AZURE_AI_SERVICE_API_KEY
  • AZURE_AI_SERVICE_ENDPOINT

請參閱 ConfigurationAzure AI Setup 以取得本機設定細節。

Standard Setup

對於大多數公開與私人儲存庫,請使用此設定。

Step 1: Add Repository Secrets

在目標儲存庫中,開啟 設定 > 機密與變數 > Actions,然後新增工作流程將使用的供應商機密。

選取 Actions 機密

Step 2: Enable Workflow Permissions

開啟 設定 > Actions > General

工作流程權限 底下:

  1. 選取 Read and write permissions
  2. 啟用 Allow GitHub Actions to create and approve pull requests
  3. 儲存此設定。

工作流程權限設定

Step 3: Add the Workflow

建立 .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/

translate -l "es fr de" -y 改為您專案需要的目標語言與內容標記。對於大型儲存庫,請在 on: 下加入 paths: 篩選,讓工作流程只在文件變更時執行。

GitHub App Setup

GITHUB_TOKEN 無法在您組織中建立提交或拉取請求時,請使用此設定。

Step 1: Create or Install a GitHub App

建立一個對 ContentsPull requests 具有讀/寫權限的 GitHub App,或安裝組織提供的應用程式(如果您的組織已經維護一個)。

記錄下來:

  • App ID
  • Private key contents

將它們儲存為儲存庫機密:

  • GH_APP_ID
  • GH_APP_PRIVATE_KEY

Step 2: Generate an App Token

使用與標準設定相同的工作流程,但在拉取請求步驟之前加入一個 app-token 步驟:

      - 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/

Runner Limits

GitHub 托管的 runner 有最大工作持續時間限制。大型儲存庫或許多目標語言可能會超過該限制。

對於大量翻譯工作負載:

  • 每次執行翻譯較少的語言。
  • 使用內容標記,如 -md-nb-img
  • 當儲存庫大小或模型延遲使托管 runner 不可靠時,使用自我託管 runner。

Review in CI

當拉取請求應驗證產生的翻譯但不呼叫 LLM 或 Vision 供應商時,請使用 co-op-review

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

co-op-review 是一個測試中的確定性審查命令。它的檢查與輸出架構可能會演變,但它被設計為對 CI 安全,因為它不會寫入檔案或呼叫模型供應商。