基于更新路径的有条件作业和步骤 [英] Conditional jobs and steps based on updated paths
问题描述
我们正在https://github.com/ibm/fhir将GitHub操作用于我们项目的多模块Maven CI生成。
我们有:
- 我们希望对每个拉取请求运行的最小测试集;以及
- 我们希望仅在给定模块(或其依赖项)更新后才运行的一组综合测试
我发现我可以通过定义多个工作流并使用内置的on.pull_request.paths
属性来完成类似的工作,如https://help.github.com/en/actions/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#onpushpull_requestpaths
我想知道的是,我是否/如何才能在job
或step
级别完成类似的任务。我发现作业支持基于https://help.github.com/en/actions/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#jobsjob_idif的条件执行,但我不知道是否有任何东西可以帮助获得类似于on.pull_request.paths
功能的行为。
假设没有,有没有人找到行动来帮助解决这一问题?或者也许有人可以给我介绍一下on.pull_request.paths
功能的实现?
推荐答案
我设法创建了一个步骤,通过使用git diff
将github.base_ref
分支与最新的PR提交(${GITHUB_SHA}
)进行比较,并过滤输出以选择路径,从而实现了我所需的功能。问题是:
- 我需要使用
github['base_ref']
语法(可能是因为下划线?) - 克隆的repo中不存在base_ref分支,因此我需要在它前面加上
origin/
- name: Conditional test
env:
BASE: origin/${{ github['base_ref'] }}
run: |
paths=(
path1
path2/src
path3/src/main
)
if [ -n "$(git --no-pager diff --name-only ${BASE} ${GITHUB_SHA} -- ${paths[@]})" ]; then
echo "Changes affect module, running ALL"
mvn -B test -P all-tests --no-transfer-progress
else
echo "No changes affect module, running MINIMAL"
mvn -B test -P minimal-tests --no-transfer-progress
fi
我还没有足够的GitHub操作经验,不知道将这种逻辑封装在自定义操作中是否更好,但现在我只想使用它,以避免额外的外部依赖。
这篇关于基于更新路径的有条件作业和步骤的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!