如何在GitHub Actions脚本中传递fork仓库pull_request的检出信息
解决方案
步骤1:提取Fork PR对应的关键信息
GitHub针对pull_request事件内置了上下文变量,可以直接获取你需要的Fork仓库地址和对应提交SHA:
- Fork仓库克隆地址:
${{ github.event.pull_request.head.repo.clone_url }} - PR对应的提交SHA:
${{ github.event.pull_request.head.sha }} - 目标分支(你要合并到的本仓库分支,默认是main):
${{ github.event.pull_request.base.ref }}
注意:pull_request事件触发时默认的GITHUB_SHA是GitHub自动模拟合并后的临时提交SHA,不存在于任何分支,不能直接用来拉取代码
步骤2:修改Workflow配置传递参数
把上面的变量作为环境变量传入执行步骤,同时追加到你的Python启动参数里,修改后的配置如下:
on: pull_request jobs: pw: runs-on: [self-hosted, pwp] strategy: fail-fast: false max-parallel: 2 matrix: include: - runname: FMS with intel 18 runscript: python3 /home/pw/storage/pw_api_python/FMStestStartClusters.py cluster - runname: FMS with intel 2021 container runscript: python3 /home/pw/storage/pw_api_python/FMSintel21StartClusters.py cluster_two steps: - name: FMS make check env: RUNNAME: ${{ matrix.runname }} RUNSCRIPT: ${{ matrix.runscript }} FORK_REPO_URL: ${{ github.event.pull_request.head.repo.clone_url }} PR_COMMIT_SHA: ${{ github.event.pull_request.head.sha }} TARGET_BRANCH: ${{ github.event.pull_request.base.ref }} run: $RUNSCRIPT $FORK_REPO_URL $PR_COMMIT_SHA $TARGET_BRANCH
步骤3:调整脚本逻辑实现合并
- 首先在Python脚本里新增三个入参接收传入的Fork仓库地址、PR提交SHA、目标分支,再把这三个参数传给下游的Bash脚本
- 在Bash脚本里替换你的代码拉取逻辑为以下内容:
# 克隆本仓库指定目标分支 git clone <你的本仓库FMS.git地址> --branch $TARGET_BRANCH --single-branch FMS && cd FMS # 拉取Fork仓库的对应提交 git pull $FORK_REPO_URL $PR_COMMIT_SHA --no-rebase
注意事项
- 如果涉及私有仓库,你可以把
GITHUB_TOKEN拼到克隆地址里,地址格式为https://x-access-token:${{ secrets.GITHUB_TOKEN }}@github.com/用户名/仓库名.git,需要确保Workflow有读取PR的权限 - 若要避免合并冲突导致流程异常,可以在pull命令前加
git config user.email "action@github.com"和git config user.name "GitHub Action"配置默认提交身份 - 如果不需要保留合并记录,也可以用
git fetch $FORK_REPO_URL $PR_COMMIT_SHA && git cherry-pick FETCH_HEAD的逻辑替代pull
内容的提问来源于stack exchange,提问作者byrdman1982
相关产品推荐
相关产品推荐

