如何 github 操作按文件夹动态并行化测试?
How to github action parallelize tests dynamically by folder?
我想 运行 通过对每个 PR 的 Github 操作进行测试。
我的 Github 存储库结构是
根目录
- 子目录
- 子目录
- Java 模块目录
- 子目录
- 子目录
- Java 模块目录
- 子目录
- 子目录
- Java 模块目录
- ...
在这种情况下
我只想测试 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 数组。例如,如果目录包含子目录
a
、b
和 c
,则输出设置为 ["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 }}
我想 运行 通过对每个 PR 的 Github 操作进行测试。
我的 Github 存储库结构是
根目录
- 子目录
- 子目录
- Java 模块目录
- 子目录
- 子目录
- 子目录
- Java 模块目录
- 子目录
- 子目录
- 子目录
- Java 模块目录
- 子目录
- ...
在这种情况下 我只想测试 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 数组。例如,如果目录包含子目录
a
、b
和c
,则输出设置为["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 }}