cicaddy-github 0.7.0__tar.gz → 0.8.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {cicaddy_github-0.7.0 → cicaddy_github-0.8.0}/.agents/skills/cicaddy-action/SKILL.md +12 -6
- {cicaddy_github-0.7.0 → cicaddy_github-0.8.0}/.github/workflows/pr-review.yml +7 -2
- {cicaddy_github-0.7.0 → cicaddy_github-0.8.0}/AGENTS.md +6 -2
- {cicaddy_github-0.7.0 → cicaddy_github-0.8.0}/PKG-INFO +122 -26
- {cicaddy_github-0.7.0 → cicaddy_github-0.8.0}/README.md +120 -24
- {cicaddy_github-0.7.0 → cicaddy_github-0.8.0}/action.yml +9 -1
- {cicaddy_github-0.7.0 → cicaddy_github-0.8.0}/docs/delegation.md +1 -1
- cicaddy_github-0.8.0/docs/providers.md +269 -0
- {cicaddy_github-0.7.0 → cicaddy_github-0.8.0}/entrypoint.sh +2 -0
- {cicaddy_github-0.7.0 → cicaddy_github-0.8.0}/pyproject.toml +2 -2
- {cicaddy_github-0.7.0 → cicaddy_github-0.8.0}/src/cicaddy_github/__init__.py +1 -1
- {cicaddy_github-0.7.0 → cicaddy_github-0.8.0}/src/cicaddy_github/config/settings.py +10 -0
- {cicaddy_github-0.7.0 → cicaddy_github-0.8.0}/src/cicaddy_github/github_integration/agents.py +194 -4
- {cicaddy_github-0.7.0 → cicaddy_github-0.8.0}/src/cicaddy_github/github_integration/analyzer.py +77 -4
- cicaddy_github-0.8.0/tests/unit/test_inline_review.py +1369 -0
- {cicaddy_github-0.7.0 → cicaddy_github-0.8.0}/tests/unit/test_settings.py +4 -4
- cicaddy_github-0.7.0/docs/providers.md +0 -178
- {cicaddy_github-0.7.0 → cicaddy_github-0.8.0}/.github/dependabot.yml +0 -0
- {cicaddy_github-0.7.0 → cicaddy_github-0.8.0}/.github/workflows/changelog.yml +0 -0
- {cicaddy_github-0.7.0 → cicaddy_github-0.8.0}/.github/workflows/ci.yml +0 -0
- {cicaddy_github-0.7.0 → cicaddy_github-0.8.0}/.github/workflows/release.yml +0 -0
- {cicaddy_github-0.7.0 → cicaddy_github-0.8.0}/.gitignore +0 -0
- {cicaddy_github-0.7.0 → cicaddy_github-0.8.0}/.pre-commit-config.yaml +0 -0
- {cicaddy_github-0.7.0 → cicaddy_github-0.8.0}/CLAUDE.md +0 -0
- {cicaddy_github-0.7.0 → cicaddy_github-0.8.0}/CODE_OF_CONDUCT.md +0 -0
- {cicaddy_github-0.7.0 → cicaddy_github-0.8.0}/CONTRIBUTING.md +0 -0
- {cicaddy_github-0.7.0 → cicaddy_github-0.8.0}/Dockerfile +0 -0
- {cicaddy_github-0.7.0 → cicaddy_github-0.8.0}/LICENSE +0 -0
- {cicaddy_github-0.7.0 → cicaddy_github-0.8.0}/src/cicaddy_github/config/__init__.py +0 -0
- {cicaddy_github-0.7.0 → cicaddy_github-0.8.0}/src/cicaddy_github/github_integration/__init__.py +0 -0
- {cicaddy_github-0.7.0 → cicaddy_github-0.8.0}/src/cicaddy_github/github_integration/detector.py +0 -0
- {cicaddy_github-0.7.0 → cicaddy_github-0.8.0}/src/cicaddy_github/github_integration/go_dep_review_tools.py +0 -0
- {cicaddy_github-0.7.0 → cicaddy_github-0.8.0}/src/cicaddy_github/github_integration/tools.py +0 -0
- {cicaddy_github-0.7.0 → cicaddy_github-0.8.0}/src/cicaddy_github/plugin.py +0 -0
- {cicaddy_github-0.7.0 → cicaddy_github-0.8.0}/src/cicaddy_github/security/__init__.py +0 -0
- {cicaddy_github-0.7.0 → cicaddy_github-0.8.0}/src/cicaddy_github/security/leak_detector.py +0 -0
- {cicaddy_github-0.7.0 → cicaddy_github-0.8.0}/src/cicaddy_github/validation.py +0 -0
- {cicaddy_github-0.7.0 → cicaddy_github-0.8.0}/tasks/changelog_report.yml +0 -0
- {cicaddy_github-0.7.0 → cicaddy_github-0.8.0}/tasks/go_dep_impact_review.yml +0 -0
- {cicaddy_github-0.7.0 → cicaddy_github-0.8.0}/tasks/pr_review.yml +0 -0
- {cicaddy_github-0.7.0 → cicaddy_github-0.8.0}/templates/report_template.html +0 -0
- {cicaddy_github-0.7.0 → cicaddy_github-0.8.0}/tests/__init__.py +0 -0
- {cicaddy_github-0.7.0 → cicaddy_github-0.8.0}/tests/conftest.py +0 -0
- {cicaddy_github-0.7.0 → cicaddy_github-0.8.0}/tests/unit/__init__.py +0 -0
- {cicaddy_github-0.7.0 → cicaddy_github-0.8.0}/tests/unit/test_agents.py +0 -0
- {cicaddy_github-0.7.0 → cicaddy_github-0.8.0}/tests/unit/test_analyzer.py +0 -0
- {cicaddy_github-0.7.0 → cicaddy_github-0.8.0}/tests/unit/test_detector.py +0 -0
- {cicaddy_github-0.7.0 → cicaddy_github-0.8.0}/tests/unit/test_go_dep_review.py +0 -0
- {cicaddy_github-0.7.0 → cicaddy_github-0.8.0}/tests/unit/test_leak_detector.py +0 -0
- {cicaddy_github-0.7.0 → cicaddy_github-0.8.0}/tests/unit/test_plugin.py +0 -0
- {cicaddy_github-0.7.0 → cicaddy_github-0.8.0}/tests/unit/test_review_delegation_hooks.py +0 -0
- {cicaddy_github-0.7.0 → cicaddy_github-0.8.0}/tests/unit/test_tools.py +0 -0
|
@@ -127,10 +127,12 @@ can reference them as bash variables (`INPUT_AI_PROVIDER`, `INPUT_AI_API_KEY`, e
|
|
|
127
127
|
| `task_prompt` | No | Inline task prompt |
|
|
128
128
|
| `post_pr_comment` | No | Post results as PR comment (default: `false`) |
|
|
129
129
|
| `submit_review` | No | Submit formal PR review with APPROVE/REQUEST_CHANGES (default: `false`) |
|
|
130
|
+
| `inline_review_comments` | No | Post AI findings as inline comments on PR diff lines (default: `false`) |
|
|
130
131
|
| `run_govulncheck` | No | Run govulncheck for vulnerability reachability analysis (default: `false`) |
|
|
131
132
|
| `dep_review_severity_threshold` | No | Minimum semver bump to analyze: `minor` or `major` (default: `minor`) |
|
|
132
133
|
| `delegation_mode` | No | `none` (default) or `auto` for sub-agent delegation |
|
|
133
134
|
| `max_sub_agents` | No | Max concurrent sub-agents, 1-10 (default: `3`) |
|
|
135
|
+
| `delegation_verify_findings` | No | Verify sub-agent findings against codebase (default: `false`) |
|
|
134
136
|
| `github_token` | No | GitHub token (default: `${{ github.token }}`) |
|
|
135
137
|
| `mcp_servers_config` | No | JSON array of MCP server configs |
|
|
136
138
|
| `slack_webhook_url` | No | Slack webhook URL |
|
|
@@ -196,6 +198,8 @@ github = "cicaddy_github.plugin:validate"
|
|
|
196
198
|
- `github_token`, `github_repository`, `github_ref`, `github_event_name`
|
|
197
199
|
- `github_sha`, `github_run_id`, `github_pr_number`
|
|
198
200
|
- `post_pr_comment` (bool)
|
|
201
|
+
- `submit_review` (bool)
|
|
202
|
+
- `inline_review_comments` (bool)
|
|
199
203
|
|
|
200
204
|
All loaded from environment variables via `load_settings()`.
|
|
201
205
|
|
|
@@ -233,10 +237,10 @@ the `safe-to-review` label. The label is auto-removed on new pushes to prevent
|
|
|
233
237
|
TOCTOU bypasses.
|
|
234
238
|
|
|
235
239
|
```yaml
|
|
236
|
-
- uses: redhat-community-ai-tools/cicaddy-action@v0.
|
|
240
|
+
- uses: redhat-community-ai-tools/cicaddy-action@v0.8.0
|
|
237
241
|
with:
|
|
238
242
|
ai_provider: gemini
|
|
239
|
-
ai_model: gemini-3-flash
|
|
243
|
+
ai_model: gemini-3.5-flash
|
|
240
244
|
ai_api_key: ${{ secrets.AI_API_KEY }}
|
|
241
245
|
task_file: tasks/pr_review.yml
|
|
242
246
|
post_pr_comment: 'true'
|
|
@@ -252,7 +256,7 @@ file and use `uv run cicaddy run --env-file <file>`.
|
|
|
252
256
|
```bash
|
|
253
257
|
# AI Provider
|
|
254
258
|
AI_PROVIDER=gemini
|
|
255
|
-
AI_MODEL=gemini-3-flash
|
|
259
|
+
AI_MODEL=gemini-3.5-flash
|
|
256
260
|
GEMINI_API_KEY=<key>
|
|
257
261
|
|
|
258
262
|
# GitHub Configuration
|
|
@@ -329,11 +333,13 @@ cicaddy-action v0.5.0+ supports AI-powered sub-agent delegation via cicaddy>=0.8
|
|
|
329
333
|
**Action Inputs:**
|
|
330
334
|
- `delegation_mode`: `none` (default) or `auto`
|
|
331
335
|
- `max_sub_agents`: 1-10 (default: `3`)
|
|
336
|
+
- `delegation_verify_findings`: `false` (default) — verify findings against codebase
|
|
332
337
|
|
|
333
338
|
**Environment Variables:**
|
|
334
339
|
- `DELEGATION_MODE`: `none` or `auto`
|
|
335
340
|
- `MAX_SUB_AGENTS`: 1-10 (default: `3`)
|
|
336
|
-
- `SUB_AGENT_MAX_ITERS`: 1-15 (default: `
|
|
341
|
+
- `SUB_AGENT_MAX_ITERS`: 1-15 (default: `5`)
|
|
342
|
+
- `DELEGATION_VERIFY_FINDINGS`: verify findings against codebase (`true`/`false`)
|
|
337
343
|
- `DELEGATION_AGENTS_DIR`: `.agents/delegation` (custom agent YAML directory)
|
|
338
344
|
- `DELEGATION_AGENTS`: JSON array for inline custom agents
|
|
339
345
|
- `TRIAGE_PROMPT`: Custom triage instructions
|
|
@@ -406,7 +412,7 @@ Or inline via `DELEGATION_AGENTS` JSON env var.
|
|
|
406
412
|
- uses: redhat-community-ai-tools/cicaddy-action@main
|
|
407
413
|
with:
|
|
408
414
|
ai_provider: gemini
|
|
409
|
-
ai_model: gemini-3-flash
|
|
415
|
+
ai_model: gemini-3.5-flash
|
|
410
416
|
ai_api_key: ${{ secrets.AI_API_KEY }}
|
|
411
417
|
task_file: tasks/pr_review.yml
|
|
412
418
|
post_pr_comment: 'true'
|
|
@@ -419,7 +425,7 @@ Or inline via `DELEGATION_AGENTS` JSON env var.
|
|
|
419
425
|
```bash
|
|
420
426
|
# .env.my-review
|
|
421
427
|
AI_PROVIDER=gemini
|
|
422
|
-
AI_MODEL=gemini-3-flash
|
|
428
|
+
AI_MODEL=gemini-3.5-flash
|
|
423
429
|
GEMINI_API_KEY=<key>
|
|
424
430
|
GITHUB_TOKEN=<token>
|
|
425
431
|
GITHUB_REPOSITORY=owner/repo
|
|
@@ -49,15 +49,20 @@ jobs:
|
|
|
49
49
|
fi
|
|
50
50
|
|
|
51
51
|
- name: AI Code Review
|
|
52
|
-
uses: redhat-community-ai-tools/cicaddy-action@v0.
|
|
52
|
+
uses: redhat-community-ai-tools/cicaddy-action@v0.8.0
|
|
53
53
|
id: review
|
|
54
54
|
with:
|
|
55
55
|
ai_provider: gemini
|
|
56
|
-
ai_model: gemini-3-flash
|
|
56
|
+
ai_model: gemini-3.5-flash
|
|
57
57
|
ai_api_key: ${{ secrets.AI_API_KEY }}
|
|
58
58
|
task_file: tasks/pr_review.yml
|
|
59
59
|
post_pr_comment: 'true'
|
|
60
|
+
# submit_review and inline_review_comments intentionally omitted —
|
|
61
|
+
# this workflow uses pull_request_target for fork PR support, and
|
|
62
|
+
# formal reviews should not be combined with pull_request_target.
|
|
63
|
+
# See docs/providers.md#submit_review-and-fork-pull-requests
|
|
60
64
|
delegation_mode: auto
|
|
65
|
+
delegation_verify_findings: 'true'
|
|
61
66
|
mcp_servers_config: ${{ steps.mcp.outputs.config }}
|
|
62
67
|
env:
|
|
63
68
|
ANALYSIS_FOCUS: "general"
|
|
@@ -102,7 +102,7 @@ The cicaddy-github plugin provides:
|
|
|
102
102
|
| `DELEGATION_AGENTS` | (empty) | JSON config for inline custom sub-agent definitions |
|
|
103
103
|
| `TRIAGE_PROMPT` | (empty) | Custom triage instructions |
|
|
104
104
|
|
|
105
|
-
Action inputs: `delegation_mode`, `max_sub_agents`
|
|
105
|
+
Action inputs: `delegation_mode`, `max_sub_agents`, `delegation_verify_findings`
|
|
106
106
|
CLI flags: `--delegation-mode auto --max-sub-agents 2`
|
|
107
107
|
|
|
108
108
|
See cicaddy's [sub-agent delegation docs](https://github.com/waynesun09/cicaddy/blob/main/docs/sub-agent-delegation.md) for built-in agents, custom YAML format, and tool filtering.
|
|
@@ -124,12 +124,16 @@ All inputs use **underscores** (not hyphens) for Docker container compatibility:
|
|
|
124
124
|
| `task_prompt` | No | Inline task prompt |
|
|
125
125
|
| `post_pr_comment` | No | Post results as PR comment (default: `false`) |
|
|
126
126
|
| `submit_review` | No | Submit formal PR review with APPROVE/REQUEST_CHANGES (default: `false`) |
|
|
127
|
+
| `inline_review_comments` | No | Post AI findings as inline comments on PR diff lines (default: `false`) |
|
|
127
128
|
| `github_token` | No | GitHub token (default: `${{ github.token }}`) |
|
|
128
129
|
| `mcp_servers_config` | No | JSON array of MCP server configs |
|
|
129
130
|
| `slack_webhook_url` | No | Slack webhook URL |
|
|
130
131
|
| `report_template` | No | Custom HTML report template path |
|
|
132
|
+
| `run_govulncheck` | No | Run govulncheck for vulnerability reachability analysis (default: `false`) |
|
|
133
|
+
| `dep_review_severity_threshold` | No | Minimum semver bump to analyze: `minor` or `major` (default: `minor`) |
|
|
131
134
|
| `delegation_mode` | No | `none` (default) or `auto` for sub-agent delegation |
|
|
132
135
|
| `max_sub_agents` | No | Max concurrent sub-agents, 1-10 (default: `3`) |
|
|
136
|
+
| `delegation_verify_findings` | No | Verify sub-agent findings against codebase (default: `false`) |
|
|
133
137
|
|
|
134
138
|
*Not required if provider-specific key is set via `env:`.
|
|
135
139
|
|
|
@@ -179,7 +183,7 @@ Create an env file and use `uv run cicaddy run --env-file <file>`:
|
|
|
179
183
|
```bash
|
|
180
184
|
# AI Provider
|
|
181
185
|
AI_PROVIDER=gemini
|
|
182
|
-
AI_MODEL=gemini-3-flash
|
|
186
|
+
AI_MODEL=gemini-3.5-flash
|
|
183
187
|
GEMINI_API_KEY=<key>
|
|
184
188
|
|
|
185
189
|
# GitHub Configuration
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: cicaddy-github
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.8.0
|
|
4
4
|
Summary: GitHub Actions plugin for cicaddy AI agent framework
|
|
5
5
|
Project-URL: Homepage, https://github.com/redhat-community-ai-tools/cicaddy-action
|
|
6
6
|
Project-URL: Repository, https://github.com/redhat-community-ai-tools/cicaddy-action.git
|
|
7
7
|
Project-URL: Issues, https://github.com/redhat-community-ai-tools/cicaddy-action/issues
|
|
8
8
|
Author: Wayne Sun
|
|
9
|
-
License: Apache-2.0
|
|
9
|
+
License-Expression: Apache-2.0
|
|
10
10
|
License-File: LICENSE
|
|
11
11
|
Requires-Python: >=3.11
|
|
12
12
|
Requires-Dist: cicaddy>=0.11.0
|
|
@@ -32,6 +32,29 @@ GitHub Action that wraps [cicaddy](https://github.com/waynesun09/cicaddy) for ru
|
|
|
32
32
|
- **Secret redaction** via detect-secrets for safe public outputs
|
|
33
33
|
- **DSPy YAML task definitions** for customizable analysis workflows
|
|
34
34
|
|
|
35
|
+
## Prerequisites
|
|
36
|
+
|
|
37
|
+
The examples below use **Vertex AI with Workload Identity Federation (WIF)**
|
|
38
|
+
for keyless authentication. WIF eliminates static secrets — GitHub mints a
|
|
39
|
+
short-lived OIDC token per workflow run and GCP exchanges it for temporary
|
|
40
|
+
credentials scoped to that job.
|
|
41
|
+
|
|
42
|
+
**One-time GCP setup required:**
|
|
43
|
+
|
|
44
|
+
1. Create a Workload Identity Pool and OIDC provider
|
|
45
|
+
2. Create a service account with `roles/aiplatform.user`
|
|
46
|
+
3. Bind the pool to the service account **scoped to your specific repository**
|
|
47
|
+
(the `--member` flag must use a `principalSet` with `attribute.repository/OWNER/REPO`
|
|
48
|
+
to enforce repository-level isolation)
|
|
49
|
+
|
|
50
|
+
Store the resulting values as GitHub
|
|
51
|
+
[repository variables](https://docs.github.com/en/actions/writing-workflows/choosing-what-your-workflow-does/store-information-in-variables)
|
|
52
|
+
(`vars.GCP_WIF_PROVIDER`, `vars.GCP_SERVICE_ACCOUNT`, `vars.GCP_PROJECT_ID`).
|
|
53
|
+
|
|
54
|
+
See [docs/providers.md](docs/providers.md) for the full `gcloud` setup
|
|
55
|
+
commands, authentication method comparison (WIF vs SA key vs API key), and
|
|
56
|
+
alternative provider configurations (OpenAI, Claude, standalone Gemini API key).
|
|
57
|
+
|
|
35
58
|
## Quick Start
|
|
36
59
|
|
|
37
60
|
### AI PR Review
|
|
@@ -48,28 +71,44 @@ on:
|
|
|
48
71
|
pull_request:
|
|
49
72
|
types: [opened, synchronize]
|
|
50
73
|
|
|
51
|
-
permissions:
|
|
52
|
-
pull-requests: write
|
|
53
|
-
|
|
54
74
|
jobs:
|
|
55
75
|
review:
|
|
56
76
|
runs-on: ubuntu-latest
|
|
77
|
+
permissions:
|
|
78
|
+
contents: read
|
|
79
|
+
id-token: write # Required for Workload Identity Federation
|
|
80
|
+
pull-requests: write
|
|
57
81
|
steps:
|
|
58
82
|
- uses: actions/checkout@v6
|
|
59
83
|
with:
|
|
60
84
|
fetch-depth: 0
|
|
61
85
|
|
|
86
|
+
- uses: google-github-actions/auth@v3
|
|
87
|
+
with:
|
|
88
|
+
workload_identity_provider: ${{ vars.GCP_WIF_PROVIDER }}
|
|
89
|
+
service_account: ${{ vars.GCP_SERVICE_ACCOUNT }}
|
|
90
|
+
|
|
62
91
|
- uses: redhat-community-ai-tools/cicaddy-action@main
|
|
63
92
|
with:
|
|
64
|
-
ai_provider: gemini
|
|
65
|
-
ai_model: gemini-3-flash
|
|
66
|
-
|
|
93
|
+
ai_provider: gemini-vertex
|
|
94
|
+
ai_model: gemini-3.5-flash
|
|
95
|
+
google_cloud_project: ${{ vars.GCP_PROJECT_ID }}
|
|
67
96
|
task_file: tasks/pr_review.yml
|
|
68
97
|
post_pr_comment: 'true'
|
|
69
|
-
|
|
70
|
-
|
|
98
|
+
submit_review: 'true'
|
|
99
|
+
inline_review_comments: 'true'
|
|
100
|
+
delegation_mode: auto
|
|
101
|
+
delegation_verify_findings: 'true'
|
|
71
102
|
```
|
|
72
103
|
|
|
104
|
+
> **Fork PRs**: The `pull_request` event cannot mint OIDC tokens for PRs
|
|
105
|
+
> from forks, so WIF authentication will fail. To support fork PRs, use
|
|
106
|
+
> `pull_request_target` with a label gate (e.g. `safe-to-review`) to
|
|
107
|
+
> prevent unauthorized code execution. See
|
|
108
|
+
> `.github/workflows/pr-review.yml` for an example and
|
|
109
|
+
> [docs/providers.md](docs/providers.md#submit_review-and-fork-pull-requests)
|
|
110
|
+
> for security details.
|
|
111
|
+
|
|
73
112
|
> **Sub-Agent Delegation**: When `DELEGATION_MODE` is set to `auto`, the agent uses AI-powered triage to analyze the PR diff and spawns specialized sub-agents in parallel (e.g., code quality, security, performance). Each sub-agent runs with a focused scope and reduced token budget, and their results are aggregated into a single unified review. This produces deeper, more structured reviews compared to single-agent mode. Set `DELEGATION_MODE` to `none` to use a single agent instead. See [docs/delegation.md](docs/delegation.md) for details.
|
|
74
113
|
|
|
75
114
|
### Changelog Report on Release
|
|
@@ -84,16 +123,24 @@ on:
|
|
|
84
123
|
jobs:
|
|
85
124
|
changelog:
|
|
86
125
|
runs-on: ubuntu-latest
|
|
126
|
+
permissions:
|
|
127
|
+
contents: read
|
|
128
|
+
id-token: write # Required for Workload Identity Federation
|
|
87
129
|
steps:
|
|
88
130
|
- uses: actions/checkout@v6
|
|
89
131
|
with:
|
|
90
132
|
fetch-depth: 0
|
|
91
133
|
|
|
134
|
+
- uses: google-github-actions/auth@v3
|
|
135
|
+
with:
|
|
136
|
+
workload_identity_provider: ${{ vars.GCP_WIF_PROVIDER }}
|
|
137
|
+
service_account: ${{ vars.GCP_SERVICE_ACCOUNT }}
|
|
138
|
+
|
|
92
139
|
- uses: redhat-community-ai-tools/cicaddy-action@main
|
|
93
140
|
with:
|
|
94
|
-
ai_provider: gemini
|
|
95
|
-
ai_model: gemini-3-flash
|
|
96
|
-
|
|
141
|
+
ai_provider: gemini-vertex
|
|
142
|
+
ai_model: gemini-3.5-flash
|
|
143
|
+
google_cloud_project: ${{ vars.GCP_PROJECT_ID }}
|
|
97
144
|
task_file: tasks/changelog_report.yml
|
|
98
145
|
```
|
|
99
146
|
|
|
@@ -114,23 +161,29 @@ on:
|
|
|
114
161
|
- 'go.mod'
|
|
115
162
|
- 'go.sum'
|
|
116
163
|
|
|
117
|
-
permissions:
|
|
118
|
-
contents: read
|
|
119
|
-
pull-requests: write
|
|
120
|
-
|
|
121
164
|
jobs:
|
|
122
165
|
dep-review:
|
|
123
166
|
runs-on: ubuntu-latest
|
|
167
|
+
permissions:
|
|
168
|
+
contents: read
|
|
169
|
+
id-token: write # Required for Workload Identity Federation
|
|
170
|
+
pull-requests: write
|
|
124
171
|
steps:
|
|
125
172
|
- uses: actions/checkout@v6
|
|
126
173
|
- uses: actions/setup-go@v6
|
|
127
174
|
with:
|
|
128
175
|
go-version: '1.22'
|
|
176
|
+
|
|
177
|
+
- uses: google-github-actions/auth@v3
|
|
178
|
+
with:
|
|
179
|
+
workload_identity_provider: ${{ vars.GCP_WIF_PROVIDER }}
|
|
180
|
+
service_account: ${{ vars.GCP_SERVICE_ACCOUNT }}
|
|
181
|
+
|
|
129
182
|
- uses: redhat-community-ai-tools/cicaddy-action@main
|
|
130
183
|
with:
|
|
131
|
-
ai_provider: gemini
|
|
132
|
-
ai_model: gemini-3-flash
|
|
133
|
-
|
|
184
|
+
ai_provider: gemini-vertex
|
|
185
|
+
ai_model: gemini-3.5-flash
|
|
186
|
+
google_cloud_project: ${{ vars.GCP_PROJECT_ID }}
|
|
134
187
|
task_file: tasks/go_dep_impact_review.yml
|
|
135
188
|
post_pr_comment: 'true'
|
|
136
189
|
run_govulncheck: 'true'
|
|
@@ -143,7 +196,9 @@ agent instead of the default PR code review agent. The `run_govulncheck`
|
|
|
143
196
|
input enables vulnerability reachability analysis (requires Go and
|
|
144
197
|
govulncheck installed in the runner).
|
|
145
198
|
|
|
146
|
-
See [docs/providers.md](docs/providers.md) for
|
|
199
|
+
See [docs/providers.md](docs/providers.md) for the full WIF setup guide,
|
|
200
|
+
alternative providers (OpenAI, Claude, standalone Gemini API key), the
|
|
201
|
+
SA key fallback, and an authentication method comparison table.
|
|
147
202
|
|
|
148
203
|
## Inputs
|
|
149
204
|
|
|
@@ -162,12 +217,42 @@ See [docs/providers.md](docs/providers.md) for provider-specific configuration i
|
|
|
162
217
|
| `slack_webhook_url` | No | Slack webhook URL for notifications |
|
|
163
218
|
| `post_pr_comment` | No | Post results as PR comment (default: `false`) |
|
|
164
219
|
| `submit_review` | No | Submit formal PR review with APPROVE/REQUEST_CHANGES (default: `false`) |
|
|
220
|
+
| `inline_review_comments` | No | Post AI findings as inline comments on PR diff lines (default: `false`) |
|
|
165
221
|
| `run_govulncheck` | No | Run govulncheck for vulnerability reachability analysis (default: `false`) |
|
|
166
222
|
| `dep_review_severity_threshold` | No | Minimum semver bump to analyze: `minor` or `major` (default: `minor`) |
|
|
167
223
|
| `delegation_mode` | No | Enable AI-powered sub-agent delegation: `none` (default) or `auto` |
|
|
168
224
|
| `max_sub_agents` | No | Maximum concurrent sub-agents, 1-10 (default: `3`) |
|
|
225
|
+
| `delegation_verify_findings` | No | Verify sub-agent findings against codebase to reduce false positives (default: `false`) |
|
|
169
226
|
| `github_token` | No | GitHub token (default: `${{ github.token }}`) |
|
|
170
227
|
|
|
228
|
+
### Review Output Options
|
|
229
|
+
|
|
230
|
+
The action supports three independent review output options that control how results appear on a PR. All three default to `false` and can be combined:
|
|
231
|
+
|
|
232
|
+
| Option | What it does |
|
|
233
|
+
|--------|-------------|
|
|
234
|
+
| `post_pr_comment` | Posts (or updates) a bot comment on the PR with the full review summary. On subsequent runs the same comment is updated in place. |
|
|
235
|
+
| `submit_review` | Submits a formal GitHub review (APPROVE / REQUEST_CHANGES / COMMENT) based on the AI analysis. |
|
|
236
|
+
| `inline_review_comments` | Attaches AI findings as inline comments on the exact diff lines. Requires `submit_review: 'true'` since inline comments are part of the GitHub review. |
|
|
237
|
+
|
|
238
|
+
**Recommended combinations:**
|
|
239
|
+
|
|
240
|
+
```yaml
|
|
241
|
+
# Summary comment only (simplest)
|
|
242
|
+
post_pr_comment: 'true'
|
|
243
|
+
|
|
244
|
+
# Summary comment + inline diff comments (recommended for most teams)
|
|
245
|
+
post_pr_comment: 'true'
|
|
246
|
+
submit_review: 'true'
|
|
247
|
+
inline_review_comments: 'true'
|
|
248
|
+
|
|
249
|
+
# Formal review with inline comments, no standalone comment
|
|
250
|
+
submit_review: 'true'
|
|
251
|
+
inline_review_comments: 'true'
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
> **Note:** `inline_review_comments` works best with `submit_review: 'true'` and `delegation_mode: auto`. Delegation produces structured findings with file/line info that inline comments need. Without `submit_review`, inline comments are posted as a `COMMENT` review (no approval/rejection verdict).
|
|
255
|
+
|
|
171
256
|
## Outputs
|
|
172
257
|
|
|
173
258
|
| Output | Description |
|
|
@@ -199,10 +284,16 @@ uv pip install -e ".[test]"
|
|
|
199
284
|
**2. Create an env file** (e.g. `.env.my-review`):
|
|
200
285
|
|
|
201
286
|
```bash
|
|
202
|
-
# AI Provider
|
|
203
|
-
AI_PROVIDER=gemini
|
|
204
|
-
AI_MODEL=gemini-3-flash
|
|
205
|
-
|
|
287
|
+
# AI Provider (Gemini via Vertex AI — uses Google Cloud ADC, no API key needed)
|
|
288
|
+
AI_PROVIDER=gemini-vertex
|
|
289
|
+
AI_MODEL=gemini-3.5-flash
|
|
290
|
+
GOOGLE_CLOUD_PROJECT=your-gcp-project
|
|
291
|
+
# GOOGLE_CLOUD_LOCATION=global # optional, defaults to "global"
|
|
292
|
+
|
|
293
|
+
# AI Provider (standalone Gemini API key — alternative to Vertex AI)
|
|
294
|
+
# AI_PROVIDER=gemini
|
|
295
|
+
# AI_MODEL=gemini-3.5-flash
|
|
296
|
+
# GEMINI_API_KEY=<your-gemini-api-key>
|
|
206
297
|
|
|
207
298
|
# GitHub Configuration
|
|
208
299
|
GITHUB_TOKEN=<your-github-token>
|
|
@@ -212,6 +303,8 @@ GITHUB_PR_NUMBER=42
|
|
|
212
303
|
|
|
213
304
|
# Agent Settings
|
|
214
305
|
POST_PR_COMMENT=true
|
|
306
|
+
SUBMIT_REVIEW=true
|
|
307
|
+
INLINE_REVIEW_COMMENTS=true
|
|
215
308
|
ENABLE_LOCAL_TOOLS=true
|
|
216
309
|
LOCAL_TOOLS_WORKING_DIR=.
|
|
217
310
|
|
|
@@ -257,7 +350,7 @@ uv run cicaddy validate --env-file .env.my-review
|
|
|
257
350
|
| Variable | Required | Description |
|
|
258
351
|
|----------|----------|-------------|
|
|
259
352
|
| `AI_PROVIDER` | Yes | `gemini`, `openai`, `claude`, `anthropic-vertex`, or `gemini-vertex` |
|
|
260
|
-
| `AI_MODEL` | Yes | Model identifier (e.g. `gemini-3-flash
|
|
353
|
+
| `AI_MODEL` | Yes | Model identifier (e.g. `gemini-3.5-flash`) |
|
|
261
354
|
| `GEMINI_API_KEY` / `OPENAI_API_KEY` / `ANTHROPIC_API_KEY` | Yes* | API key matching the provider (*not needed for `anthropic-vertex` or `gemini-vertex`) |
|
|
262
355
|
| `ANTHROPIC_VERTEX_PROJECT_ID` | No | GCP project ID (required for `anthropic-vertex`, falls back to `GOOGLE_CLOUD_PROJECT`) |
|
|
263
356
|
| `GOOGLE_CLOUD_PROJECT` | No | GCP project ID for Vertex AI (required for `gemini-vertex`) |
|
|
@@ -267,9 +360,12 @@ uv run cicaddy validate --env-file .env.my-review
|
|
|
267
360
|
| `GITHUB_EVENT_NAME` | No | Set to `pull_request` for auto-detection (optional if `GITHUB_PR_NUMBER` is set) |
|
|
268
361
|
| `GITHUB_PR_NUMBER` | Yes | PR number to review |
|
|
269
362
|
| `POST_PR_COMMENT` | No | Post results as PR comment (`true`/`false`) |
|
|
363
|
+
| `SUBMIT_REVIEW` | No | Submit formal PR review with APPROVE/REQUEST_CHANGES (`true`/`false`) |
|
|
364
|
+
| `INLINE_REVIEW_COMMENTS` | No | Post AI findings as inline comments on PR diff lines (`true`/`false`) |
|
|
270
365
|
| `AGENT_TASKS` | No | Agent task type (e.g. `go_dep_review` for Go dependency analysis) |
|
|
271
366
|
| `DELEGATION_MODE` | No | `auto` for AI-powered sub-agent delegation, `none` for single-agent (default: `none`) |
|
|
272
367
|
| `MAX_SUB_AGENTS` | No | Max concurrent sub-agents for delegation, 1-10 (default: `3`) |
|
|
368
|
+
| `DELEGATION_VERIFY_FINDINGS` | No | Verify sub-agent findings against codebase to reduce false positives (`true`/`false`) |
|
|
273
369
|
| `SUB_AGENT_MAX_ITERS` | No | Max iterations per sub-agent, 1-15 (default: `5`) |
|
|
274
370
|
| `AI_TASK_FILE` | No | Path to DSPy YAML task file for custom workflows |
|
|
275
371
|
| `RUN_GOVULNCHECK` | No | Run govulncheck for reachability analysis (`true`/`false`) |
|
|
@@ -12,6 +12,29 @@ GitHub Action that wraps [cicaddy](https://github.com/waynesun09/cicaddy) for ru
|
|
|
12
12
|
- **Secret redaction** via detect-secrets for safe public outputs
|
|
13
13
|
- **DSPy YAML task definitions** for customizable analysis workflows
|
|
14
14
|
|
|
15
|
+
## Prerequisites
|
|
16
|
+
|
|
17
|
+
The examples below use **Vertex AI with Workload Identity Federation (WIF)**
|
|
18
|
+
for keyless authentication. WIF eliminates static secrets — GitHub mints a
|
|
19
|
+
short-lived OIDC token per workflow run and GCP exchanges it for temporary
|
|
20
|
+
credentials scoped to that job.
|
|
21
|
+
|
|
22
|
+
**One-time GCP setup required:**
|
|
23
|
+
|
|
24
|
+
1. Create a Workload Identity Pool and OIDC provider
|
|
25
|
+
2. Create a service account with `roles/aiplatform.user`
|
|
26
|
+
3. Bind the pool to the service account **scoped to your specific repository**
|
|
27
|
+
(the `--member` flag must use a `principalSet` with `attribute.repository/OWNER/REPO`
|
|
28
|
+
to enforce repository-level isolation)
|
|
29
|
+
|
|
30
|
+
Store the resulting values as GitHub
|
|
31
|
+
[repository variables](https://docs.github.com/en/actions/writing-workflows/choosing-what-your-workflow-does/store-information-in-variables)
|
|
32
|
+
(`vars.GCP_WIF_PROVIDER`, `vars.GCP_SERVICE_ACCOUNT`, `vars.GCP_PROJECT_ID`).
|
|
33
|
+
|
|
34
|
+
See [docs/providers.md](docs/providers.md) for the full `gcloud` setup
|
|
35
|
+
commands, authentication method comparison (WIF vs SA key vs API key), and
|
|
36
|
+
alternative provider configurations (OpenAI, Claude, standalone Gemini API key).
|
|
37
|
+
|
|
15
38
|
## Quick Start
|
|
16
39
|
|
|
17
40
|
### AI PR Review
|
|
@@ -28,28 +51,44 @@ on:
|
|
|
28
51
|
pull_request:
|
|
29
52
|
types: [opened, synchronize]
|
|
30
53
|
|
|
31
|
-
permissions:
|
|
32
|
-
pull-requests: write
|
|
33
|
-
|
|
34
54
|
jobs:
|
|
35
55
|
review:
|
|
36
56
|
runs-on: ubuntu-latest
|
|
57
|
+
permissions:
|
|
58
|
+
contents: read
|
|
59
|
+
id-token: write # Required for Workload Identity Federation
|
|
60
|
+
pull-requests: write
|
|
37
61
|
steps:
|
|
38
62
|
- uses: actions/checkout@v6
|
|
39
63
|
with:
|
|
40
64
|
fetch-depth: 0
|
|
41
65
|
|
|
66
|
+
- uses: google-github-actions/auth@v3
|
|
67
|
+
with:
|
|
68
|
+
workload_identity_provider: ${{ vars.GCP_WIF_PROVIDER }}
|
|
69
|
+
service_account: ${{ vars.GCP_SERVICE_ACCOUNT }}
|
|
70
|
+
|
|
42
71
|
- uses: redhat-community-ai-tools/cicaddy-action@main
|
|
43
72
|
with:
|
|
44
|
-
ai_provider: gemini
|
|
45
|
-
ai_model: gemini-3-flash
|
|
46
|
-
|
|
73
|
+
ai_provider: gemini-vertex
|
|
74
|
+
ai_model: gemini-3.5-flash
|
|
75
|
+
google_cloud_project: ${{ vars.GCP_PROJECT_ID }}
|
|
47
76
|
task_file: tasks/pr_review.yml
|
|
48
77
|
post_pr_comment: 'true'
|
|
49
|
-
|
|
50
|
-
|
|
78
|
+
submit_review: 'true'
|
|
79
|
+
inline_review_comments: 'true'
|
|
80
|
+
delegation_mode: auto
|
|
81
|
+
delegation_verify_findings: 'true'
|
|
51
82
|
```
|
|
52
83
|
|
|
84
|
+
> **Fork PRs**: The `pull_request` event cannot mint OIDC tokens for PRs
|
|
85
|
+
> from forks, so WIF authentication will fail. To support fork PRs, use
|
|
86
|
+
> `pull_request_target` with a label gate (e.g. `safe-to-review`) to
|
|
87
|
+
> prevent unauthorized code execution. See
|
|
88
|
+
> `.github/workflows/pr-review.yml` for an example and
|
|
89
|
+
> [docs/providers.md](docs/providers.md#submit_review-and-fork-pull-requests)
|
|
90
|
+
> for security details.
|
|
91
|
+
|
|
53
92
|
> **Sub-Agent Delegation**: When `DELEGATION_MODE` is set to `auto`, the agent uses AI-powered triage to analyze the PR diff and spawns specialized sub-agents in parallel (e.g., code quality, security, performance). Each sub-agent runs with a focused scope and reduced token budget, and their results are aggregated into a single unified review. This produces deeper, more structured reviews compared to single-agent mode. Set `DELEGATION_MODE` to `none` to use a single agent instead. See [docs/delegation.md](docs/delegation.md) for details.
|
|
54
93
|
|
|
55
94
|
### Changelog Report on Release
|
|
@@ -64,16 +103,24 @@ on:
|
|
|
64
103
|
jobs:
|
|
65
104
|
changelog:
|
|
66
105
|
runs-on: ubuntu-latest
|
|
106
|
+
permissions:
|
|
107
|
+
contents: read
|
|
108
|
+
id-token: write # Required for Workload Identity Federation
|
|
67
109
|
steps:
|
|
68
110
|
- uses: actions/checkout@v6
|
|
69
111
|
with:
|
|
70
112
|
fetch-depth: 0
|
|
71
113
|
|
|
114
|
+
- uses: google-github-actions/auth@v3
|
|
115
|
+
with:
|
|
116
|
+
workload_identity_provider: ${{ vars.GCP_WIF_PROVIDER }}
|
|
117
|
+
service_account: ${{ vars.GCP_SERVICE_ACCOUNT }}
|
|
118
|
+
|
|
72
119
|
- uses: redhat-community-ai-tools/cicaddy-action@main
|
|
73
120
|
with:
|
|
74
|
-
ai_provider: gemini
|
|
75
|
-
ai_model: gemini-3-flash
|
|
76
|
-
|
|
121
|
+
ai_provider: gemini-vertex
|
|
122
|
+
ai_model: gemini-3.5-flash
|
|
123
|
+
google_cloud_project: ${{ vars.GCP_PROJECT_ID }}
|
|
77
124
|
task_file: tasks/changelog_report.yml
|
|
78
125
|
```
|
|
79
126
|
|
|
@@ -94,23 +141,29 @@ on:
|
|
|
94
141
|
- 'go.mod'
|
|
95
142
|
- 'go.sum'
|
|
96
143
|
|
|
97
|
-
permissions:
|
|
98
|
-
contents: read
|
|
99
|
-
pull-requests: write
|
|
100
|
-
|
|
101
144
|
jobs:
|
|
102
145
|
dep-review:
|
|
103
146
|
runs-on: ubuntu-latest
|
|
147
|
+
permissions:
|
|
148
|
+
contents: read
|
|
149
|
+
id-token: write # Required for Workload Identity Federation
|
|
150
|
+
pull-requests: write
|
|
104
151
|
steps:
|
|
105
152
|
- uses: actions/checkout@v6
|
|
106
153
|
- uses: actions/setup-go@v6
|
|
107
154
|
with:
|
|
108
155
|
go-version: '1.22'
|
|
156
|
+
|
|
157
|
+
- uses: google-github-actions/auth@v3
|
|
158
|
+
with:
|
|
159
|
+
workload_identity_provider: ${{ vars.GCP_WIF_PROVIDER }}
|
|
160
|
+
service_account: ${{ vars.GCP_SERVICE_ACCOUNT }}
|
|
161
|
+
|
|
109
162
|
- uses: redhat-community-ai-tools/cicaddy-action@main
|
|
110
163
|
with:
|
|
111
|
-
ai_provider: gemini
|
|
112
|
-
ai_model: gemini-3-flash
|
|
113
|
-
|
|
164
|
+
ai_provider: gemini-vertex
|
|
165
|
+
ai_model: gemini-3.5-flash
|
|
166
|
+
google_cloud_project: ${{ vars.GCP_PROJECT_ID }}
|
|
114
167
|
task_file: tasks/go_dep_impact_review.yml
|
|
115
168
|
post_pr_comment: 'true'
|
|
116
169
|
run_govulncheck: 'true'
|
|
@@ -123,7 +176,9 @@ agent instead of the default PR code review agent. The `run_govulncheck`
|
|
|
123
176
|
input enables vulnerability reachability analysis (requires Go and
|
|
124
177
|
govulncheck installed in the runner).
|
|
125
178
|
|
|
126
|
-
See [docs/providers.md](docs/providers.md) for
|
|
179
|
+
See [docs/providers.md](docs/providers.md) for the full WIF setup guide,
|
|
180
|
+
alternative providers (OpenAI, Claude, standalone Gemini API key), the
|
|
181
|
+
SA key fallback, and an authentication method comparison table.
|
|
127
182
|
|
|
128
183
|
## Inputs
|
|
129
184
|
|
|
@@ -142,12 +197,42 @@ See [docs/providers.md](docs/providers.md) for provider-specific configuration i
|
|
|
142
197
|
| `slack_webhook_url` | No | Slack webhook URL for notifications |
|
|
143
198
|
| `post_pr_comment` | No | Post results as PR comment (default: `false`) |
|
|
144
199
|
| `submit_review` | No | Submit formal PR review with APPROVE/REQUEST_CHANGES (default: `false`) |
|
|
200
|
+
| `inline_review_comments` | No | Post AI findings as inline comments on PR diff lines (default: `false`) |
|
|
145
201
|
| `run_govulncheck` | No | Run govulncheck for vulnerability reachability analysis (default: `false`) |
|
|
146
202
|
| `dep_review_severity_threshold` | No | Minimum semver bump to analyze: `minor` or `major` (default: `minor`) |
|
|
147
203
|
| `delegation_mode` | No | Enable AI-powered sub-agent delegation: `none` (default) or `auto` |
|
|
148
204
|
| `max_sub_agents` | No | Maximum concurrent sub-agents, 1-10 (default: `3`) |
|
|
205
|
+
| `delegation_verify_findings` | No | Verify sub-agent findings against codebase to reduce false positives (default: `false`) |
|
|
149
206
|
| `github_token` | No | GitHub token (default: `${{ github.token }}`) |
|
|
150
207
|
|
|
208
|
+
### Review Output Options
|
|
209
|
+
|
|
210
|
+
The action supports three independent review output options that control how results appear on a PR. All three default to `false` and can be combined:
|
|
211
|
+
|
|
212
|
+
| Option | What it does |
|
|
213
|
+
|--------|-------------|
|
|
214
|
+
| `post_pr_comment` | Posts (or updates) a bot comment on the PR with the full review summary. On subsequent runs the same comment is updated in place. |
|
|
215
|
+
| `submit_review` | Submits a formal GitHub review (APPROVE / REQUEST_CHANGES / COMMENT) based on the AI analysis. |
|
|
216
|
+
| `inline_review_comments` | Attaches AI findings as inline comments on the exact diff lines. Requires `submit_review: 'true'` since inline comments are part of the GitHub review. |
|
|
217
|
+
|
|
218
|
+
**Recommended combinations:**
|
|
219
|
+
|
|
220
|
+
```yaml
|
|
221
|
+
# Summary comment only (simplest)
|
|
222
|
+
post_pr_comment: 'true'
|
|
223
|
+
|
|
224
|
+
# Summary comment + inline diff comments (recommended for most teams)
|
|
225
|
+
post_pr_comment: 'true'
|
|
226
|
+
submit_review: 'true'
|
|
227
|
+
inline_review_comments: 'true'
|
|
228
|
+
|
|
229
|
+
# Formal review with inline comments, no standalone comment
|
|
230
|
+
submit_review: 'true'
|
|
231
|
+
inline_review_comments: 'true'
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
> **Note:** `inline_review_comments` works best with `submit_review: 'true'` and `delegation_mode: auto`. Delegation produces structured findings with file/line info that inline comments need. Without `submit_review`, inline comments are posted as a `COMMENT` review (no approval/rejection verdict).
|
|
235
|
+
|
|
151
236
|
## Outputs
|
|
152
237
|
|
|
153
238
|
| Output | Description |
|
|
@@ -179,10 +264,16 @@ uv pip install -e ".[test]"
|
|
|
179
264
|
**2. Create an env file** (e.g. `.env.my-review`):
|
|
180
265
|
|
|
181
266
|
```bash
|
|
182
|
-
# AI Provider
|
|
183
|
-
AI_PROVIDER=gemini
|
|
184
|
-
AI_MODEL=gemini-3-flash
|
|
185
|
-
|
|
267
|
+
# AI Provider (Gemini via Vertex AI — uses Google Cloud ADC, no API key needed)
|
|
268
|
+
AI_PROVIDER=gemini-vertex
|
|
269
|
+
AI_MODEL=gemini-3.5-flash
|
|
270
|
+
GOOGLE_CLOUD_PROJECT=your-gcp-project
|
|
271
|
+
# GOOGLE_CLOUD_LOCATION=global # optional, defaults to "global"
|
|
272
|
+
|
|
273
|
+
# AI Provider (standalone Gemini API key — alternative to Vertex AI)
|
|
274
|
+
# AI_PROVIDER=gemini
|
|
275
|
+
# AI_MODEL=gemini-3.5-flash
|
|
276
|
+
# GEMINI_API_KEY=<your-gemini-api-key>
|
|
186
277
|
|
|
187
278
|
# GitHub Configuration
|
|
188
279
|
GITHUB_TOKEN=<your-github-token>
|
|
@@ -192,6 +283,8 @@ GITHUB_PR_NUMBER=42
|
|
|
192
283
|
|
|
193
284
|
# Agent Settings
|
|
194
285
|
POST_PR_COMMENT=true
|
|
286
|
+
SUBMIT_REVIEW=true
|
|
287
|
+
INLINE_REVIEW_COMMENTS=true
|
|
195
288
|
ENABLE_LOCAL_TOOLS=true
|
|
196
289
|
LOCAL_TOOLS_WORKING_DIR=.
|
|
197
290
|
|
|
@@ -237,7 +330,7 @@ uv run cicaddy validate --env-file .env.my-review
|
|
|
237
330
|
| Variable | Required | Description |
|
|
238
331
|
|----------|----------|-------------|
|
|
239
332
|
| `AI_PROVIDER` | Yes | `gemini`, `openai`, `claude`, `anthropic-vertex`, or `gemini-vertex` |
|
|
240
|
-
| `AI_MODEL` | Yes | Model identifier (e.g. `gemini-3-flash
|
|
333
|
+
| `AI_MODEL` | Yes | Model identifier (e.g. `gemini-3.5-flash`) |
|
|
241
334
|
| `GEMINI_API_KEY` / `OPENAI_API_KEY` / `ANTHROPIC_API_KEY` | Yes* | API key matching the provider (*not needed for `anthropic-vertex` or `gemini-vertex`) |
|
|
242
335
|
| `ANTHROPIC_VERTEX_PROJECT_ID` | No | GCP project ID (required for `anthropic-vertex`, falls back to `GOOGLE_CLOUD_PROJECT`) |
|
|
243
336
|
| `GOOGLE_CLOUD_PROJECT` | No | GCP project ID for Vertex AI (required for `gemini-vertex`) |
|
|
@@ -247,9 +340,12 @@ uv run cicaddy validate --env-file .env.my-review
|
|
|
247
340
|
| `GITHUB_EVENT_NAME` | No | Set to `pull_request` for auto-detection (optional if `GITHUB_PR_NUMBER` is set) |
|
|
248
341
|
| `GITHUB_PR_NUMBER` | Yes | PR number to review |
|
|
249
342
|
| `POST_PR_COMMENT` | No | Post results as PR comment (`true`/`false`) |
|
|
343
|
+
| `SUBMIT_REVIEW` | No | Submit formal PR review with APPROVE/REQUEST_CHANGES (`true`/`false`) |
|
|
344
|
+
| `INLINE_REVIEW_COMMENTS` | No | Post AI findings as inline comments on PR diff lines (`true`/`false`) |
|
|
250
345
|
| `AGENT_TASKS` | No | Agent task type (e.g. `go_dep_review` for Go dependency analysis) |
|
|
251
346
|
| `DELEGATION_MODE` | No | `auto` for AI-powered sub-agent delegation, `none` for single-agent (default: `none`) |
|
|
252
347
|
| `MAX_SUB_AGENTS` | No | Max concurrent sub-agents for delegation, 1-10 (default: `3`) |
|
|
348
|
+
| `DELEGATION_VERIFY_FINDINGS` | No | Verify sub-agent findings against codebase to reduce false positives (`true`/`false`) |
|
|
253
349
|
| `SUB_AGENT_MAX_ITERS` | No | Max iterations per sub-agent, 1-15 (default: `5`) |
|
|
254
350
|
| `AI_TASK_FILE` | No | Path to DSPy YAML task file for custom workflows |
|
|
255
351
|
| `RUN_GOVULNCHECK` | No | Run govulncheck for reachability analysis (`true`/`false`) |
|