如何通过Github Actions强制所有子模块存在README.md?
实现GitHub Actions检查所有子模块的README.md存在性
因为现成的andstor/file-existence-action无法满足「检查所有子模块都必须存在README.md」的要求,你可以用自定义Bash脚本结合GitHub Actions来实现,具体配置如下:
完整Workflow配置
name: Check Submodule READMEs on: [push] jobs: verify-readmes: runs-on: ubuntu-latest steps: - name: 拉取代码及所有子模块 uses: actions/checkout@v4 with: submodules: recursive # 若无需嵌套子模块,可替换为true - name: 检查所有子模块是否包含README.md run: | # 遍历仓库中所有子模块的相对路径 git submodule foreach --quiet 'echo $path' | while read -r sub_dir; do # 检查目标路径下是否存在README.md if [ ! -f "${sub_dir}/README.md" ]; then echo "❌ 错误:子模块 ${sub_dir} 缺失README.md" exit 1 fi done echo "✅ 所有子模块均包含README.md"
关键逻辑说明
git submodule foreach --quiet 'echo $path':输出所有子模块的相对路径,避免打印多余的日志信息- 循环遍历每个子模块路径,通过
[ ! -f ]判断文件是否存在,若不存在则直接退出并返回错误码1,触发Action失败 - 如果需要兼容不区分大小写的README文件名(如
Readme.md、readme.md),可以在脚本开头添加shopt -s nocaseglob开启不区分大小写匹配
内容的提问来源于stack exchange,提问作者John F
相关产品推荐
相关产品推荐

