cicaddy-github 0.6.0__tar.gz → 0.7.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.
Files changed (51) hide show
  1. {cicaddy_github-0.6.0 → cicaddy_github-0.7.0}/.agents/skills/cicaddy-action/SKILL.md +11 -3
  2. {cicaddy_github-0.6.0 → cicaddy_github-0.7.0}/AGENTS.md +9 -6
  3. {cicaddy_github-0.6.0 → cicaddy_github-0.7.0}/PKG-INFO +13 -14
  4. {cicaddy_github-0.6.0 → cicaddy_github-0.7.0}/README.md +11 -12
  5. {cicaddy_github-0.6.0 → cicaddy_github-0.7.0}/action.yml +12 -7
  6. {cicaddy_github-0.6.0 → cicaddy_github-0.7.0}/docs/delegation.md +2 -2
  7. cicaddy_github-0.7.0/docs/providers.md +178 -0
  8. {cicaddy_github-0.6.0 → cicaddy_github-0.7.0}/entrypoint.sh +36 -8
  9. {cicaddy_github-0.6.0 → cicaddy_github-0.7.0}/pyproject.toml +2 -2
  10. {cicaddy_github-0.6.0 → cicaddy_github-0.7.0}/src/cicaddy_github/__init__.py +1 -1
  11. {cicaddy_github-0.6.0 → cicaddy_github-0.7.0}/src/cicaddy_github/config/settings.py +11 -1
  12. {cicaddy_github-0.6.0 → cicaddy_github-0.7.0}/tests/unit/test_settings.py +77 -0
  13. cicaddy_github-0.6.0/docs/providers.md +0 -93
  14. {cicaddy_github-0.6.0 → cicaddy_github-0.7.0}/.github/dependabot.yml +0 -0
  15. {cicaddy_github-0.6.0 → cicaddy_github-0.7.0}/.github/workflows/changelog.yml +0 -0
  16. {cicaddy_github-0.6.0 → cicaddy_github-0.7.0}/.github/workflows/ci.yml +0 -0
  17. {cicaddy_github-0.6.0 → cicaddy_github-0.7.0}/.github/workflows/pr-review.yml +0 -0
  18. {cicaddy_github-0.6.0 → cicaddy_github-0.7.0}/.github/workflows/release.yml +0 -0
  19. {cicaddy_github-0.6.0 → cicaddy_github-0.7.0}/.gitignore +0 -0
  20. {cicaddy_github-0.6.0 → cicaddy_github-0.7.0}/.pre-commit-config.yaml +0 -0
  21. {cicaddy_github-0.6.0 → cicaddy_github-0.7.0}/CLAUDE.md +0 -0
  22. {cicaddy_github-0.6.0 → cicaddy_github-0.7.0}/CODE_OF_CONDUCT.md +0 -0
  23. {cicaddy_github-0.6.0 → cicaddy_github-0.7.0}/CONTRIBUTING.md +0 -0
  24. {cicaddy_github-0.6.0 → cicaddy_github-0.7.0}/Dockerfile +0 -0
  25. {cicaddy_github-0.6.0 → cicaddy_github-0.7.0}/LICENSE +0 -0
  26. {cicaddy_github-0.6.0 → cicaddy_github-0.7.0}/src/cicaddy_github/config/__init__.py +0 -0
  27. {cicaddy_github-0.6.0 → cicaddy_github-0.7.0}/src/cicaddy_github/github_integration/__init__.py +0 -0
  28. {cicaddy_github-0.6.0 → cicaddy_github-0.7.0}/src/cicaddy_github/github_integration/agents.py +0 -0
  29. {cicaddy_github-0.6.0 → cicaddy_github-0.7.0}/src/cicaddy_github/github_integration/analyzer.py +0 -0
  30. {cicaddy_github-0.6.0 → cicaddy_github-0.7.0}/src/cicaddy_github/github_integration/detector.py +0 -0
  31. {cicaddy_github-0.6.0 → cicaddy_github-0.7.0}/src/cicaddy_github/github_integration/go_dep_review_tools.py +0 -0
  32. {cicaddy_github-0.6.0 → cicaddy_github-0.7.0}/src/cicaddy_github/github_integration/tools.py +0 -0
  33. {cicaddy_github-0.6.0 → cicaddy_github-0.7.0}/src/cicaddy_github/plugin.py +0 -0
  34. {cicaddy_github-0.6.0 → cicaddy_github-0.7.0}/src/cicaddy_github/security/__init__.py +0 -0
  35. {cicaddy_github-0.6.0 → cicaddy_github-0.7.0}/src/cicaddy_github/security/leak_detector.py +0 -0
  36. {cicaddy_github-0.6.0 → cicaddy_github-0.7.0}/src/cicaddy_github/validation.py +0 -0
  37. {cicaddy_github-0.6.0 → cicaddy_github-0.7.0}/tasks/changelog_report.yml +0 -0
  38. {cicaddy_github-0.6.0 → cicaddy_github-0.7.0}/tasks/go_dep_impact_review.yml +0 -0
  39. {cicaddy_github-0.6.0 → cicaddy_github-0.7.0}/tasks/pr_review.yml +0 -0
  40. {cicaddy_github-0.6.0 → cicaddy_github-0.7.0}/templates/report_template.html +0 -0
  41. {cicaddy_github-0.6.0 → cicaddy_github-0.7.0}/tests/__init__.py +0 -0
  42. {cicaddy_github-0.6.0 → cicaddy_github-0.7.0}/tests/conftest.py +0 -0
  43. {cicaddy_github-0.6.0 → cicaddy_github-0.7.0}/tests/unit/__init__.py +0 -0
  44. {cicaddy_github-0.6.0 → cicaddy_github-0.7.0}/tests/unit/test_agents.py +0 -0
  45. {cicaddy_github-0.6.0 → cicaddy_github-0.7.0}/tests/unit/test_analyzer.py +0 -0
  46. {cicaddy_github-0.6.0 → cicaddy_github-0.7.0}/tests/unit/test_detector.py +0 -0
  47. {cicaddy_github-0.6.0 → cicaddy_github-0.7.0}/tests/unit/test_go_dep_review.py +0 -0
  48. {cicaddy_github-0.6.0 → cicaddy_github-0.7.0}/tests/unit/test_leak_detector.py +0 -0
  49. {cicaddy_github-0.6.0 → cicaddy_github-0.7.0}/tests/unit/test_plugin.py +0 -0
  50. {cicaddy_github-0.6.0 → cicaddy_github-0.7.0}/tests/unit/test_review_delegation_hooks.py +0 -0
  51. {cicaddy_github-0.6.0 → cicaddy_github-0.7.0}/tests/unit/test_tools.py +0 -0
@@ -117,12 +117,20 @@ can reference them as bash variables (`INPUT_AI_PROVIDER`, `INPUT_AI_API_KEY`, e
117
117
 
118
118
  | Input | Required | Description |
119
119
  |-------|----------|-------------|
120
- | `ai_provider` | Yes | `gemini`, `openai`, `claude` |
120
+ | `ai_provider` | Yes | `gemini`, `openai`, `claude`, `anthropic-vertex`, `gemini-vertex` |
121
121
  | `ai_model` | Yes | Model identifier |
122
- | `ai_api_key` | Yes* | AI provider API key (mapped to provider-specific env var) |
122
+ | `ai_api_key` | No* | AI provider API key (not needed for `anthropic-vertex` or `gemini-vertex`) |
123
+ | `vertex_project_id` | No | GCP project ID for Vertex AI Claude (falls back to `google_cloud_project`) |
124
+ | `google_cloud_project` | No | GCP project ID for Vertex AI (required for `gemini-vertex`) |
125
+ | `google_cloud_location` | No | Vertex AI location (default: `global`) |
123
126
  | `task_file` | No | Path to DSPy YAML task file |
124
127
  | `task_prompt` | No | Inline task prompt |
125
128
  | `post_pr_comment` | No | Post results as PR comment (default: `false`) |
129
+ | `submit_review` | No | Submit formal PR review with APPROVE/REQUEST_CHANGES (default: `false`) |
130
+ | `run_govulncheck` | No | Run govulncheck for vulnerability reachability analysis (default: `false`) |
131
+ | `dep_review_severity_threshold` | No | Minimum semver bump to analyze: `minor` or `major` (default: `minor`) |
132
+ | `delegation_mode` | No | `none` (default) or `auto` for sub-agent delegation |
133
+ | `max_sub_agents` | No | Max concurrent sub-agents, 1-10 (default: `3`) |
126
134
  | `github_token` | No | GitHub token (default: `${{ github.token }}`) |
127
135
  | `mcp_servers_config` | No | JSON array of MCP server configs |
128
136
  | `slack_webhook_url` | No | Slack webhook URL |
@@ -225,7 +233,7 @@ the `safe-to-review` label. The label is auto-removed on new pushes to prevent
225
233
  TOCTOU bypasses.
226
234
 
227
235
  ```yaml
228
- - uses: redhat-community-ai-tools/cicaddy-action@v0.6.0
236
+ - uses: redhat-community-ai-tools/cicaddy-action@v0.7.0
229
237
  with:
230
238
  ai_provider: gemini
231
239
  ai_model: gemini-3-flash-preview
@@ -65,7 +65,7 @@ cicaddy-action/
65
65
 
66
66
  ### Dependencies
67
67
 
68
- - Depends on `cicaddy>=0.8.0` (core library) and `PyGithub>=2.1.0`
68
+ - Depends on `cicaddy>=0.11.0` (core library) and `PyGithub>=2.1.0`
69
69
  - Follows the same agent/factory patterns as the core library
70
70
  - Extends `BaseAIAgent` from cicaddy
71
71
 
@@ -97,7 +97,7 @@ The cicaddy-github plugin provides:
97
97
  |----------|---------|-------------|
98
98
  | `DELEGATION_MODE` | `none` | `none` or `auto` |
99
99
  | `MAX_SUB_AGENTS` | `3` | Max concurrent sub-agents (1-10) |
100
- | `SUB_AGENT_MAX_ITERS` | `10` | Iterations per sub-agent (1-15) |
100
+ | `SUB_AGENT_MAX_ITERS` | `5` | Iterations per sub-agent (1-15) |
101
101
  | `DELEGATION_AGENTS_DIR` | `.agents/delegation` | Custom agent YAML directory (relative to repo root) |
102
102
  | `DELEGATION_AGENTS` | (empty) | JSON config for inline custom sub-agent definitions |
103
103
  | `TRIAGE_PROMPT` | (empty) | Custom triage instructions |
@@ -113,14 +113,17 @@ All inputs use **underscores** (not hyphens) for Docker container compatibility:
113
113
 
114
114
  | Input | Required | Description |
115
115
  |-------|----------|-------------|
116
- | `ai_provider` | Yes | `gemini`, `openai`, `claude`, `anthropic-vertex` |
116
+ | `ai_provider` | Yes | `gemini`, `openai`, `claude`, `anthropic-vertex`, `gemini-vertex` |
117
117
  | `ai_model` | Yes | Model identifier |
118
- | `ai_api_key` | No* | AI provider API key (not needed for `anthropic-vertex`) |
119
- | `vertex_project_id` | No | GCP project ID (required for `anthropic-vertex`) |
120
- | `cloud_ml_region` | No | Vertex AI region (default: `us-east5`) |
118
+ | `ai_api_key` | No* | AI provider API key (not needed for `anthropic-vertex` or `gemini-vertex`) |
119
+ | `vertex_project_id` | No | GCP project ID for Vertex AI Claude (falls back to `google_cloud_project`) |
120
+ | `cloud_ml_region` | No | **Deprecated**: use `google_cloud_location` |
121
+ | `google_cloud_project` | No | GCP project ID for Vertex AI (required for `gemini-vertex`) |
122
+ | `google_cloud_location` | No | Vertex AI location (default: `global`) |
121
123
  | `task_file` | No | Path to DSPy YAML task file |
122
124
  | `task_prompt` | No | Inline task prompt |
123
125
  | `post_pr_comment` | No | Post results as PR comment (default: `false`) |
126
+ | `submit_review` | No | Submit formal PR review with APPROVE/REQUEST_CHANGES (default: `false`) |
124
127
  | `github_token` | No | GitHub token (default: `${{ github.token }}`) |
125
128
  | `mcp_servers_config` | No | JSON array of MCP server configs |
126
129
  | `slack_webhook_url` | No | Slack webhook URL |
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cicaddy-github
3
- Version: 0.6.0
3
+ Version: 0.7.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
@@ -9,7 +9,7 @@ Author: Wayne Sun
9
9
  License: Apache-2.0
10
10
  License-File: LICENSE
11
11
  Requires-Python: >=3.11
12
- Requires-Dist: cicaddy>=0.10.0
12
+ Requires-Dist: cicaddy>=0.11.0
13
13
  Requires-Dist: detect-secrets>=1.4.0
14
14
  Requires-Dist: pygithub>=2.1.0
15
15
  Provides-Extra: test
@@ -28,7 +28,7 @@ GitHub Action that wraps [cicaddy](https://github.com/waynesun09/cicaddy) for ru
28
28
  - **Sub-agent delegation** for parallel specialized reviews (security, architecture, performance, etc.)
29
29
  - **Go dependency impact analysis** for Go dependency update PRs with risk classification
30
30
  - **Changelog report generation** from git tag diffs and release notes
31
- - **Multiple AI providers**: Gemini, OpenAI, Claude, Claude via Vertex AI
31
+ - **Multiple AI providers**: Gemini, OpenAI, Claude, Claude via Vertex AI, Gemini via Vertex AI
32
32
  - **Secret redaction** via detect-secrets for safe public outputs
33
33
  - **DSPy YAML task definitions** for customizable analysis workflows
34
34
 
@@ -149,11 +149,12 @@ See [docs/providers.md](docs/providers.md) for provider-specific configuration i
149
149
 
150
150
  | Input | Required | Description |
151
151
  |-------|----------|-------------|
152
- | `ai_provider` | Yes | AI provider: `gemini`, `openai`, `claude`, `anthropic-vertex` |
152
+ | `ai_provider` | Yes | AI provider: `gemini`, `openai`, `claude`, `anthropic-vertex`, `gemini-vertex` |
153
153
  | `ai_model` | Yes | Model identifier |
154
- | `ai_api_key` | No | AI provider API key (not needed for `anthropic-vertex`) |
155
- | `vertex_project_id` | No | GCP project ID (required for `anthropic-vertex`) |
156
- | `cloud_ml_region` | No | Vertex AI region (default: `us-east5`) |
154
+ | `ai_api_key` | No | AI provider API key (not needed for `anthropic-vertex` or `gemini-vertex`) |
155
+ | `vertex_project_id` | No | GCP project ID for Vertex AI Claude (falls back to `google_cloud_project`) |
156
+ | `google_cloud_project` | No | GCP project ID for Vertex AI (required for `gemini-vertex`, optional fallback for `anthropic-vertex`) |
157
+ | `google_cloud_location` | No | Vertex AI location (default: `global`) |
157
158
  | `task_file` | No | Path to DSPy YAML task file |
158
159
  | `task_prompt` | No | Inline task prompt (alternative to task_file) |
159
160
  | `report_template` | No | Path to custom HTML report template |
@@ -255,11 +256,12 @@ uv run cicaddy validate --env-file .env.my-review
255
256
 
256
257
  | Variable | Required | Description |
257
258
  |----------|----------|-------------|
258
- | `AI_PROVIDER` | Yes | `gemini`, `openai`, `claude`, or `anthropic-vertex` |
259
+ | `AI_PROVIDER` | Yes | `gemini`, `openai`, `claude`, `anthropic-vertex`, or `gemini-vertex` |
259
260
  | `AI_MODEL` | Yes | Model identifier (e.g. `gemini-3-flash-preview`) |
260
- | `GEMINI_API_KEY` / `OPENAI_API_KEY` / `ANTHROPIC_API_KEY` | Yes* | API key matching the provider (*not needed for `anthropic-vertex`) |
261
- | `ANTHROPIC_VERTEX_PROJECT_ID` | No | GCP project ID (required for `anthropic-vertex`) |
262
- | `CLOUD_ML_REGION` | No | Vertex AI region (default: `us-east5`) |
261
+ | `GEMINI_API_KEY` / `OPENAI_API_KEY` / `ANTHROPIC_API_KEY` | Yes* | API key matching the provider (*not needed for `anthropic-vertex` or `gemini-vertex`) |
262
+ | `ANTHROPIC_VERTEX_PROJECT_ID` | No | GCP project ID (required for `anthropic-vertex`, falls back to `GOOGLE_CLOUD_PROJECT`) |
263
+ | `GOOGLE_CLOUD_PROJECT` | No | GCP project ID for Vertex AI (required for `gemini-vertex`) |
264
+ | `GOOGLE_CLOUD_LOCATION` | No | Vertex AI location (default: `global`) |
263
265
  | `GITHUB_TOKEN` | Yes | GitHub personal access token |
264
266
  | `GITHUB_REPOSITORY` | Yes | Target repo in `owner/repo` format |
265
267
  | `GITHUB_EVENT_NAME` | No | Set to `pull_request` for auto-detection (optional if `GITHUB_PR_NUMBER` is set) |
@@ -271,9 +273,6 @@ uv run cicaddy validate --env-file .env.my-review
271
273
  | `SUB_AGENT_MAX_ITERS` | No | Max iterations per sub-agent, 1-15 (default: `5`) |
272
274
  | `AI_TASK_FILE` | No | Path to DSPy YAML task file for custom workflows |
273
275
  | `RUN_GOVULNCHECK` | No | Run govulncheck for reachability analysis (`true`/`false`) |
274
- | `DELEGATION_MODE` | No | `none` or `auto` for sub-agent delegation |
275
- | `MAX_SUB_AGENTS` | No | Maximum concurrent sub-agents (default: `3`) |
276
- | `SUB_AGENT_MAX_ITERS` | No | Max iterations per sub-agent (default: `10`) |
277
276
  | `DELEGATION_AGENTS_DIR` | No | Custom agent YAML directory (default: `.agents/delegation`) |
278
277
  | `DELEGATION_AGENTS` | No | JSON config for inline custom sub-agents |
279
278
  | `TRIAGE_PROMPT` | No | Custom triage instructions |
@@ -8,7 +8,7 @@ GitHub Action that wraps [cicaddy](https://github.com/waynesun09/cicaddy) for ru
8
8
  - **Sub-agent delegation** for parallel specialized reviews (security, architecture, performance, etc.)
9
9
  - **Go dependency impact analysis** for Go dependency update PRs with risk classification
10
10
  - **Changelog report generation** from git tag diffs and release notes
11
- - **Multiple AI providers**: Gemini, OpenAI, Claude, Claude via Vertex AI
11
+ - **Multiple AI providers**: Gemini, OpenAI, Claude, Claude via Vertex AI, Gemini via Vertex AI
12
12
  - **Secret redaction** via detect-secrets for safe public outputs
13
13
  - **DSPy YAML task definitions** for customizable analysis workflows
14
14
 
@@ -129,11 +129,12 @@ See [docs/providers.md](docs/providers.md) for provider-specific configuration i
129
129
 
130
130
  | Input | Required | Description |
131
131
  |-------|----------|-------------|
132
- | `ai_provider` | Yes | AI provider: `gemini`, `openai`, `claude`, `anthropic-vertex` |
132
+ | `ai_provider` | Yes | AI provider: `gemini`, `openai`, `claude`, `anthropic-vertex`, `gemini-vertex` |
133
133
  | `ai_model` | Yes | Model identifier |
134
- | `ai_api_key` | No | AI provider API key (not needed for `anthropic-vertex`) |
135
- | `vertex_project_id` | No | GCP project ID (required for `anthropic-vertex`) |
136
- | `cloud_ml_region` | No | Vertex AI region (default: `us-east5`) |
134
+ | `ai_api_key` | No | AI provider API key (not needed for `anthropic-vertex` or `gemini-vertex`) |
135
+ | `vertex_project_id` | No | GCP project ID for Vertex AI Claude (falls back to `google_cloud_project`) |
136
+ | `google_cloud_project` | No | GCP project ID for Vertex AI (required for `gemini-vertex`, optional fallback for `anthropic-vertex`) |
137
+ | `google_cloud_location` | No | Vertex AI location (default: `global`) |
137
138
  | `task_file` | No | Path to DSPy YAML task file |
138
139
  | `task_prompt` | No | Inline task prompt (alternative to task_file) |
139
140
  | `report_template` | No | Path to custom HTML report template |
@@ -235,11 +236,12 @@ uv run cicaddy validate --env-file .env.my-review
235
236
 
236
237
  | Variable | Required | Description |
237
238
  |----------|----------|-------------|
238
- | `AI_PROVIDER` | Yes | `gemini`, `openai`, `claude`, or `anthropic-vertex` |
239
+ | `AI_PROVIDER` | Yes | `gemini`, `openai`, `claude`, `anthropic-vertex`, or `gemini-vertex` |
239
240
  | `AI_MODEL` | Yes | Model identifier (e.g. `gemini-3-flash-preview`) |
240
- | `GEMINI_API_KEY` / `OPENAI_API_KEY` / `ANTHROPIC_API_KEY` | Yes* | API key matching the provider (*not needed for `anthropic-vertex`) |
241
- | `ANTHROPIC_VERTEX_PROJECT_ID` | No | GCP project ID (required for `anthropic-vertex`) |
242
- | `CLOUD_ML_REGION` | No | Vertex AI region (default: `us-east5`) |
241
+ | `GEMINI_API_KEY` / `OPENAI_API_KEY` / `ANTHROPIC_API_KEY` | Yes* | API key matching the provider (*not needed for `anthropic-vertex` or `gemini-vertex`) |
242
+ | `ANTHROPIC_VERTEX_PROJECT_ID` | No | GCP project ID (required for `anthropic-vertex`, falls back to `GOOGLE_CLOUD_PROJECT`) |
243
+ | `GOOGLE_CLOUD_PROJECT` | No | GCP project ID for Vertex AI (required for `gemini-vertex`) |
244
+ | `GOOGLE_CLOUD_LOCATION` | No | Vertex AI location (default: `global`) |
243
245
  | `GITHUB_TOKEN` | Yes | GitHub personal access token |
244
246
  | `GITHUB_REPOSITORY` | Yes | Target repo in `owner/repo` format |
245
247
  | `GITHUB_EVENT_NAME` | No | Set to `pull_request` for auto-detection (optional if `GITHUB_PR_NUMBER` is set) |
@@ -251,9 +253,6 @@ uv run cicaddy validate --env-file .env.my-review
251
253
  | `SUB_AGENT_MAX_ITERS` | No | Max iterations per sub-agent, 1-15 (default: `5`) |
252
254
  | `AI_TASK_FILE` | No | Path to DSPy YAML task file for custom workflows |
253
255
  | `RUN_GOVULNCHECK` | No | Run govulncheck for reachability analysis (`true`/`false`) |
254
- | `DELEGATION_MODE` | No | `none` or `auto` for sub-agent delegation |
255
- | `MAX_SUB_AGENTS` | No | Maximum concurrent sub-agents (default: `3`) |
256
- | `SUB_AGENT_MAX_ITERS` | No | Max iterations per sub-agent (default: `10`) |
257
256
  | `DELEGATION_AGENTS_DIR` | No | Custom agent YAML directory (default: `.agents/delegation`) |
258
257
  | `DELEGATION_AGENTS` | No | JSON config for inline custom sub-agents |
259
258
  | `TRIAGE_PROMPT` | No | Custom triage instructions |
@@ -6,26 +6,31 @@ branding:
6
6
 
7
7
  inputs:
8
8
  ai_provider:
9
- description: 'AI provider: gemini, openai, claude, anthropic-vertex'
9
+ description: 'AI provider: gemini, openai, claude, anthropic-vertex, gemini-vertex'
10
10
  required: true
11
11
  ai_model:
12
12
  description: 'Model identifier'
13
13
  required: true
14
14
  ai_api_key:
15
- description: 'AI provider API key (not required for anthropic-vertex, which uses GCP ADC)'
15
+ description: 'AI provider API key (not required for anthropic-vertex or gemini-vertex, which use GCP ADC)'
16
16
  required: false
17
17
  vertex_project_id:
18
- description: 'GCP project ID for Vertex AI Claude (required when ai_provider is anthropic-vertex)'
18
+ description: 'GCP project ID for Vertex AI Claude (falls back to google_cloud_project if not set)'
19
19
  required: false
20
20
  cloud_ml_region:
21
- description: 'Vertex AI region (default: us-east5)'
21
+ description: 'DEPRECATED: Use google_cloud_location instead. Vertex AI region for anthropic-vertex.'
22
+ required: false
23
+ google_cloud_project:
24
+ description: 'GCP project ID for Vertex AI (required for gemini-vertex, optional fallback for anthropic-vertex)'
25
+ required: false
26
+ google_cloud_location:
27
+ description: 'Vertex AI location (default: global)'
22
28
  required: false
23
- default: 'us-east5'
24
29
  task_file:
25
30
  description: 'Path to DSPy YAML task file'
26
31
  required: false
27
32
  task_prompt:
28
- description: 'Inline task prompt (alternative to task-file)'
33
+ description: 'Inline task prompt (alternative to task_file)'
29
34
  required: false
30
35
  report_template:
31
36
  description: 'Path to custom HTML report template'
@@ -78,4 +83,4 @@ runs:
78
83
  using: 'docker'
79
84
  image: 'Dockerfile'
80
85
  # After first GHCR publish, switch to pre-built image for faster startup:
81
- # image: 'docker://ghcr.io/redhat-community-ai-tools/cicaddy-action:0.6.0'
86
+ # image: 'docker://ghcr.io/redhat-community-ai-tools/cicaddy-action:0.7.0'
@@ -45,7 +45,7 @@ uv run cicaddy run --env-file .env.my-review --delegation-mode auto --max-sub-ag
45
45
  |-----------------|---------|-------------|
46
46
  | `DELEGATION_MODE` / `delegation_mode` | `none` | `none` (single-agent) or `auto` (AI-powered delegation) |
47
47
  | `MAX_SUB_AGENTS` / `max_sub_agents` | `3` | Maximum concurrent sub-agents (1-10) |
48
- | `SUB_AGENT_MAX_ITERS` | `10` | Max inference iterations per sub-agent (1-15, env var only) |
48
+ | `SUB_AGENT_MAX_ITERS` | `5` | Max inference iterations per sub-agent (1-15, env var only) |
49
49
  | `DELEGATION_AGENTS_DIR` | `.agents/delegation` | Directory for user-defined sub-agent YAML files (env var only) |
50
50
  | `DELEGATION_AGENTS` | (empty) | JSON config for inline custom sub-agent definitions (env var only) |
51
51
  | `TRIAGE_PROMPT` | (empty) | Optional custom instructions for the triage AI (env var only) |
@@ -156,7 +156,7 @@ When using `task_file` with `delegation_mode: auto`, the task definition is prov
156
156
 
157
157
  ## Cost Considerations
158
158
 
159
- Delegation multiplies AI inference calls. With defaults (`MAX_SUB_AGENTS=3`, `SUB_AGENT_MAX_ITERS=10`), a single PR review can use up to 1 (triage) + 3×10 (sub-agents) + 1 (aggregation) = **32 AI calls** versus 1-15 for single-agent mode. Tune `MAX_SUB_AGENTS` and `SUB_AGENT_MAX_ITERS` based on your AI provider tier and rate limits.
159
+ Delegation multiplies AI inference calls. With defaults (`MAX_SUB_AGENTS=3`, `SUB_AGENT_MAX_ITERS=5`), a single PR review can use up to 1 (triage) + 3×5 (sub-agents) + 1 (aggregation) = **17 AI calls** versus 1-15 for single-agent mode. Tune `MAX_SUB_AGENTS` and `SUB_AGENT_MAX_ITERS` based on your AI provider tier and rate limits.
160
160
 
161
161
  ## Troubleshooting
162
162
 
@@ -0,0 +1,178 @@
1
+ # AI Provider Configuration
2
+
3
+ cicaddy-action supports multiple AI providers. This guide covers provider-specific setup.
4
+
5
+ ## Gemini
6
+
7
+ ```yaml
8
+ - uses: redhat-community-ai-tools/cicaddy-action@main
9
+ with:
10
+ ai_provider: gemini
11
+ ai_model: gemini-3-flash-preview
12
+ ai_api_key: ${{ secrets.GEMINI_API_KEY }}
13
+ ```
14
+
15
+ ## OpenAI
16
+
17
+ ```yaml
18
+ - uses: redhat-community-ai-tools/cicaddy-action@main
19
+ with:
20
+ ai_provider: openai
21
+ ai_model: gpt-4.5
22
+ ai_api_key: ${{ secrets.OPENAI_API_KEY }}
23
+ ```
24
+
25
+ ## Claude (Anthropic API)
26
+
27
+ ```yaml
28
+ - uses: redhat-community-ai-tools/cicaddy-action@main
29
+ with:
30
+ ai_provider: claude
31
+ ai_model: claude-sonnet-4-6
32
+ ai_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
33
+ ```
34
+
35
+ ## Claude via Vertex AI (GCP)
36
+
37
+ Uses Google Cloud Workload Identity Federation for keyless authentication — no
38
+ service account JSON keys to manage. This is the recommended approach for GCP.
39
+
40
+ ```yaml
41
+ name: PR Review (Vertex AI)
42
+
43
+ on:
44
+ pull_request:
45
+ types: [opened, synchronize]
46
+
47
+ permissions:
48
+ contents: read
49
+ id-token: write # Required for Workload Identity Federation
50
+ pull-requests: write
51
+
52
+ jobs:
53
+ review:
54
+ runs-on: ubuntu-latest
55
+ steps:
56
+ - uses: actions/checkout@v6
57
+ with:
58
+ fetch-depth: 0
59
+
60
+ - uses: google-github-actions/auth@v3
61
+ with:
62
+ workload_identity_provider: 'projects/123/locations/global/workloadIdentityPools/github/providers/my-repo'
63
+ service_account: 'cicaddy@my-project.iam.gserviceaccount.com'
64
+
65
+ - uses: redhat-community-ai-tools/cicaddy-action@main
66
+ with:
67
+ ai_provider: anthropic-vertex
68
+ ai_model: claude-sonnet-4-6
69
+ vertex_project_id: my-project
70
+ task_file: tasks/pr_review.yml
71
+ post_pr_comment: 'true'
72
+ ```
73
+
74
+ > **Security**: Prefer Workload Identity Federation (shown above) over service
75
+ > account keys. If you must use a key, store the JSON as a GitHub secret and pass
76
+ > it via `google-github-actions/auth` with `credentials_json`:
77
+ > ```yaml
78
+ > - uses: google-github-actions/auth@v3
79
+ > with:
80
+ > credentials_json: ${{ secrets.GCP_SA_KEY }}
81
+ > ```
82
+ > The auth action sets `GOOGLE_APPLICATION_CREDENTIALS` automatically — never
83
+ > write keys to disk manually or echo them in scripts.
84
+
85
+ ## Gemini via Vertex AI (GCP)
86
+
87
+ Uses Google Cloud authentication (Workload Identity Federation or service account)
88
+ to call Gemini models through the Vertex AI API — no Gemini API key needed.
89
+
90
+ ```yaml
91
+ name: PR Review (Gemini Vertex AI)
92
+
93
+ on:
94
+ pull_request:
95
+ types: [opened, synchronize]
96
+
97
+ permissions:
98
+ contents: read
99
+ id-token: write # Required for Workload Identity Federation
100
+ pull-requests: write
101
+
102
+ jobs:
103
+ review:
104
+ runs-on: ubuntu-latest
105
+ steps:
106
+ - uses: actions/checkout@v6
107
+ with:
108
+ fetch-depth: 0
109
+
110
+ - uses: google-github-actions/auth@v3
111
+ with:
112
+ workload_identity_provider: 'projects/123/locations/global/workloadIdentityPools/github/providers/my-repo'
113
+ service_account: 'cicaddy@my-project.iam.gserviceaccount.com'
114
+
115
+ - uses: redhat-community-ai-tools/cicaddy-action@main
116
+ with:
117
+ ai_provider: gemini-vertex
118
+ ai_model: gemini-3-flash-preview
119
+ google_cloud_project: my-project
120
+ task_file: tasks/pr_review.yml
121
+ post_pr_comment: 'true'
122
+ ```
123
+
124
+ > **Note**: `google_cloud_project` is required for `gemini-vertex`. The
125
+ > `google-github-actions/auth` step sets `GOOGLE_APPLICATION_CREDENTIALS`
126
+ > automatically.
127
+
128
+ ## Migration Notes
129
+
130
+ ### Default Vertex AI location changed from `us-east5` to `global`
131
+
132
+ Previous versions defaulted to `us-east5` via the `cloud_ml_region` input. This
133
+ release changes the default to `global` (via the new `google_cloud_location`
134
+ input), which routes requests to the nearest available region.
135
+
136
+ If your workflow relied on the implicit `us-east5` default, add an explicit
137
+ location:
138
+
139
+ ```yaml
140
+ - uses: redhat-community-ai-tools/cicaddy-action@main
141
+ with:
142
+ google_cloud_location: us-east5 # pin to previous default
143
+ ```
144
+
145
+ ### `cloud_ml_region` is deprecated
146
+
147
+ The `cloud_ml_region` input still works but emits a warning. Replace it with
148
+ `google_cloud_location` in your workflows.
149
+
150
+ ## Security Considerations
151
+
152
+ ### `submit_review` and fork pull requests
153
+
154
+ When `submit_review: 'true'` is set, the action submits a formal GitHub review
155
+ (APPROVE or REQUEST\_CHANGES) on behalf of the token owner. If your repository
156
+ accepts pull requests from forks and you use `pull_request_target` to expose
157
+ secrets, an attacker could craft a PR that tricks the AI into approving
158
+ malicious code.
159
+
160
+ Mitigations:
161
+
162
+ - Do **not** combine `submit_review: 'true'` with `pull_request_target` on
163
+ repositories that accept fork PRs.
164
+ - Use `pull_request` (not `pull_request_target`) when possible — it runs in the
165
+ fork's context and cannot access repository secrets.
166
+ - If you must use `pull_request_target`, restrict `submit_review` to trusted
167
+ contributors via a branch protection rule or a job-level `if:` condition.
168
+
169
+ ## Provider Inputs Reference
170
+
171
+ | Input | Required | Description |
172
+ |-------|----------|-------------|
173
+ | `ai_provider` | Yes | `gemini`, `openai`, `claude`, `anthropic-vertex`, or `gemini-vertex` |
174
+ | `ai_model` | Yes | Model identifier |
175
+ | `ai_api_key` | No | API key (not needed for `anthropic-vertex` or `gemini-vertex`) |
176
+ | `vertex_project_id` | No | GCP project ID for Vertex AI Claude (falls back to `google_cloud_project`) |
177
+ | `google_cloud_project` | No | GCP project ID for Vertex AI (required for `gemini-vertex`, optional fallback for `anthropic-vertex`) |
178
+ | `google_cloud_location` | No | Vertex AI location (default: `global`) |
@@ -14,27 +14,53 @@ case "${AI_PROVIDER}" in
14
14
  claude|anthropic) export ANTHROPIC_API_KEY="${INPUT_AI_API_KEY}" ;;
15
15
  anthropic-vertex)
16
16
  ;; # handled below
17
+ gemini-vertex)
18
+ ;; # handled below
17
19
  *)
18
- echo "ERROR: Unknown ai_provider '${AI_PROVIDER}'. Supported: gemini, openai, claude, anthropic, anthropic-vertex"
20
+ echo "ERROR: Unknown ai_provider '${AI_PROVIDER}'. Supported: gemini, openai, claude, anthropic, anthropic-vertex, gemini-vertex"
19
21
  exit 3
20
22
  ;;
21
23
  esac
22
24
 
23
25
  # Validate API key for non-vertex providers
24
- if [[ "${AI_PROVIDER}" != "anthropic-vertex" && -z "${INPUT_AI_API_KEY}" ]]; then
26
+ if [[ "${AI_PROVIDER}" != *-vertex && -z "${INPUT_AI_API_KEY}" ]]; then
25
27
  echo "ERROR: ai_api_key is required for provider '${AI_PROVIDER}'"
26
28
  exit 3
27
29
  fi
28
30
 
31
+ # Export shared Vertex AI env vars
32
+ if [[ -n "${INPUT_GOOGLE_CLOUD_PROJECT}" ]]; then
33
+ export GOOGLE_CLOUD_PROJECT="${INPUT_GOOGLE_CLOUD_PROJECT}"
34
+ fi
35
+ if [[ -n "${INPUT_GOOGLE_CLOUD_LOCATION}" ]]; then
36
+ export GOOGLE_CLOUD_LOCATION="${INPUT_GOOGLE_CLOUD_LOCATION}"
37
+ fi
38
+
39
+ # Handle gemini-vertex provider setup
40
+ if [[ "${AI_PROVIDER}" == "gemini-vertex" ]]; then
41
+ if [[ -z "${GOOGLE_CLOUD_PROJECT}" ]]; then
42
+ echo "ERROR: ai_provider 'gemini-vertex' requires google_cloud_project input"
43
+ exit 3
44
+ fi
45
+ if [[ -z "${GOOGLE_APPLICATION_CREDENTIALS}" ]]; then
46
+ echo "WARNING: GOOGLE_APPLICATION_CREDENTIALS not set. Use google-github-actions/auth before this step."
47
+ fi
48
+ export GOOGLE_CLOUD_LOCATION="${GOOGLE_CLOUD_LOCATION:-global}"
49
+ fi
50
+
29
51
  # Handle anthropic-vertex provider setup
30
52
  if [[ "${AI_PROVIDER}" == "anthropic-vertex" ]]; then
31
- export ANTHROPIC_VERTEX_PROJECT_ID="${INPUT_VERTEX_PROJECT_ID}"
32
- export CLOUD_ML_REGION="${INPUT_CLOUD_ML_REGION:-us-east5}"
33
- if [[ -z "${ANTHROPIC_VERTEX_PROJECT_ID}" ]]; then
34
- echo "ERROR: ai_provider 'anthropic-vertex' requires vertex_project_id input"
53
+ export ANTHROPIC_VERTEX_PROJECT_ID="${INPUT_VERTEX_PROJECT_ID:-$GOOGLE_CLOUD_PROJECT}"
54
+ # CLOUD_ML_REGION is deprecated in cicaddy core; use GOOGLE_CLOUD_LOCATION
55
+ if [[ -n "${INPUT_CLOUD_ML_REGION}" ]]; then
56
+ echo "WARNING: cloud_ml_region input is deprecated. Use google_cloud_location instead."
57
+ export GOOGLE_CLOUD_LOCATION="${GOOGLE_CLOUD_LOCATION:-${INPUT_CLOUD_ML_REGION}}"
58
+ fi
59
+ export GOOGLE_CLOUD_LOCATION="${GOOGLE_CLOUD_LOCATION:-global}"
60
+ if [[ -z "${ANTHROPIC_VERTEX_PROJECT_ID}" && -z "${GOOGLE_CLOUD_PROJECT}" ]]; then
61
+ echo "ERROR: ai_provider 'anthropic-vertex' requires vertex_project_id or google_cloud_project input"
35
62
  exit 3
36
63
  fi
37
- # GOOGLE_APPLICATION_CREDENTIALS must be set by google-github-actions/auth
38
64
  if [[ -z "${GOOGLE_APPLICATION_CREDENTIALS}" ]]; then
39
65
  echo "WARNING: GOOGLE_APPLICATION_CREDENTIALS not set. Use google-github-actions/auth before this step."
40
66
  fi
@@ -54,7 +80,9 @@ _to_abs() {
54
80
  fi
55
81
  local full_path="${WORKSPACE}/${path}"
56
82
  # Resolve symlinks and .. components, then verify the result is under WORKSPACE
57
- if [[ "$(realpath -m "$full_path")" != "${WORKSPACE}"* ]]; then
83
+ local resolved
84
+ resolved="$(realpath -m "$full_path")"
85
+ if [[ "$resolved" != "${WORKSPACE}/"* && "$resolved" != "${WORKSPACE}" ]]; then
58
86
  echo "ERROR: Path traversal detected: $path" >&2
59
87
  exit 1
60
88
  fi
@@ -4,14 +4,14 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "cicaddy-github"
7
- version = "0.6.0"
7
+ version = "0.7.0"
8
8
  description = "GitHub Actions plugin for cicaddy AI agent framework"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.11"
11
11
  license = {text = "Apache-2.0"}
12
12
  authors = [{name = "Wayne Sun"}]
13
13
  dependencies = [
14
- "cicaddy>=0.10.0",
14
+ "cicaddy>=0.11.0",
15
15
  "PyGithub>=2.1.0",
16
16
  "detect-secrets>=1.4.0",
17
17
  ]
@@ -1,3 +1,3 @@
1
1
  """cicaddy-github: GitHub Actions plugin for cicaddy AI agent framework."""
2
2
 
3
- __version__ = "0.6.0"
3
+ __version__ = "0.7.0"
@@ -140,7 +140,17 @@ def load_settings() -> Settings:
140
140
  if os.getenv("ANTHROPIC_VERTEX_PROJECT_ID"):
141
141
  env_data["anthropic_vertex_project_id"] = os.getenv("ANTHROPIC_VERTEX_PROJECT_ID")
142
142
  if os.getenv("CLOUD_ML_REGION"):
143
- env_data["cloud_ml_region"] = os.getenv("CLOUD_ML_REGION")
143
+ logger.warning("CLOUD_ML_REGION is deprecated; use GOOGLE_CLOUD_LOCATION instead")
144
+ gcp_project = os.getenv("GOOGLE_CLOUD_PROJECT")
145
+ if gcp_project:
146
+ env_data["google_cloud_project"] = gcp_project
147
+ elif gcp_project == "":
148
+ os.environ.pop("GOOGLE_CLOUD_PROJECT", None)
149
+ gcp_location = os.getenv("GOOGLE_CLOUD_LOCATION")
150
+ if gcp_location:
151
+ env_data["google_cloud_location"] = gcp_location
152
+ elif gcp_location == "":
153
+ os.environ.pop("GOOGLE_CLOUD_LOCATION", None)
144
154
 
145
155
  # MCP server configuration
146
156
  if os.getenv("MCP_SERVERS_CONFIG"):
@@ -202,3 +202,80 @@ class TestSettingsValidation:
202
202
 
203
203
  settings = load_settings()
204
204
  assert settings.submit_review is True
205
+
206
+ def test_google_cloud_project_passed_through(self):
207
+ """GOOGLE_CLOUD_PROJECT is passed through to settings."""
208
+ env = {
209
+ "AI_PROVIDER": "gemini-vertex",
210
+ "AI_MODEL": "gemini-3-flash-preview",
211
+ "GOOGLE_CLOUD_PROJECT": "my-gcp-project",
212
+ "GOOGLE_CLOUD_LOCATION": "us-central1",
213
+ "MCP_SERVERS_CONFIG": "[]",
214
+ }
215
+ with patch.dict(os.environ, env, clear=False):
216
+ from cicaddy_github.config.settings import load_settings
217
+
218
+ settings = load_settings()
219
+ assert settings.google_cloud_project == "my-gcp-project"
220
+ assert settings.google_cloud_location == "us-central1"
221
+
222
+ def test_google_cloud_location_defaults_to_global(self):
223
+ """GOOGLE_CLOUD_LOCATION defaults to 'global' when not set."""
224
+ env = {
225
+ "AI_PROVIDER": "gemini-vertex",
226
+ "AI_MODEL": "gemini-3-flash-preview",
227
+ "GOOGLE_CLOUD_PROJECT": "my-gcp-project",
228
+ "MCP_SERVERS_CONFIG": "[]",
229
+ }
230
+ with patch.dict(os.environ, env, clear=False):
231
+ os.environ.pop("GOOGLE_CLOUD_LOCATION", None)
232
+ from cicaddy_github.config.settings import load_settings
233
+
234
+ settings = load_settings()
235
+ assert settings.google_cloud_project == "my-gcp-project"
236
+ assert settings.google_cloud_location == "global"
237
+
238
+ def test_google_cloud_project_absent(self):
239
+ """GOOGLE_CLOUD_PROJECT absent results in None."""
240
+ env = {
241
+ "AI_PROVIDER": "gemini",
242
+ "AI_MODEL": "gemini-3-flash-preview",
243
+ "MCP_SERVERS_CONFIG": "[]",
244
+ }
245
+ with patch.dict(os.environ, env, clear=False):
246
+ os.environ.pop("GOOGLE_CLOUD_PROJECT", None)
247
+ os.environ.pop("GOOGLE_CLOUD_LOCATION", None)
248
+ from cicaddy_github.config.settings import load_settings
249
+
250
+ settings = load_settings()
251
+ assert settings.google_cloud_project is None
252
+
253
+ def test_google_cloud_project_empty_string(self):
254
+ """Empty string GOOGLE_CLOUD_PROJECT is not passed through."""
255
+ env = {
256
+ "AI_PROVIDER": "gemini",
257
+ "AI_MODEL": "gemini-3-flash-preview",
258
+ "GOOGLE_CLOUD_PROJECT": "",
259
+ "MCP_SERVERS_CONFIG": "[]",
260
+ }
261
+ with patch.dict(os.environ, env, clear=False):
262
+ from cicaddy_github.config.settings import load_settings
263
+
264
+ settings = load_settings()
265
+ assert settings.google_cloud_project is None
266
+
267
+ def test_anthropic_vertex_with_google_cloud_project(self):
268
+ """anthropic-vertex provider uses GOOGLE_CLOUD_PROJECT for settings."""
269
+ env = {
270
+ "AI_PROVIDER": "anthropic-vertex",
271
+ "AI_MODEL": "claude-sonnet-4-20250514",
272
+ "GOOGLE_CLOUD_PROJECT": "my-gcp-project",
273
+ "ANTHROPIC_VERTEX_PROJECT_ID": "my-vertex-project",
274
+ "MCP_SERVERS_CONFIG": "[]",
275
+ }
276
+ with patch.dict(os.environ, env, clear=False):
277
+ from cicaddy_github.config.settings import load_settings
278
+
279
+ settings = load_settings()
280
+ assert settings.google_cloud_project == "my-gcp-project"
281
+ assert settings.anthropic_vertex_project_id == "my-vertex-project"
@@ -1,93 +0,0 @@
1
- # AI Provider Configuration
2
-
3
- cicaddy-action supports multiple AI providers. This guide covers provider-specific setup.
4
-
5
- ## Gemini
6
-
7
- ```yaml
8
- - uses: redhat-community-ai-tools/cicaddy-action@main
9
- with:
10
- ai_provider: gemini
11
- ai_model: gemini-3-flash-preview
12
- ai_api_key: ${{ secrets.GEMINI_API_KEY }}
13
- ```
14
-
15
- ## OpenAI
16
-
17
- ```yaml
18
- - uses: redhat-community-ai-tools/cicaddy-action@main
19
- with:
20
- ai_provider: openai
21
- ai_model: gpt-4.5
22
- ai_api_key: ${{ secrets.OPENAI_API_KEY }}
23
- ```
24
-
25
- ## Claude (Anthropic API)
26
-
27
- ```yaml
28
- - uses: redhat-community-ai-tools/cicaddy-action@main
29
- with:
30
- ai_provider: claude
31
- ai_model: claude-sonnet-4-6
32
- ai_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
33
- ```
34
-
35
- ## Claude via Vertex AI (GCP)
36
-
37
- Uses Google Cloud Workload Identity Federation for keyless authentication — no
38
- service account JSON keys to manage. This is the recommended approach for GCP.
39
-
40
- ```yaml
41
- name: PR Review (Vertex AI)
42
-
43
- on:
44
- pull_request:
45
- types: [opened, synchronize]
46
-
47
- permissions:
48
- contents: read
49
- id-token: write # Required for Workload Identity Federation
50
- pull-requests: write
51
-
52
- jobs:
53
- review:
54
- runs-on: ubuntu-latest
55
- steps:
56
- - uses: actions/checkout@v6
57
- with:
58
- fetch-depth: 0
59
-
60
- - uses: google-github-actions/auth@v3
61
- with:
62
- workload_identity_provider: 'projects/123/locations/global/workloadIdentityPools/github/providers/my-repo'
63
- service_account: 'cicaddy@my-project.iam.gserviceaccount.com'
64
-
65
- - uses: redhat-community-ai-tools/cicaddy-action@main
66
- with:
67
- ai_provider: anthropic-vertex
68
- ai_model: claude-sonnet-4-6
69
- vertex_project_id: my-project
70
- task_file: tasks/pr_review.yml
71
- post_pr_comment: 'true'
72
- ```
73
-
74
- > **Security**: Prefer Workload Identity Federation (shown above) over service
75
- > account keys. If you must use a key, store the JSON as a GitHub secret and pass
76
- > it via `google-github-actions/auth` with `credentials_json`:
77
- > ```yaml
78
- > - uses: google-github-actions/auth@v3
79
- > with:
80
- > credentials_json: ${{ secrets.GCP_SA_KEY }}
81
- > ```
82
- > The auth action sets `GOOGLE_APPLICATION_CREDENTIALS` automatically — never
83
- > write keys to disk manually or echo them in scripts.
84
-
85
- ## Provider Inputs Reference
86
-
87
- | Input | Required | Description |
88
- |-------|----------|-------------|
89
- | `ai_provider` | Yes | `gemini`, `openai`, `claude`, or `anthropic-vertex` |
90
- | `ai_model` | Yes | Model identifier |
91
- | `ai_api_key` | No | API key (not needed for `anthropic-vertex`) |
92
- | `vertex_project_id` | No | GCP project ID (required for `anthropic-vertex`) |
93
- | `cloud_ml_region` | No | Vertex AI region (default: `us-east5`) |
File without changes
File without changes