基于更新路径的有条件作业和步骤 [英] Conditional jobs and steps based on updated paths

查看:11
本文介绍了基于更新路径的有条件作业和步骤的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我们正在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

所述

我想知道的是,我是否/如何才能在jobstep级别完成类似的任务。我发现作业支持基于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 diffgithub.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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆