mirror of
https://github.com/openobserve/openobserve.git
synced 2026-11-03 16:10:21 +00:00
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>
62 lines
2.1 KiB
JSON
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}"
|
|
}
|
|
}
|
|
}
|