如何为仓库各模块动态执行GitHub Action 无需重复复制配置?
解决方案
完全可以通过GitHub Actions的内置特性实现,以下是两种符合你需求的实现方案:
方案1:无需罗列模块名,自动识别目录执行
通过「动态生成矩阵」的方式实现,新增模块时无需修改任何工作流配置:
name: 模块统一 lint 检查 on: [push, pull_request] jobs: # 第一步:扫描目录生成模块矩阵 generate-matrix: runs-on: ubuntu-latest outputs: modules: ${{ steps.set-matrix.outputs.modules }} steps: - uses: actions/checkout@v4 - id: set-matrix run: | # 可自行调整目录筛选规则,示例为匹配根目录下所有以module开头的一级文件夹 MODULES=$(find . -maxdepth 1 -type d -name "module*" | sed 's|./||' | jq -R -s -c 'split("\n")[:-1]') echo "modules=${MODULES}" >> $GITHUB_OUTPUT # 第二步:根据矩阵并行执行每个模块的检查 run-lint: needs: generate-matrix runs-on: ubuntu-latest strategy: matrix: module: ${{ fromJson(needs.generate-matrix.outputs.modules) }} steps: - uses: actions/checkout@v4 - name: 执行${{ matrix.module }}模块检查 uses: golangci/golangci-lint-action@v6 with: working-directory: ${{ matrix.module }}
方案2:仅定义一次模块列表,多工作流复用
如果不需要自动识别新模块,希望固定维护模块列表,可以用以下两种方式实现一次配置多处复用:
- 方式一:将模块列表存入仓库的「Actions 变量」中。在仓库设置的 Secrets and variables > Actions > Variables 页面新建变量,命名为
MODULE_LIST,值为["module1","module2","module3"],所有工作流可以直接通过${{ vars.MODULE_LIST }}引用这个列表,修改时仅需修改变量值即可全局生效。 - 方式二:封装可复用工作流。将模块检查的逻辑封装为独立的可复用工作流,所有需要执行检查的工作流直接调用即可,模块列表仅需在可复用工作流中维护一次。
内容的提问来源于stack exchange,提问作者slsy
相关产品推荐
相关产品推荐

