尝试使用Github Action自动更新submodule¶
约 472 个字 • 46 行代码
由于之前有在一个仓库中添加submodule,而如果submodule更新了,父仓库还需要在本地将submodule同步,然后在commit和push。觉得很麻烦,于是搜索有没有能自动化完成这些操作的办法,发现了这个帖子
最高赞回答是Artur A的回答,提到的方法是,在父仓库中创建一个workflow,可以更新所有的submodule并push,再在submodule中创建另一个workflow,它在submodule被推送时去触发父仓库中的workflow。
但是,这两个workflow需要共同使用一个CI_TOKEN
,这个CI_TOKEN
需要有对父仓库的读写权限和对submodule的读权限,
Quote
...
where
- CI_TOKEN is a security token variable in GitHub that has 'Read-Write' access to the parent repository and 'Read' access to submodule repositories.
我本来以为,这个CI_TOKEN
和GITHUB_TOKEN
一样是不需要手动设置的,折腾了半天之后发现它是需要去自己设置的。
所以最后也没有找到什么比较好的其他的方法,就放弃了尝试。
但是将Artur A的回答中,父仓库中的那个workflow稍加修改,可以实现半自动化的更新所有submodule的workflow(需要手动触发,当然也可以设置成定时触发,那某种程度上也可以算是实现自动化了(0.75自动化))
测试了一下,可以成功运行
值得注意的是,GitHub应该是默认会自动过滤掉由Actions触发的push事件,防止无限循环,因而如果仓库中有push触发的自动部署的workflow,在submodules-sync.yml
更新了submodule之后,不会被触发。
解决方法是,在自动部署的workflow中添加监听更新submodule的workflow完成的配置,大致如下:
on:
workflow_run:
workflows: ["Submodules Sync"] # 必须与目标 Workflow 的 name 完全一致
branches: [main]
types:
- completed # 监听目标 Workflow 完成(无论成功或失败)
最后更新:
2025-04-01
创建日期: 2025-03-31
创建日期: 2025-03-31