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

如何为仓库各模块动态执行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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 13:15:00