ops(ci): configure LLM API keys in Forgejo CI for integration test execution #710

Merged
freemo merged 1 commit from ops/m3-ci-llm-keys into master 2026-03-14 22:40:58 +00:00
Owner

Summary

Configures the Forgejo CI pipeline to inject LLM API keys as environment variables during Robot Framework integration test execution, enabling real LLM endpoint calls after mock removal (#698, #699, #700).

Closes #701

Changes

CI pipeline

  • .forgejo/workflows/ci.yml — Updated the integration test job to inject ANTHROPIC_API_KEY and OPENAI_API_KEY from Forgejo repository secrets as environment variables, with masking enabled to prevent exposure in CI logs

Documentation

  • docs/development/ci-cd.md — New documentation describing:
    • Required secret names (ANTHROPIC_API_KEY, OPENAI_API_KEY)
    • How to add secrets via Forgejo repository settings
    • How secrets are injected and masked in CI
    • Verification steps to confirm integration tests pass with real LLM endpoints

Design decisions

  • Secrets are scoped to the integration test job only (not available to unit test or lint jobs)
  • Unit tests (Behave BDD) continue to run without requiring API keys
  • Secret names follow the convention used by the LLM provider SDKs (ANTHROPIC_API_KEY, OPENAI_API_KEY)

Quality Checks

  • nox -e typecheck — 0 Pyright errors
  • nox -e lint — all checks passed
  • nox -e format — all files unchanged
  • No secrets committed to source code
## Summary Configures the Forgejo CI pipeline to inject LLM API keys as environment variables during Robot Framework integration test execution, enabling real LLM endpoint calls after mock removal (#698, #699, #700). Closes #701 ## Changes ### CI pipeline - **`.forgejo/workflows/ci.yml`** — Updated the integration test job to inject `ANTHROPIC_API_KEY` and `OPENAI_API_KEY` from Forgejo repository secrets as environment variables, with masking enabled to prevent exposure in CI logs ### Documentation - **`docs/development/ci-cd.md`** — New documentation describing: - Required secret names (`ANTHROPIC_API_KEY`, `OPENAI_API_KEY`) - How to add secrets via Forgejo repository settings - How secrets are injected and masked in CI - Verification steps to confirm integration tests pass with real LLM endpoints ### Design decisions - Secrets are scoped to the integration test job only (not available to unit test or lint jobs) - Unit tests (Behave BDD) continue to run without requiring API keys - Secret names follow the convention used by the LLM provider SDKs (`ANTHROPIC_API_KEY`, `OPENAI_API_KEY`) ## Quality Checks - `nox -e typecheck` — 0 Pyright errors - `nox -e lint` — all checks passed - `nox -e format` — all files unchanged - No secrets committed to source code
freemo added this to the v3.2.0 milestone 2026-03-12 01:36:10 +00:00
freemo self-assigned this 2026-03-12 20:33:28 +00:00
freemo left a comment

Review — PR #710: ops(ci): configure LLM API keys in Forgejo CI

Diff Summary

  • Files changed: 2 (ci.yml, docs/development/ci-cd.md)
  • Lines: +26 / −0

Commit Message Compliance

  • Issue #701 metadata: ops(ci): configure LLM API keys in Forgejo CI for integration test execution
  • PR commit first line: ops(ci): configure LLM API keys in Forgejo CI for integration test execution
  • Match: Exact match

Closes Keyword

  • PR body contains Closes #701

Label Compliance

Required Label Status
Type label Type/Task
Priority label Missing (issue has Priority/Critical)
MoSCoW label Missing (issue has MoSCoW/Must have)

Code Quality

  • CI change is correctly scoped to the integration_tests job only — unit tests and lint jobs are unaffected.
  • Secrets use ${{ secrets.* }} syntax with automatic masking — no risk of log exposure.
  • Documentation in ci-cd.md is comprehensive: includes a full secrets table covering both LLM keys and existing AWS/ASV secrets, and clearly distinguishes unit vs. integration test requirements.
  • No secrets committed to source.

Verdict: COMMENT

Code and documentation quality are good. The only compliance gap is that the PR itself is missing Priority/Critical and MoSCoW/Must have labels — please add them to match issue #701 before merge.

## Review — PR #710: ops(ci): configure LLM API keys in Forgejo CI ### Diff Summary - **Files changed:** 2 (`ci.yml`, `docs/development/ci-cd.md`) - **Lines:** +26 / −0 ### Commit Message Compliance - **Issue #701 metadata:** `ops(ci): configure LLM API keys in Forgejo CI for integration test execution` - **PR commit first line:** `ops(ci): configure LLM API keys in Forgejo CI for integration test execution` - **Match:** ✅ Exact match ### Closes Keyword - PR body contains `Closes #701` ✅ ### Label Compliance | Required Label | Status | |---|---| | Type label | ✅ `Type/Task` | | Priority label | ❌ Missing (issue has `Priority/Critical`) | | MoSCoW label | ❌ Missing (issue has `MoSCoW/Must have`) | ### Code Quality - CI change is correctly scoped to the `integration_tests` job only — unit tests and lint jobs are unaffected. - Secrets use `${{ secrets.* }}` syntax with automatic masking — no risk of log exposure. - Documentation in `ci-cd.md` is comprehensive: includes a full secrets table covering both LLM keys and existing AWS/ASV secrets, and clearly distinguishes unit vs. integration test requirements. - No secrets committed to source. ### Verdict: COMMENT Code and documentation quality are good. The only compliance gap is that the PR itself is missing `Priority/Critical` and `MoSCoW/Must have` labels — please add them to match issue #701 before merge.
Author
Owner

PM Review — Day 34

Status: Mergeable, 0 reviews, Priority/Critical, M3 (v3.2.0), Points/3
Author: @freemo

Review Summary

Clean, well-scoped 2-file PR:

  • .forgejo/workflows/ci.yml — adds ANTHROPIC_API_KEY and OPENAI_API_KEY secret refs to integration_tests job only (correctly not leaking to lint/unit test jobs)
  • docs/development/ci-cd.md — thorough documentation of CI secrets

No credentials in source code — only ${{ secrets.* }} references. This is a prerequisite for E2E tests to pass in CI.

Assessment

  • No issues found. Clean, minimal, correct.
  • Merge priority: HIGH — this blocks CI execution of all E2E/integration tests that require LLM API keys (PRs #786-#820, #799-#802, etc.)
  • Label note: State is In Progress but this looks complete — should be In Review

Action Items

Who Action Deadline
@brent.edwards Peer review — CI/QA domain, quick approval expected Day 35
@freemo Confirm secrets are configured in Forgejo admin UI Day 35
## PM Review — Day 34 **Status**: Mergeable, 0 reviews, Priority/Critical, M3 (v3.2.0), Points/3 **Author**: @freemo ### Review Summary Clean, well-scoped 2-file PR: - `.forgejo/workflows/ci.yml` — adds `ANTHROPIC_API_KEY` and `OPENAI_API_KEY` secret refs to `integration_tests` job only (correctly not leaking to lint/unit test jobs) - `docs/development/ci-cd.md` — thorough documentation of CI secrets No credentials in source code — only `${{ secrets.* }}` references. This is a prerequisite for E2E tests to pass in CI. ### Assessment - **No issues found.** Clean, minimal, correct. - **Merge priority: HIGH** — this blocks CI execution of all E2E/integration tests that require LLM API keys (PRs #786-#820, #799-#802, etc.) - **Label note**: State is `In Progress` but this looks complete — should be `In Review` ### Action Items | Who | Action | Deadline | |-----|--------|----------| | @brent.edwards | **Peer review** — CI/QA domain, quick approval expected | Day 35 | | @freemo | Confirm secrets are configured in Forgejo admin UI | Day 35 |
freemo left a comment

PM Status — Day 34

@freemo — CI LLM API keys (#701). Mergeable with 2 comments. This is Priority/Critical + Must Have.

Status: In Progress. This is a DevOps prerequisite for real LLM integration tests in CI. Blocks full mock removal completion (#699).

Dependency chain: PR #710#701 (CI keys configured) → #699 (unittest.mock removal) → M3 mock removal complete.

Priority: Critical path for M3 closure. Please prioritize after bug #620 regression investigation.


PM status — Day 34

## PM Status — Day 34 @freemo — CI LLM API keys (#701). Mergeable with 2 comments. This is **Priority/Critical + Must Have**. **Status**: In Progress. This is a DevOps prerequisite for real LLM integration tests in CI. Blocks full mock removal completion (#699). **Dependency chain**: PR #710 → #701 (CI keys configured) → #699 (unittest.mock removal) → M3 mock removal complete. **Priority**: Critical path for M3 closure. Please prioritize after bug #620 regression investigation. --- *PM status — Day 34*
freemo force-pushed ops/m3-ci-llm-keys from c5ad6ab7ea
All checks were successful
CI / benchmark-publish (pull_request) Has been skipped
CI / lint (pull_request) Successful in 15s
CI / build (pull_request) Successful in 16s
CI / quality (pull_request) Successful in 18s
CI / security (pull_request) Successful in 36s
CI / typecheck (pull_request) Successful in 39s
CI / unit_tests (pull_request) Successful in 3m1s
CI / docker (pull_request) Successful in 52s
CI / integration_tests (pull_request) Successful in 4m53s
CI / coverage (pull_request) Successful in 5m30s
CI / benchmark-regression (pull_request) Successful in 35m53s
to 8720400cf7
Some checks failed
CI / lint (pull_request) Successful in 23s
CI / benchmark-publish (pull_request) Has been skipped
CI / security (pull_request) Successful in 45s
CI / typecheck (pull_request) Successful in 47s
CI / quality (pull_request) Successful in 47s
CI / build (pull_request) Successful in 26s
CI / e2e_tests (pull_request) Successful in 44s
CI / unit_tests (pull_request) Successful in 3m10s
CI / integration_tests (pull_request) Successful in 3m50s
CI / docker (pull_request) Successful in 1m21s
CI / coverage (pull_request) Successful in 6m16s
CI / benchmark-regression (pull_request) Has been cancelled
2026-03-14 22:22:31 +00:00
Compare
freemo scheduled this pull request to auto merge when all checks succeed 2026-03-14 22:22:50 +00:00
freemo scheduled this pull request to auto merge when all checks succeed 2026-03-14 22:34:09 +00:00
freemo force-pushed ops/m3-ci-llm-keys from 8720400cf7
Some checks failed
CI / lint (pull_request) Successful in 23s
CI / benchmark-publish (pull_request) Has been skipped
CI / security (pull_request) Successful in 45s
CI / typecheck (pull_request) Successful in 47s
CI / quality (pull_request) Successful in 47s
CI / build (pull_request) Successful in 26s
CI / e2e_tests (pull_request) Successful in 44s
CI / unit_tests (pull_request) Successful in 3m10s
CI / integration_tests (pull_request) Successful in 3m50s
CI / docker (pull_request) Successful in 1m21s
CI / coverage (pull_request) Successful in 6m16s
CI / benchmark-regression (pull_request) Has been cancelled
to ce722ed0ea
All checks were successful
CI / lint (pull_request) Successful in 20s
CI / benchmark-publish (pull_request) Has been skipped
CI / quality (pull_request) Successful in 36s
CI / typecheck (pull_request) Successful in 40s
CI / e2e_tests (pull_request) Successful in 36s
CI / build (pull_request) Successful in 36s
CI / security (pull_request) Successful in 1m3s
CI / unit_tests (pull_request) Successful in 3m14s
CI / docker (pull_request) Successful in 9s
CI / integration_tests (pull_request) Successful in 3m49s
CI / coverage (pull_request) Successful in 5m54s
CI / lint (push) Successful in 32s
CI / quality (push) Successful in 33s
CI / typecheck (push) Successful in 45s
CI / benchmark-regression (push) Has been skipped
CI / build (push) Successful in 23s
CI / e2e_tests (push) Successful in 1m0s
CI / security (push) Successful in 1m12s
CI / unit_tests (push) Successful in 3m23s
CI / integration_tests (push) Successful in 3m41s
CI / docker (push) Successful in 1m6s
CI / coverage (push) Successful in 6m15s
CI / benchmark-publish (push) Successful in 20m11s
CI / benchmark-regression (pull_request) Successful in 38m40s
2026-03-14 22:34:19 +00:00
Compare
freemo merged commit ce722ed0ea into master 2026-03-14 22:40:58 +00:00
freemo deleted branch ops/m3-ci-llm-keys 2026-03-14 22:40:59 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Reference
cleveragents/cleveragents-core!710
No description provided.