Files
openobserve/opencode.jsonc
T
Shrinath RaoandClaude Opus 4.8 93d5e5b90d ci(test): e2e-council enrichment — summary table, auto-review, + CLA bot-identity fix (#12684)
Post-PR "enrichment" follow-ups for the E2E test bot, plus a CLA fix.
(Was stacked on #12682; rebased onto `main` after that merged.)

## What this adds

**1. Test-case summary table**
When the test PR opens, the bot posts a **table of the test cases it
added/changed** — in the test PR body *and* the "E2E Council" comment on
the source PR:

| Test case | Type | What it verifies |
|---|---|---|
| `should …` | new / append / extend | one-line intent |

(Engineer emits `test-summary.json`; `pr_back` renders it. No table when
there's nothing to add.)

**2. Auto-address the AI review (OFF by default)**
New final job `review_address`, gated by repo variable
**`E2E_AUTO_REVIEW`** (default off). After the test PR opens it waits ~6
min for the repo's AI review, then a **conservative "Responder" agent**:
- **validates** each finding (the bot is noisy — default is to *not*
change code),
- fixes **only clearly-valid** ones in `tests/ui-testing` (never
`.github` / `.opencode` / `playwright.yml` / source),
- pushes tests-only fixes (the repo's Playwright CI re-validates the
PR),
- posts a rationale on the test PR and minimizes the bot comment.

One bounded pass. Scoped `GITHUB_TOKEN` only. **To enable:** create repo
variable `E2E_AUTO_REVIEW=true`.

**3. CLA fix — commit as `github-actions[bot]`**
The pipeline previously committed generated tests as `openobserve-bot
<bot@openobserve.ai>`, which isn't a GitHub account → CLA assistant
couldn't match/sign it and blocked the test PR. Now it commits as the
canonical **`github-actions[bot]`** identity (a real bot account GitHub
resolves via its noreply email), across generate + verify_heal +
review_address.
> **Admin action:** allowlist `github-actions[bot]` in CLA assistant,
then `recheck`.

---

<details>
<summary>Design notes</summary>

- Responder is deliberately conservative: a wrong "fix" that breaks a
passing test is worse than leaving a nitpick. It dismisses
stale/incorrect/style findings.
- Both auto-features are flag-gated OFF (same posture as
`E2E_AUTO_ON_MERGE`) — auto-acting warrants opt-in.
- No heavy re-build in `review_address`; the repo's existing Playwright
CI re-validates the pushed fix.
- CodeQL untrusted-checkout on the new `review_address` checkout (#416)
dismissed — same allowlist false positive as prior PRs.

</details>

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-16 05:46:08 +00:00

62 lines
2.1 KiB
JSON

{
// OpenCode configuration for the e2e_ci_council_of_agents pipeline.
// Used by .github/workflows/e2e-council.yml to run the CI test-generation agents on DeepSeek.
// Docs: https://opencode.ai/docs/ — verify provider shape against current docs at build time.
"$schema": "https://opencode.ai/config.json",
"provider": {
"deepseek": {
"npm": "@ai-sdk/openai-compatible",
"name": "DeepSeek",
"options": {
"baseURL": "https://api.deepseek.com",
"apiKey": "{env:DEEPSEEK_API_KEY_E2E}"
},
"models": {
"deepseek-v4-pro": {
"name": "DeepSeek-V4-Pro",
"limit": { "context": 1048576, "output": 262144 }
}
}
}
},
// Default model for runs that don't pass --model explicitly.
// The workflow passes --model deepseek/deepseek-v4-pro per agent invocation.
"model": "deepseek/deepseek-v4-pro",
// Register the CI agents explicitly so `--agent e2e-ci-*` resolves deterministically.
// OpenCode does NOT auto-discover agents nested in .opencode/agents/<subdir>/ (the first CI
// run fell back to the default agent), so we point each name at its prompt file here.
"agent": {
"e2e-ci-triage": {
"mode": "primary",
"prompt": "{file:./.opencode/agents/e2e_ci_council_of_agents/e2e-ci-triage.md}"
},
"e2e-ci-analyst": {
"mode": "primary",
"prompt": "{file:./.opencode/agents/e2e_ci_council_of_agents/e2e-ci-analyst.md}"
},
"e2e-ci-architect": {
"mode": "primary",
"prompt": "{file:./.opencode/agents/e2e_ci_council_of_agents/e2e-ci-architect.md}"
},
"e2e-ci-engineer": {
"mode": "primary",
"prompt": "{file:./.opencode/agents/e2e_ci_council_of_agents/e2e-ci-engineer.md}"
},
"e2e-ci-sentinel": {
"mode": "primary",
"prompt": "{file:./.opencode/agents/e2e_ci_council_of_agents/e2e-ci-sentinel.md}"
},
"e2e-ci-healer": {
"mode": "primary",
"prompt": "{file:./.opencode/agents/e2e_ci_council_of_agents/e2e-ci-healer.md}"
},
"e2e-ci-responder": {
"mode": "primary",
"prompt": "{file:./.opencode/agents/e2e_ci_council_of_agents/e2e-ci-responder.md}"
}
}
}