@stachel的解决方案在矩阵为空时无效。在这种情况下,GitHub遗憾地返回
result: failure
。当您动态生成测试用例时,可能会出现空矩阵,但没有匹配的情况。
为了解决这个问题,您需要添加一个额外的输出来区分“失败因为没有作业”和“矩阵作业失败”。
如果您有一个
test
矩阵,请在其上添加一个自定义的
did_run
输出:
例如:
test:
runs-on: "ubuntu-latest"
needs:
- detect-packages
outputs:
did_run: ${{ steps.did_run.outputs.did_run }}
strategy:
fail-fast: false
matrix:
packages: ${{ fromJson(needs.detect-packages.outputs.packages) }}
steps:
- name: Setting Did Run flag to true
id: did_run
if: always()
run: echo "did_run=true" >> $GITHUB_OUTPUT
关键是将
did_run
添加到outputs部分,并设置相应的步骤来设置输出。
然后,最后,您可以使用jq解析
needs.test
输出来生成汇总结果。
test-rollup:
runs-on: "ubuntu-latest"
needs: test
if: always()
steps:
- name: Ensure tests succeeded
run: echo '${{ toJson(needs.test) }}' | jq '.result == "success" or (.result == "failure" and .outputs.did_run == null)'
调试输出
由于反复运行 GitHub Actions 来查看返回的输出并不有趣,因此以下是在以下情况下needs.test
的输出
矩阵有测试,所有测试都成功运行
{
"result": "success",
"outputs": {
"did_run": "true"
}
}
矩阵有测试,但至少有一个测试失败。
{
"result": "failure",
"outputs": {
"did_run": "true"
}
}
Matrix没有任何测试
{
"result": "failure",
"outputs": {}
}