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, plus optional OPENAI_ORG_ID and OPENAI_BASE_URL

ইমেজ অনুবাদের জন্য অতিরিক্তভাবে Azure AI Vision প্রয়োজন:

  • AZURE_AI_SERVICE_API_KEY
  • AZURE_AI_SERVICE_ENDPOINT

লোকাল কনফিগারেশন বিবরণ দেখতে Configuration এবং Azure AI Setup দেখুন।

Standard Setup

অধিকাংশ পাবলিক এবং প্রাইভেট রিপোজিটরগুলোর জন্য এই সেটআপ ব্যবহার করুন।

Step 1: Add Repository Secrets

আপনার লক্ষ্য রিপোজিটর-এ যান, Settings > Secrets and variables > Actions খুলুন, তারপর আপনার ওয়ার্কফ্লো যে প্রোভাইডার সিক্রেট ব্যবহার করবে সেগুলো যোগ করুন।

Actions সিক্রেটসমূহ নির্বাচন করুন

Step 2: Enable Workflow Permissions

Settings > Actions > General খুলুন।

Workflow permissions এর অধীনে:

  1. নির্বাচন করুন Read and write permissions
  2. সক্ষম করুন Allow GitHub Actions to create and approve pull requests
  3. সেটিংটি সংরক্ষণ করুন।

ওয়ার্কফ্লো অনুমতি সেটিং

Step 3: Add the Workflow

Create .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

একটি GitHub অ্যাপ তৈরি করুন যেটি Contents এবং Pull requests-এ রিড/রাইট অ্যাক্সেস রাখে, অথবা যদি আপনার সংস্থা ইতিমধ্যে একটি অ্যাপ রক্ষা করে থাকে তাহলে সেটি ইনস্টল করুন।

নোট করুন:

  • 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-hosted রানারগুলোর একটি সর্বোচ্চ জব ডিউরেশন আছে। বড় রিপোজিটরি বা বহু টার্গেট ভাষা সেই সীমা অতিক্রম করতে পারে।

বড় অনুবাদ ওয়ার্কলোডের জন্য:

  • প্রতি রান কম ভাষা অনুবাদ করুন।
  • -md, -nb, বা -img মত কন্টেন্ট ফ্ল্যাগ ব্যবহার করুন।
  • যখন রিপোজিটর সাইজ বা মডেল ল্যাটেন্সি হোস্টেড রানারকে অবিশ্বস্ত করে তখন self-hosted রানার ব্যবহার করুন।

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-এর জন্য নিরাপদভাবে ডিজাইন করা হয়েছে কারণ এটি ফাইল লেখে না বা মডেল প্রোভাইডারদের কল করে না।