Skip to content

ci(pr-agent): support fork PRs via pull_request_target with collaborator allowlist#19

Merged
genni613 merged 1 commit into
masterfrom
chore/pr-agent-fork-support
Apr 17, 2026
Merged

ci(pr-agent): support fork PRs via pull_request_target with collaborator allowlist#19
genni613 merged 1 commit into
masterfrom
chore/pr-agent-fork-support

Conversation

@TuYv

@TuYv TuYv commented Apr 17, 2026

Copy link
Copy Markdown
Owner

背景

PR #18 来自 fork (genni613/CodePlanGUI),workflow 日志显示:

Set up job:  Secret source: None
PR-Agent:    OPENAI_KEY:              ← 空
PR-Agent:    OPENAI_KEY not set
PR-Agent:    Running auto actions: auto_describe=None, auto_review=None, auto_improve=None

原因:GitHub 对 fork 发起的 pull_request 事件强制不注入 secrets(与 PR 作者权限无关,只看 head repo 是否跨仓库),所以 pr-agent 拿不到 OPENAI_KEY,三个 auto 动作全部跳过,job 以 success 收尾但 0 评论 —— 正是 #18 没 CR 结果的根因。

修改

  1. 触发器改为 pull_request_target —— 能访问 secrets;使用 base 分支的 workflow 文件,fork 无法通过修改 yaml 绕过保护。
  2. 加 collaborator allowlist —— 只允许 OWNER / MEMBER / COLLABORATOR 的 PR 跑,外部贡献者 fork PR 直接跳过,防 workflow injection 泄漏 key。
  3. 修复 env 变量名 —— CONFIG.AI_PROVIDER / CONFIG.MODELCONFIG__AI_PROVIDER / CONFIG__MODEL,符合 pr-agent 的 Dynaconf 分层规范(点号在 shell env 名里非法)。
  4. 新增 synchronize 类型,让 PR 后续 push 也能重跑 review。

安全边界

  • 本 workflow 不 checkout PR 代码不执行 PR 里的任何脚本,pr-agent 仅通过 GitHub API 读 diff → 安全。
  • 底线:未来不要在这个文件里加 actions/checkout 去 checkout PR head 并执行任何命令,否则 pull_request_target + 执行不受信代码 = 经典 pwn request 漏洞。
  • ci.yml 仍用普通 pull_request(read-only token、无 secrets),fork 代码在它里面跑测试是安全的,不受此改动影响。

验证

合并后让 genni613 在 #18 上 push 一次(或关了重开),应能看到 pr-agent 正常评论。

@TuYv TuYv requested a review from genni613 April 17, 2026 04:08
@genni613 genni613 merged commit a6e68bd into master Apr 17, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants