PR/MR 流水线安全
本文档介绍 pull_request 和 pull_request_target 两种触发事件的安全差异,帮助选择正确的 Fork PR 流水线配置。
Pull Request(PR)流水线需要执行来自外部贡献者(fork 仓库)的代码,存在安全风险。需要理解 pull_request 与 pull_request_target 两种触发事件的安全差异,并选择合适的配置。
配置说明
pull_request vs pull_request_target 安全差异
| 维度 | pull_request | pull_request_target |
|---|---|---|
| 执行代码来源 | fork 仓库的代码(PR 提交) | 目标仓库的代码(主分支上的 workflow 版本) |
| ATOMGIT_TOKEN 权限 | 仅 read 权限(安全限制) | 按 permissions 声明的完整权限 |
| Secrets 可访问性 | fork 来源不可访问项目 Secret | 可访问项目 Secret |
| workflow 文件版本 | 使用 fork 中的 workflow 版本 | 使用目标分支中的 workflow 版本 |
| 适用 场景 | 安全的代码检查、lint、构建 | 需要写权限的部署、发布、评论 |
| checkout默认代码来源 | PR预合并分支 | base分支 |
pull_request 事件详解
# .gitcode/workflows/pr-check.yml
on:
pull_request:
branches: [main]
permissions:
repository: read # pull_request 下 ATOMGIT_TOKEN 仅 read
pr: read # 不可写操作 PR
stages:
check:
name: 代码检查
jobs:
lint:
name: lint-and-test
runs-on: [ubuntu-latest, x64, small]
steps:
- name: Run lint
run: npm run lint
- name: Run npm
run: npm test
安全机制:
- 代码来源:执行 fork 仓库 PR 分支上的代码,包括 PR 提交者修改的 workflow 文件。
- 权限限制