如何定时创建GitHub PR更新子模块至main分支最新提交并添加审核人
实现自动更新Git子模块并创建带指定审核人的GitHub PR
这完全可行,核心可以借助GitHub Actions实现定期触发、子模块更新、PR创建的全流程自动化,以下是具体实现方案:
核心实现思路
通过GitHub Workflow定期触发任务,完成以下步骤:
- 拉取主仓库及所有子模块代码
- 将每个子模块切换到
main分支并拉取最新提交 - 检查子模块是否有版本变更,有变更则创建新分支并提交
- 使用GitHub CLI创建Pull Request,同时指定审核人
具体实现步骤
1. 创建GitHub Workflow配置文件
在你的仓库根目录下创建.github/workflows/update-submodules.yml文件,内容如下:
name: 更新子模块并创建PR on: schedule: - cron: '0 0 * * 0' # 每周日凌晨0点执行,可根据需求调整cron表达式 workflow_dispatch: # 允许手动触发任务 permissions: contents: write # 允许推送分支 pull-requests: write # 允许创建PR jobs: update-submodules: runs-on: ubuntu-latest steps: - name: 拉取仓库代码 uses: actions/checkout@v4 with: submodules: true fetch-depth: 0 - name: 将子模块更新至main分支最新版本 run: | # 遍历所有子模块,切换到main分支并拉取最新代码 git submodule foreach git checkout main git submodule foreach git pull origin main - name: 检查是否有子模块变更 id: check_changes run: | # 如果有变更,输出has_changes=true git diff --quiet || echo "has_changes=true" >> $GITHUB_OUTPUT - name: 创建新分支并提交变更 if: steps.check_changes.outputs.has_changes == 'true' run: | # 生成带时间戳的分支名,避免冲突 BRANCH_NAME="update-submodules-$(date +%Y%m%d-%H%M%S)" git checkout -b $BRANCH_NAME # 提交子模块版本变更 git add .gitmodules */.gitmodules git commit -m "自动更新所有子模块至main分支最新版本" git push origin $BRANCH_NAME # 将分支名存入环境变量,供后续创建PR使用 echo "branch_name=$BRANCH_NAME" >> $GITHUB_ENV - name: 创建PR并指定审核人 if: steps.check_changes.outputs.has_changes == 'true' run: | gh pr create \ --title "自动更新子模块至main分支最新版本" \ --body "此PR为自动触发,已将所有Git子模块更新至各自main分支的最新提交。" \ --head ${{ env.branch_name }} \ --base main \ --reviewer 用户名1,用户名2 # 替换为你需要指定的审核人GitHub用户名 env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
2. 关键配置说明
- 触发时机:
schedule字段使用cron表达式设置定期执行频率,workflow_dispatch允许手动触发任务用于测试。 - 权限设置:必须配置
contents: write和pull-requests: write,确保Workflow有推送分支和创建PR的权限。 - 子模块分支适配:如果你的子模块默认分支不是
main,需要将git checkout main替换为对应的分支名(如master)。 - 审核人指定:在
--reviewer后填写逗号分隔的GitHub用户名,即可自动添加这些用户为PR审核人。
3. 注意事项
- 若子模块嵌套在特定目录下,需要调整
git add的路径,确保所有子模块的版本变更都被提交。 - 部分组织仓库可能需要在仓库设置中开启Workflow的权限,确保
GITHUB_TOKEN拥有足够的操作权限。 - 如果需要为每个子模块单独创建PR,可以修改脚本逻辑,遍历子模块逐个处理提交和PR创建。
内容的提问来源于stack exchange,提问作者srip
相关产品推荐
相关产品推荐

