基于更新路径的条件作业和步骤

lms*_*ant 6 maven github-actions

我们使用 GitHub Actions 进行项目的多模块 Maven CI 构建(位于https://github.com/ibm/fhir )

我们有:

  • 我们希望对每个拉取请求运行的最小测试集;和
  • 一组全面的测试,我们希望仅在更新给定模块(或其依赖项)时运行

我发现我可以通过定义多个工作流程并使用内置on.pull_request.paths属性来完成类似的事情,如下所示: https ://help.github.com/en/actions/automating-your-workflow-with-github-actions/ 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

lms*_*ant 4

我设法创建了一个步骤,通过使用最新的 PR 提交 ( )git diff来区分分支并过滤输出以选择路径,从​​而完成我需要的操作。问题是:github.base_ref${GITHUB_SHA}

  • 我需要使用github['base_ref']语法(大概是由于下划线?)
  • 克隆的存储库中不存在 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
Run Code Online (Sandbox Code Playgroud)

我对 GitHub 操作没有足够的经验,不知道我们是否最好将这种逻辑封装在自定义操作中,但现在我只是要这样做以避免额外的外部依赖。