如何 github 操作按文件夹动态并行化测试?

How to github action parallelize tests dynamically by folder?

我想 运行 通过对每个 PR 的 Github 操作进行测试。

我的 Github 存储库结构是

根目录

在这种情况下 我只想测试 Java 个模块。

我不想将存储库创建为多模块项目

原因是要和其他语言结合使用,所以仓库看起来不太像基于Java。

无论如何,运行 Java 子目录测试

我是否必须将那个目录写入工作流文件才能运行呢?

是否可以动态查找和执行基于 Java 的目录?

(基于Java的目录可能以“Java-”为前缀)

我用 GitHub 动作流程设置矩阵 目录描述已测试。

我想在 Github 操作中动态目录测试

您可以在第一个作业中为矩阵动态创建输入,然后将其用作第二个作业中矩阵的输入。

对于所有测试目录都在目录调用 tests 中的项目,您可以像这样收集目录:

collect_dirs:
  runs-on: ubuntu-latest
  outputs:
    dirs: ${{ steps.dirs.outputs.dirs }}
  steps:
    - uses: actions/checkout@v2
    - id: dirs
      run: echo "::set-output name=dirs::$(ls -d tests/*/ | jq --raw-input --slurp --compact-output 'split("\n")[:-1]')"

这里棘手的部分是如何构造 dirs 输出:

  • 首先我们列出tests/
  • 目录下的所有目录
  • 其次,jq 将输出格式化为 JSON 数组。例如,如果目录包含子目录 abc,则输出设置为 ["a","b","c"].

在第二份工作中,您可以使用基于该输出的矩阵:

run_tests:
  needs: collect_dirs
  runs-on: ubuntu-latest
  strategy:
    matrix:
      dir: ${{ fromJson(needs.collect_dirs.outputs.dirs) }}
  steps:
    - run: echo ${{ matrix.dir }}