diff --git a/.env.example b/.env.example index 44c8d60..f28b97f 100644 --- a/.env.example +++ b/.env.example @@ -15,7 +15,8 @@ GITEA_REGISTRATION_TOKEN=your-registration-token # If set, API checks are performed as a bonus but do NOT affect pass/fail. # Required scopes: read:user, read:repository, read:admin (or just "admin") # Generate token at: Settings → Applications → Generate New Token -# CI_GITEA_TOKEN=your-admin-api-token +# CI_GITEA_API_TOKEN=your-admin-api-token +# Legacy CI_GITEA_TOKEN is also accepted. # Integration test API retries (optional, default: 3). # Number of times to retry API checks waiting for runner to appear. @@ -50,6 +51,16 @@ GITEA_REGISTRATION_TOKEN=your-registration-token # Used by PIP_INSTALL to configure PIP_EXTRA_INDEX_URL CI_GITEA_USERNAME=your-gitea-username +# Role-based Gitea API tokens (devx 0.38.0+) +# DEVELOPER_GITEA_API_TOKEN is used by local `grm trigger-workflow` and `make create-pr`. +# CI_GITEA_API_TOKEN is used by CI workflows (and accepted as a fallback for local tools). +# REVIEWER_GITEA_API_TOKEN is used by CI to post APPROVE reviews; it must belong to a +# different user than the PR author. +# Legacy CI_GITEA_TOKEN and REVIEW_GITEA_TOKEN are accepted as fallbacks. +# DEVELOPER_GITEA_API_TOKEN=your-developer-token +# CI_GITEA_API_TOKEN=your-ci-token +# REVIEWER_GITEA_API_TOKEN=your-reviewer-token + # Vikunja API token (required for `make create-task` dev workflow) # Generate at: Vikunja → Settings → API Tokens # VIKUNJA_TOKEN=your-vikunja-api-token diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml index 23ebc36..756e0a6 100644 --- a/.gitea/workflows/ci.yml +++ b/.gitea/workflows/ci.yml @@ -6,7 +6,7 @@ on: workflow_dispatch: env: - CI_GITEA_TOKEN: ${{ secrets.CI_GITEA_TOKEN }} + CI_GITEA_API_TOKEN: ${{ secrets.CI_GITEA_API_TOKEN }} CI_GITEA_USERNAME: ${{ vars.CI_GITEA_USERNAME }} jobs: @@ -18,7 +18,7 @@ jobs: - uses: actions/checkout@v4 - name: Set up environment env: - CI_GITEA_TOKEN: ${{ secrets.CI_GITEA_TOKEN }} + CI_GITEA_API_TOKEN: ${{ secrets.CI_GITEA_API_TOKEN }} CI_GITEA_USERNAME: ${{ vars.CI_GITEA_USERNAME }} run: make setup-image EXTRAS=ci,lint - name: Lint all @@ -80,7 +80,7 @@ jobs: fetch-depth: 0 - name: Set up environment env: - CI_GITEA_TOKEN: ${{ secrets.CI_GITEA_TOKEN }} + CI_GITEA_API_TOKEN: ${{ secrets.CI_GITEA_API_TOKEN }} CI_GITEA_USERNAME: ${{ vars.CI_GITEA_USERNAME }} run: make setup-image EXTRAS=ci,lint - name: Release dry-run validation @@ -106,7 +106,7 @@ jobs: fetch-depth: 0 - name: Set up environment env: - CI_GITEA_TOKEN: ${{ secrets.CI_GITEA_TOKEN }} + CI_GITEA_API_TOKEN: ${{ secrets.CI_GITEA_API_TOKEN }} CI_GITEA_USERNAME: ${{ vars.CI_GITEA_USERNAME }} run: make setup-image EXTRAS=ci - name: Detect changed paths @@ -135,7 +135,7 @@ jobs: run: make setup-image EXTRAS=ci - name: Validate auto-merge preconditions env: - CI_GITEA_TOKEN: ${{ secrets.CI_GITEA_TOKEN }} + CI_GITEA_API_TOKEN: ${{ secrets.CI_GITEA_API_TOKEN }} VIKUNJA_TOKEN: ${{ secrets.VIKUNJA_TOKEN }} DEVX_TASK_PREFIX: GRM DEVX_VIKUNJA_PROJECT_ID: 6 @@ -165,13 +165,13 @@ jobs: - uses: actions/checkout@v4 - name: Set up environment env: - CI_GITEA_TOKEN: ${{ secrets.CI_GITEA_TOKEN }} + CI_GITEA_API_TOKEN: ${{ secrets.CI_GITEA_API_TOKEN }} CI_GITEA_USERNAME: ${{ vars.CI_GITEA_USERNAME }} run: make setup-image EXTRAS=ci - name: Discover available runners id: discover env: - CI_GITEA_TOKEN: ${{ secrets.CI_GITEA_TOKEN }} + CI_GITEA_API_TOKEN: ${{ secrets.CI_GITEA_API_TOKEN }} MOLECULE_RUNNERS: ${{ vars.MOLECULE_RUNNERS }} PYTHONPATH: src run: | @@ -196,7 +196,7 @@ jobs: - uses: actions/checkout@v4 - name: Set up environment env: - CI_GITEA_TOKEN: ${{ secrets.CI_GITEA_TOKEN }} + CI_GITEA_API_TOKEN: ${{ secrets.CI_GITEA_API_TOKEN }} CI_GITEA_USERNAME: ${{ vars.CI_GITEA_USERNAME }} run: make setup-image EXTRAS=ci,molecule - name: Install Ansible collections @@ -223,12 +223,14 @@ jobs: echo "Docker not available in CI container — skipping molecule tests" exit 0 fi - echo "$CI_GITEA_TOKEN" | docker login git.oblachno.oblachno.fyi -u "$CI_GITEA_USERNAME" --password-stdin + _TOKEN="$CI_GITEA_API_TOKEN"; [ -z "$_TOKEN" ] && _TOKEN="$CI_GITEA_TOKEN" + [ -z "$_TOKEN" ] && { echo "Gitea API token not set — skipping Docker login"; exit 0; } + echo "$_TOKEN" | docker login git.oblachno.oblachno.fyi -u "$CI_GITEA_USERNAME" --password-stdin # shellcheck disable=SC2086 # intentional word splitting for argument expansion python3 -m devx.molecule.molecule_ci_guard $TEST_PAIRS env: GITEA_URL: ${{ github.server_url }} - CI_GITEA_TOKEN: ${{ secrets.CI_GITEA_TOKEN }} + CI_GITEA_API_TOKEN: ${{ secrets.CI_GITEA_API_TOKEN }} CI_GITEA_USERNAME: ${{ vars.CI_GITEA_USERNAME }} RUN_ID: ${{ github.run_id }} ANSIBLE_INJECT_INVOCATION: "1" @@ -250,12 +252,12 @@ jobs: - uses: actions/checkout@v4 - name: Set up environment env: - CI_GITEA_TOKEN: ${{ secrets.CI_GITEA_TOKEN }} + CI_GITEA_API_TOKEN: ${{ secrets.CI_GITEA_API_TOKEN }} CI_GITEA_USERNAME: ${{ vars.CI_GITEA_USERNAME }} run: make setup-image EXTRAS=ci - name: Run automated PR review env: - CI_GITEA_TOKEN: ${{ secrets.CI_GITEA_TOKEN }} + CI_GITEA_API_TOKEN: ${{ secrets.CI_GITEA_API_TOKEN }} PYTHONPATH: src run: | set -euo pipefail @@ -288,15 +290,15 @@ jobs: - uses: actions/checkout@v4 with: fetch-depth: 0 - token: ${{ secrets.CI_GITEA_TOKEN }} + token: ${{ secrets.CI_GITEA_API_TOKEN }} - name: Set up environment env: - CI_GITEA_TOKEN: ${{ secrets.CI_GITEA_TOKEN }} + CI_GITEA_API_TOKEN: ${{ secrets.CI_GITEA_API_TOKEN }} CI_GITEA_USERNAME: ${{ vars.CI_GITEA_USERNAME }} run: make setup-image EXTRAS=ci - name: Post approval review env: - CI_GITEA_TOKEN: ${{ secrets.REVIEW_GITEA_TOKEN }} + REVIEWER_GITEA_API_TOKEN: ${{ secrets.REVIEWER_GITEA_API_TOKEN }} PR_NUMBER: ${{ github.event.number }} REPOSITORY: ${{ github.repository }} PYTHONPATH: src @@ -311,7 +313,7 @@ jobs: --body "Auto-approved: all CI checks passed (quality, molecule, pr-review, pre-merge-check)." - name: Squash merge with task ID env: - CI_GITEA_TOKEN: ${{ secrets.CI_GITEA_TOKEN }} + CI_GITEA_API_TOKEN: ${{ secrets.CI_GITEA_API_TOKEN }} VIKUNJA_TOKEN: ${{ secrets.VIKUNJA_TOKEN }} PYTHONPATH: src DEVX_TASK_PREFIX: GRM diff --git a/.gitea/workflows/post-merge.yml b/.gitea/workflows/post-merge.yml index e230398..36b6bdf 100644 --- a/.gitea/workflows/post-merge.yml +++ b/.gitea/workflows/post-merge.yml @@ -32,7 +32,7 @@ on: workflow_dispatch: env: - CI_GITEA_TOKEN: ${{ secrets.CI_GITEA_TOKEN }} + CI_GITEA_API_TOKEN: ${{ secrets.CI_GITEA_API_TOKEN }} CI_GITEA_USERNAME: ${{ vars.CI_GITEA_USERNAME }} jobs: @@ -48,7 +48,7 @@ jobs: fetch-depth: 1 - name: Set up environment env: - CI_GITEA_TOKEN: ${{ secrets.CI_GITEA_TOKEN }} + CI_GITEA_API_TOKEN: ${{ secrets.CI_GITEA_API_TOKEN }} CI_GITEA_USERNAME: ${{ vars.CI_GITEA_USERNAME }} run: make setup-image EXTRAS=ci - name: Check if this is a release commit @@ -71,7 +71,7 @@ jobs: fetch-depth: 1 - name: Set up environment env: - CI_GITEA_TOKEN: ${{ secrets.CI_GITEA_TOKEN }} + CI_GITEA_API_TOKEN: ${{ secrets.CI_GITEA_API_TOKEN }} CI_GITEA_USERNAME: ${{ vars.CI_GITEA_USERNAME }} run: make setup-image EXTRAS=ci - name: Validate latest commit message @@ -96,10 +96,10 @@ jobs: - uses: actions/checkout@v4 with: fetch-depth: 0 - token: ${{ secrets.CI_GITEA_TOKEN }} + token: ${{ secrets.CI_GITEA_API_TOKEN }} - name: Set up environment env: - CI_GITEA_TOKEN: ${{ secrets.CI_GITEA_TOKEN }} + CI_GITEA_API_TOKEN: ${{ secrets.CI_GITEA_API_TOKEN }} CI_GITEA_USERNAME: ${{ vars.CI_GITEA_USERNAME }} run: make setup-image EXTRAS=ci,lint - name: Configure git @@ -120,7 +120,7 @@ jobs: - name: Notify on failure if: failure() env: - CI_GITEA_TOKEN: ${{ secrets.CI_GITEA_TOKEN }} + CI_GITEA_API_TOKEN: ${{ secrets.CI_GITEA_API_TOKEN }} PYTHONPATH: src run: | . .venv/bin/activate 2>/dev/null || true @@ -144,12 +144,12 @@ jobs: ref: ${{ needs.release.outputs.tag }} - name: Set up environment env: - CI_GITEA_TOKEN: ${{ secrets.CI_GITEA_TOKEN }} + CI_GITEA_API_TOKEN: ${{ secrets.CI_GITEA_API_TOKEN }} CI_GITEA_USERNAME: ${{ vars.CI_GITEA_USERNAME }} run: make setup-image EXTRAS=ci,lint - name: Build and publish release env: - CI_GITEA_TOKEN: ${{ secrets.CI_GITEA_TOKEN }} + CI_GITEA_API_TOKEN: ${{ secrets.CI_GITEA_API_TOKEN }} PYTHONPATH: src run: | . .venv/bin/activate 2>/dev/null || true @@ -160,7 +160,7 @@ jobs: - name: Notify on failure if: failure() env: - CI_GITEA_TOKEN: ${{ secrets.CI_GITEA_TOKEN }} + CI_GITEA_API_TOKEN: ${{ secrets.CI_GITEA_API_TOKEN }} PYTHONPATH: src run: | . .venv/bin/activate 2>/dev/null || true @@ -186,12 +186,12 @@ jobs: fetch-depth: 0 - name: Set up environment env: - CI_GITEA_TOKEN: ${{ secrets.CI_GITEA_TOKEN }} + CI_GITEA_API_TOKEN: ${{ secrets.CI_GITEA_API_TOKEN }} CI_GITEA_USERNAME: ${{ vars.CI_GITEA_USERNAME }} run: make setup-image EXTRAS=ci - name: Sync documentation to wiki env: - CI_GITEA_TOKEN: ${{ secrets.CI_GITEA_TOKEN }} + CI_GITEA_API_TOKEN: ${{ secrets.CI_GITEA_API_TOKEN }} PYTHONPATH: src run: | . .venv/bin/activate 2>/dev/null || true @@ -199,7 +199,7 @@ jobs: - name: Notify on failure if: failure() env: - CI_GITEA_TOKEN: ${{ secrets.CI_GITEA_TOKEN }} + CI_GITEA_API_TOKEN: ${{ secrets.CI_GITEA_API_TOKEN }} PYTHONPATH: src run: | export PATH="$HOME/.local/bin:$PATH" @@ -220,14 +220,14 @@ jobs: with: fetch-depth: 0 ref: master - token: ${{ secrets.CI_GITEA_TOKEN }} + token: ${{ secrets.CI_GITEA_API_TOKEN }} - name: Fetch latest master run: | git fetch origin master git reset --hard origin/master - name: Set up environment env: - CI_GITEA_TOKEN: ${{ secrets.CI_GITEA_TOKEN }} + CI_GITEA_API_TOKEN: ${{ secrets.CI_GITEA_API_TOKEN }} CI_GITEA_USERNAME: ${{ vars.CI_GITEA_USERNAME }} run: make setup-image EXTRAS=lint - name: Generate and push badges @@ -239,7 +239,7 @@ jobs: - name: Notify on failure if: failure() env: - CI_GITEA_TOKEN: ${{ secrets.CI_GITEA_TOKEN }} + CI_GITEA_API_TOKEN: ${{ secrets.CI_GITEA_API_TOKEN }} PYTHONPATH: src run: | export PATH="$HOME/.local/bin:$PATH" @@ -261,7 +261,7 @@ jobs: fetch-depth: 0 - name: Set up environment env: - CI_GITEA_TOKEN: ${{ secrets.CI_GITEA_TOKEN }} + CI_GITEA_API_TOKEN: ${{ secrets.CI_GITEA_API_TOKEN }} CI_GITEA_USERNAME: ${{ vars.CI_GITEA_USERNAME }} run: make setup-image EXTRAS=ci - name: Update Vikunja task @@ -276,7 +276,7 @@ jobs: - name: Notify on failure if: failure() env: - CI_GITEA_TOKEN: ${{ secrets.CI_GITEA_TOKEN }} + CI_GITEA_API_TOKEN: ${{ secrets.CI_GITEA_API_TOKEN }} PYTHONPATH: src run: | export PATH="$HOME/.local/bin:$PATH" @@ -296,12 +296,12 @@ jobs: - uses: actions/checkout@v4 - name: Set up environment env: - CI_GITEA_TOKEN: ${{ secrets.CI_GITEA_TOKEN }} + CI_GITEA_API_TOKEN: ${{ secrets.CI_GITEA_API_TOKEN }} CI_GITEA_USERNAME: ${{ vars.CI_GITEA_USERNAME }} run: make setup-image EXTRAS=ci - name: Ensure branch protection and labels env: - CI_GITEA_TOKEN: ${{ secrets.CI_GITEA_TOKEN }} + CI_GITEA_API_TOKEN: ${{ secrets.CI_GITEA_API_TOKEN }} PYTHONPATH: src DEVX_REPO_NAME: grm DEVX_REPO_OWNER: oblachno-oss @@ -312,7 +312,7 @@ jobs: - name: Notify on failure if: failure() env: - CI_GITEA_TOKEN: ${{ secrets.CI_GITEA_TOKEN }} + CI_GITEA_API_TOKEN: ${{ secrets.CI_GITEA_API_TOKEN }} PYTHONPATH: src run: | export PATH="$HOME/.local/bin:$PATH" diff --git a/Makefile b/Makefile index 524377a..234d0f7 100644 --- a/Makefile +++ b/Makefile @@ -86,7 +86,8 @@ setup-release: $(VENV)/bin/activate .env configure-gitea-pypi # the venv symlink first, then installs the project. setup-image: @if [ -d /opt/venv ]; then ln -sf /opt/venv .venv; . .venv/bin/activate; \ - if [ -n "$$CI_GITEA_TOKEN" ]; then export PIP_EXTRA_INDEX_URL="https://$$CI_GITEA_USERNAME:$$CI_GITEA_TOKEN@git.oblachno.oblachno.fyi/api/packages/oblachno-oss/pypi/simple/"; fi; \ + _TOKEN="$$CI_GITEA_API_TOKEN"; [ -z "$$_TOKEN" ] && _TOKEN="$$DEVELOPER_GITEA_API_TOKEN"; [ -z "$$_TOKEN" ] && _TOKEN="$$CI_GITEA_TOKEN"; \ + if [ -n "$$_TOKEN" ]; then export PIP_EXTRA_INDEX_URL="https://$$CI_GITEA_USERNAME:$${_TOKEN}@git.oblachno.oblachno.fyi/api/packages/oblachno-oss/pypi/simple/"; fi; \ pip install -e .$(if $(EXTRAS),[$(EXTRAS)],); \ else echo "[setup-image] /opt/venv not found — falling back to setup-ci"; $(MAKE) setup-ci; fi @@ -159,10 +160,9 @@ workflow-dryrun: devx-workflow-dryrun workflow-check: devx-workflow-check configure-gitea-pypi: - @if [ -z "$$CI_GITEA_TOKEN" ]; then . ./.env 2>/dev/null; fi; \ - CI_GITEA_TOKEN="$$CI_GITEA_TOKEN"; \ - if [ -z "$$CI_GITEA_TOKEN" ]; then echo "[configure-gitea-pypi] CI_GITEA_TOKEN not set — skipping (devx must be on public PyPI)"; exit 0; fi; \ - echo "[configure-gitea-pypi] Gitea PyPI registry configured (CI_GITEA_TOKEN present)." + _TOKEN="$$CI_GITEA_API_TOKEN"; [ -z "$$_TOKEN" ] && _TOKEN="$$DEVELOPER_GITEA_API_TOKEN"; [ -z "$$_TOKEN" ] && _TOKEN="$$CI_GITEA_TOKEN"; \ + if [ -z "$$_TOKEN" ]; then echo "[configure-gitea-pypi] Gitea API token not set — skipping (devx must be on public PyPI)"; exit 0; fi; \ + echo "[configure-gitea-pypi] Gitea PyPI registry configured (token present)." ansible-lint: PATH="$(PWD)/$(BIN):$$PATH" $(BIN)/ansible-lint ansible/ diff --git a/pyproject.toml b/pyproject.toml index 3016f9f..4b2382c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -34,7 +34,7 @@ ci = [ "build==1.5.0", "twine==6.2.0", # Reusable CI/CD and dev tools (auto-merge, pr-review, pre-push checks, etc.) - "devx==0.37.0", + "devx==0.38.0", ] # Lint and type-checking tools (quality job) lint = [ @@ -54,7 +54,7 @@ molecule = [ dev = [ "grm[ci,lint,molecule]", # Reusable CI/CD and dev tools (pre-push hooks, create-task, create-pr) - "devx==0.37.0", + "devx==0.38.0", # Non-Python dev dependency: checkmake (Makefile linter) # Install via: go install github.com/checkmake/checkmake/cmd/checkmake@latest ] diff --git a/src/grm/cli.py b/src/grm/cli.py index b7ed86a..67120d3 100644 --- a/src/grm/cli.py +++ b/src/grm/cli.py @@ -125,8 +125,8 @@ def cli(ctx: click.Context, become_password_file: str | None, verbose: bool) -> @click.option( "--admin-token", "-a", - default=lambda: os.getenv("CI_GITEA_TOKEN"), - help=_("Gitea admin API token for integration test (env: CI_GITEA_TOKEN)"), + default=lambda: os.getenv("CI_GITEA_API_TOKEN") or os.getenv("CI_GITEA_TOKEN"), + help=_("Gitea admin API token for integration test (env: CI_GITEA_API_TOKEN or CI_GITEA_TOKEN)"), ) @click.option( "--integration-retries", @@ -528,8 +528,10 @@ def list_runners(ask_become_pass: bool, no_status: bool) -> None: ) @click.option( "--token", - default=lambda: os.getenv("CI_GITEA_TOKEN"), - help=_("Gitea API token (env: CI_GITEA_TOKEN)"), + default=lambda: ( + os.getenv("DEVELOPER_GITEA_API_TOKEN") or os.getenv("CI_GITEA_API_TOKEN") or os.getenv("CI_GITEA_TOKEN") + ), + help=_("Gitea API token (env: DEVELOPER_GITEA_API_TOKEN, CI_GITEA_API_TOKEN, or CI_GITEA_TOKEN)"), ) @click.option( "--list", diff --git a/src/grm/translations.json b/src/grm/translations.json index f842e92..c7555b9 100644 --- a/src/grm/translations.json +++ b/src/grm/translations.json @@ -175,13 +175,13 @@ "ru": "URL Gitea (env: GITEA_URL)", "zh": "Gitea URL(环境变量: GITEA_URL)" }, - "Gitea admin API token for integration test (env: CI_GITEA_TOKEN)": { - "bg": "Gitea admin API токен за интеграционен тест (env: CI_GITEA_TOKEN)", - "de": "Gitea-Admin-API-Token für Integrationstest (env: CI_GITEA_TOKEN)", - "en": "Gitea admin API token for integration test (env: CI_GITEA_TOKEN)", - "pl": "Token API administratora Gitea do testów integracyjnych (env: CI_GITEA_TOKEN)", - "ru": "Токен админ API Gitea для интеграционного теста (env: CI_GITEA_TOKEN)", - "zh": "Gitea 管理员 API 令牌,用于集成测试(环境变量: CI_GITEA_TOKEN)" + "Gitea admin API token for integration test (env: CI_GITEA_API_TOKEN or CI_GITEA_TOKEN)": { + "bg": "Gitea admin API token for integration test (env: CI_GITEA_API_TOKEN or CI_GITEA_TOKEN)", + "de": "Gitea admin API token for integration test (env: CI_GITEA_API_TOKEN or CI_GITEA_TOKEN)", + "en": "Gitea admin API token for integration test (env: CI_GITEA_API_TOKEN or CI_GITEA_TOKEN)", + "pl": "Gitea admin API token for integration test (env: CI_GITEA_API_TOKEN or CI_GITEA_TOKEN)", + "ru": "Gitea admin API token for integration test (env: CI_GITEA_API_TOKEN or CI_GITEA_TOKEN)", + "zh": "Gitea admin API token for integration test(环境变量: CI_GITEA_API_TOKEN or CI_GITEA_TOKEN)" }, "HEALTHY": { "bg": "ЗДРАВ", @@ -703,13 +703,13 @@ "ru": "Git ref для запуска workflow (по умолчанию: master)", "zh": "运行工作流的 Git ref(默认:master)" }, - "Gitea API token (env: CI_GITEA_TOKEN)": { - "bg": "Gitea API токен (env: CI_GITEA_TOKEN)", - "de": "Gitea API-Token (env: CI_GITEA_TOKEN)", - "en": "Gitea API token (env: CI_GITEA_TOKEN)", - "pl": "Token API Gitea (env: CI_GITEA_TOKEN)", - "ru": "Токен API Gitea (env: CI_GITEA_TOKEN)", - "zh": "Gitea API 令牌(环境变量:CI_GITEA_TOKEN)" + "Gitea API token (env: DEVELOPER_GITEA_API_TOKEN, CI_GITEA_API_TOKEN, or CI_GITEA_TOKEN)": { + "bg": "Gitea API token (env: DEVELOPER_GITEA_API_TOKEN, CI_GITEA_API_TOKEN, or CI_GITEA_TOKEN)", + "de": "Gitea API token (env: DEVELOPER_GITEA_API_TOKEN, CI_GITEA_API_TOKEN, or CI_GITEA_TOKEN)", + "en": "Gitea API token (env: DEVELOPER_GITEA_API_TOKEN, CI_GITEA_API_TOKEN, or CI_GITEA_TOKEN)", + "pl": "Gitea API token (env: DEVELOPER_GITEA_API_TOKEN, CI_GITEA_API_TOKEN, or CI_GITEA_TOKEN)", + "ru": "Gitea API token (env: DEVELOPER_GITEA_API_TOKEN, CI_GITEA_API_TOKEN, or CI_GITEA_TOKEN)", + "zh": "Gitea API token(环境变量:DEVELOPER_GITEA_API_TOKEN, CI_GITEA_API_TOKEN, or CI_GITEA_TOKEN)" }, "List available workflows instead of triggering one": { "bg": "Списък на наличните работни процеси вместо изпълнение", diff --git a/tests/unit/test_cli.py b/tests/unit/test_cli.py index 77a3ebc..840b938 100644 --- a/tests/unit/test_cli.py +++ b/tests/unit/test_cli.py @@ -9,7 +9,12 @@ from click.testing import CliRunner from grm import __version__ from grm.cli import cli -_TEST_ENV = {"GITEA_URL": "https://git.example.com", "CI_GITEA_TOKEN": ""} +_TEST_ENV = { + "GITEA_URL": "https://git.example.com", + "DEVELOPER_GITEA_API_TOKEN": "", + "CI_GITEA_API_TOKEN": "", + "CI_GITEA_TOKEN": "", +} class TestCLI: