Skip to content

Commit 7bd9a3f

Browse files
committed
chore: dispatch renamed codex audit workflow
1 parent eadb807 commit 7bd9a3f

4 files changed

Lines changed: 32 additions & 29 deletions

File tree

.github/workflows/monthly_publish.yml

Lines changed: 22 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -34,11 +34,12 @@ jobs:
3434
GCP_PROJECT_ID: ${{ vars.GCP_PROJECT_ID }}
3535
GCS_BUCKET: ${{ vars.GCS_BUCKET }}
3636
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: "true"
37-
SELFHOSTED_CODEX_REVIEW_ENABLED: ${{ vars.SELFHOSTED_CODEX_REVIEW_ENABLED || 'true' }}
38-
SELFHOSTED_CODEX_REVIEW_REPOSITORY: ${{ vars.SELFHOSTED_CODEX_REVIEW_REPOSITORY || 'QuantStrategyLab/CodexAuditBridge' }}
39-
SELFHOSTED_CODEX_REVIEW_MODE: ${{ vars.SELFHOSTED_CODEX_REVIEW_MODE || 'review_and_fix' }}
40-
SELFHOSTED_CODEX_REVIEW_PROVIDER: ${{ vars.SELFHOSTED_CODEX_REVIEW_PROVIDER || 'auto' }}
41-
SELFHOSTED_CODEX_REVIEW_AUTO_MERGE: ${{ vars.SELFHOSTED_CODEX_REVIEW_AUTO_MERGE || 'false' }}
37+
CODEX_AUDIT_ENABLED: ${{ vars.CODEX_AUDIT_ENABLED || 'true' }}
38+
CODEX_AUDIT_BRIDGE_REPOSITORY: ${{ vars.CODEX_AUDIT_BRIDGE_REPOSITORY || 'QuantStrategyLab/CodexAuditBridge' }}
39+
CODEX_AUDIT_BRIDGE_REF: ${{ vars.CODEX_AUDIT_BRIDGE_REF || 'main' }}
40+
CODEX_AUDIT_MODE: ${{ vars.CODEX_AUDIT_MODE || 'review_and_fix' }}
41+
CODEX_AUDIT_PROVIDER: ${{ vars.CODEX_AUDIT_PROVIDER || 'auto' }}
42+
CODEX_AUDIT_AUTO_MERGE: ${{ vars.CODEX_AUDIT_AUTO_MERGE || 'false' }}
4243

4344
steps:
4445
- name: Checkout
@@ -177,9 +178,9 @@ jobs:
177178
print(f"issue_url={issue['html_url']}", file=output)
178179
PY
179180
180-
- name: Detect Self-hosted Review GitHub App Credentials
181+
- name: Detect Codex Audit GitHub App Credentials
181182
id: codex_review_app_credentials
182-
if: success() && env.PUBLISH_ENABLED != 'false' && env.SELFHOSTED_CODEX_REVIEW_ENABLED != 'false'
183+
if: success() && env.PUBLISH_ENABLED != 'false' && env.CODEX_AUDIT_ENABLED != 'false'
183184
env:
184185
APP_ID: ${{ vars.CROSS_REPO_GITHUB_APP_ID }}
185186
APP_PRIVATE_KEY: ${{ secrets.CROSS_REPO_GITHUB_APP_PRIVATE_KEY }}
@@ -191,7 +192,7 @@ jobs:
191192
echo "available=false" >> "$GITHUB_OUTPUT"
192193
fi
193194
194-
- name: Create GitHub App Token For Self-hosted Review
195+
- name: Create GitHub App Token For Codex Audit
195196
id: codex_review_app_token
196197
if: steps.codex_review_app_credentials.outputs.available == 'true'
197198
continue-on-error: true
@@ -214,11 +215,11 @@ jobs:
214215
GITHUB_REF_NAME: ${{ github.ref_name }}
215216
ISSUE_NUMBER: ${{ steps.review_issue.outputs.issue_number }}
216217
ISSUE_URL: ${{ steps.review_issue.outputs.issue_url }}
217-
TARGET_REPOSITORY: ${{ env.SELFHOSTED_CODEX_REVIEW_REPOSITORY }}
218-
REVIEW_MODE: ${{ env.SELFHOSTED_CODEX_REVIEW_MODE }}
219-
REVIEW_PROVIDER: ${{ env.SELFHOSTED_CODEX_REVIEW_PROVIDER }}
220-
AUTO_MERGE: ${{ env.SELFHOSTED_CODEX_REVIEW_AUTO_MERGE }}
221-
CODEX_REVIEW_ENABLED: ${{ env.SELFHOSTED_CODEX_REVIEW_ENABLED }}
218+
TARGET_REPOSITORY: ${{ env.CODEX_AUDIT_BRIDGE_REPOSITORY }}
219+
REVIEW_MODE: ${{ env.CODEX_AUDIT_MODE }}
220+
REVIEW_PROVIDER: ${{ env.CODEX_AUDIT_PROVIDER }}
221+
AUTO_MERGE: ${{ env.CODEX_AUDIT_AUTO_MERGE }}
222+
CODEX_AUDIT_ENABLED_RUNTIME: ${{ env.CODEX_AUDIT_ENABLED }}
222223
run: |
223224
set -euo pipefail
224225
python - <<'PY'
@@ -251,19 +252,19 @@ jobs:
251252
token = os.environ.get("APP_TOKEN", "").strip() or os.environ.get("CODEX_AUDIT_DISPATCH_TOKEN", "").strip()
252253
if not token:
253254
raise RuntimeError(
254-
"Codex review workflow dispatch requires either a GitHub App token or CODEX_AUDIT_DISPATCH_TOKEN"
255+
"Codex audit workflow dispatch requires either a GitHub App token or CODEX_AUDIT_DISPATCH_TOKEN"
255256
)
256257
target_repository = os.environ["TARGET_REPOSITORY"].strip()
257258
if not re.fullmatch(r"[A-Za-z0-9_.-]+/[A-Za-z0-9_.-]+", target_repository):
258-
raise RuntimeError(f"Invalid Codex review repository: {target_repository!r}")
259+
raise RuntimeError(f"Invalid Codex audit repository: {target_repository!r}")
259260
mode = os.environ["REVIEW_MODE"].strip() or "review_and_fix"
260261
if mode not in {"review_only", "review_and_fix"}:
261-
raise RuntimeError(f"Unsupported Codex review mode: {mode}")
262+
raise RuntimeError(f"Unsupported Codex audit mode: {mode}")
262263
provider = os.environ["REVIEW_PROVIDER"].strip() or "codex"
263264
if provider not in {"api", "anthropic", "codex", "openai", "auto"}:
264-
raise RuntimeError(f"Unsupported Codex review provider: {provider}")
265+
raise RuntimeError(f"Unsupported Codex audit provider: {provider}")
265266
payload = {
266-
"ref": "main",
267+
"ref": os.environ["CODEX_AUDIT_BRIDGE_REF"],
267268
"inputs": {
268269
"source_repo": os.environ["GITHUB_REPOSITORY"],
269270
"source_ref": os.environ["GITHUB_REF_NAME"],
@@ -275,7 +276,7 @@ jobs:
275276
}
276277
status = dispatch(
277278
token,
278-
f"https://api.github.com/repos/{target_repository}/actions/workflows/selfhosted_monthly_review.yml/dispatches",
279+
f"https://api.github.com/repos/{target_repository}/actions/workflows/codex_audit.yml/dispatches",
279280
payload,
280281
)
281282
if status not in (201, 204):
@@ -285,11 +286,11 @@ jobs:
285286
f"to {target_repository}"
286287
)
287288
288-
if enabled("CODEX_REVIEW_ENABLED"):
289+
if enabled("CODEX_AUDIT_ENABLED_RUNTIME"):
289290
dispatch_codex()
290291
raise SystemExit(0)
291292
292-
raise RuntimeError("Monthly review bridge dispatch is disabled by SELFHOSTED_CODEX_REVIEW_ENABLED=false")
293+
raise RuntimeError("Codex audit bridge dispatch is disabled by CODEX_AUDIT_ENABLED=false")
293294
PY
294295
295296
- name: Write Release Heartbeat

README.zh-CN.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ Live-pool artifact 的作用是让策略判断可复现:包括 ranking 输入
3232

3333
## 月度 review 自动化
3434

35-
月度 publish workflow 通过 `CodexAuditBridge` 触发自动 review 和 remediation;`SELFHOSTED_CODEX_REVIEW_PROVIDER` 默认走 `auto`优先使用 self-hosted Codex 路径,再按桥接仓库配置 fallback 到 API reviewer。`OPENAI_API_KEY``ANTHROPIC_API_KEY` 等 provider secret 配置在 `CodexAuditBridge`,本仓库不直接读取这些 provider key。
35+
月度 publish workflow 通过 `CodexAuditBridge` 触发自动 review 和 remediation;`CODEX_AUDIT_PROVIDER` 默认走 `auto`优先调用 CodexAuditBridge 的 HTTPS/443 service-backed Codex 路径,再按桥接仓库配置 fallback 到 API reviewer。`OPENAI_API_KEY``ANTHROPIC_API_KEY` 等 provider secret 配置在 `CodexAuditBridge`,本仓库不直接读取这些 provider key。可通过 `CODEX_AUDIT_BRIDGE_REF` pin 到指定 bridge ref,默认 `main`
3636

3737
生产发布目标如 GCP project、GCS bucket 和 Firestore document 必须从 GitHub variable 读取。本仓库不再保留 source-local `ai_review.yml`;旧的本仓库本地 API review workflow 已移除,provider 选择和 fallback 逻辑集中在 `CodexAuditBridge`
3838

docs/operator_runbook.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ Boundary rules:
8282

8383
## Monthly Codex Remediation
8484

85-
The monthly publish workflow creates a `monthly-review` issue, then dispatches `CodexAuditBridge` as the automated review and remediation path. The bridge owns provider selection through `SELFHOSTED_CODEX_REVIEW_PROVIDER`: `auto` is the default and runs the self-hosted Codex path first, falls back to the configured API reviewers when Codex setup or execution fails, and fails loudly when no API fallback key is configured. `codex` disables API fallback; `api` posts a combined API review; `openai` and `anthropic` post a single-provider API review only.
85+
The monthly publish workflow creates a `monthly-review` issue, then dispatches `CodexAuditBridge` as the automated review and remediation path. The bridge owns provider selection through `CODEX_AUDIT_PROVIDER`: `auto` is the default and calls the service-backed Codex path first, falls back to the configured API reviewers when Codex service execution fails, and fails loudly when no API fallback key is configured. `codex` disables API fallback; `api` posts a combined API review; `openai` and `anthropic` post a single-provider API review only. Set `CODEX_AUDIT_BRIDGE_REF` to pin the bridge workflow ref; the default is `main`.
8686

8787
If the bridge dispatch fails, the monthly publish workflow fails loudly. Source-local legacy AI review workflows are intentionally removed; provider fallback lives in `CodexAuditBridge`.
8888

tests/test_monthly_publish_workflow_config.py

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,9 @@ def test_monthly_review_issue_creation_does_not_require_gh_cli(self) -> None:
3737
self.assertIn('GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}', workflow)
3838
self.assertNotIn("GITHUB_OUTPUT: ${{ github.output }}", workflow)
3939
self.assertIn("issue_number=", workflow)
40-
self.assertIn("SELFHOSTED_CODEX_REVIEW_REPOSITORY", workflow)
40+
self.assertIn("CODEX_AUDIT_BRIDGE_REPOSITORY", workflow)
41+
self.assertIn("CODEX_AUDIT_BRIDGE_REF", workflow)
42+
self.assertIn('"ref": os.environ["CODEX_AUDIT_BRIDGE_REF"]', workflow)
4143
self.assertIn("QuantStrategyLab/CodexAuditBridge", workflow)
4244
self.assertIn("CROSS_REPO_GITHUB_APP_ID", workflow)
4345
self.assertIn("CROSS_REPO_GITHUB_APP_PRIVATE_KEY", workflow)
@@ -47,17 +49,17 @@ def test_monthly_review_issue_creation_does_not_require_gh_cli(self) -> None:
4749
self.assertIn("APP_TOKEN", workflow)
4850
self.assertIn("Trigger Monthly Review Automation", workflow)
4951
self.assertIn("CODEX_AUDIT_DISPATCH_TOKEN", workflow)
50-
self.assertIn("SELFHOSTED_CODEX_REVIEW_PROVIDER", workflow)
51-
self.assertIn("SELFHOSTED_CODEX_REVIEW_PROVIDER || 'auto'", workflow)
52+
self.assertIn("CODEX_AUDIT_PROVIDER", workflow)
53+
self.assertIn("CODEX_AUDIT_PROVIDER || 'auto'", workflow)
5254
self.assertIn("REVIEW_PROVIDER", workflow)
5355
self.assertIn('"provider": provider', workflow)
5456
self.assertIn('"anthropic"', workflow)
5557
self.assertIn('"api"', workflow)
5658
self.assertNotIn("ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}", workflow)
5759
self.assertNotIn("OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}", workflow)
5860
self.assertNotIn("legacy API review fallback", workflow)
59-
self.assertIn("selfhosted_monthly_review.yml", workflow)
60-
self.assertIn("/actions/workflows/selfhosted_monthly_review.yml/dispatches", workflow)
61+
self.assertIn("codex_audit.yml", workflow)
62+
self.assertIn("/actions/workflows/codex_audit.yml/dispatches", workflow)
6163
self.assertNotIn("/repos/{target_repository}/dispatches", workflow)
6264
self.assertNotIn("LEGACY_API_REVIEW_ENABLED", workflow)
6365
self.assertNotIn("/actions/workflows/ai_review.yml/dispatches", workflow)
@@ -76,7 +78,7 @@ def test_chinese_readme_matches_current_monthly_review_defaults(self) -> None:
7678
readme = README_ZH_PATH.read_text(encoding="utf-8")
7779

7880
self.assertIn("CodexAuditBridge", readme)
79-
self.assertIn("SELFHOSTED_CODEX_REVIEW_PROVIDER", readme)
81+
self.assertIn("CODEX_AUDIT_PROVIDER", readme)
8082
self.assertIn("OPENAI_API_KEY", readme)
8183
self.assertIn("ANTHROPIC_API_KEY", readme)
8284
self.assertIn("配置在 `CodexAuditBridge`", readme)

0 commit comments

Comments
 (0)