You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何定时创建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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 11:31:39