Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Maven 基于更新路径的条件作业和步骤_Maven_Github Actions - Fatal编程技术网

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

Maven 基于更新路径的条件作业和步骤,maven,github-actions,Maven,Github Actions,我们正在使用GitHub操作进行项目的多模块Maven CI构建 我们有: 我们希望在每个拉请求上运行的最小测试集;及 我们只希望在给定模块(或其依赖项)更新时运行的一组综合测试 我发现,通过定义多个工作流并使用.pull_request.paths上的内置属性,我可以完成类似的任务,如所述: 我想知道的是,我是否/如何能够在工作或步骤级别完成类似的工作。我发现作业支持基于的条件执行,但我不知道是否有任何东西可以帮助获得类似于.pull\u request.path功能的行为 假设没有,有人

我们正在使用GitHub操作进行项目的多模块Maven CI构建

我们有:

  • 我们希望在每个拉请求上运行的最小测试集;及
  • 我们只希望在给定模块(或其依赖项)更新时运行的一组综合测试
我发现,通过定义多个工作流并使用.pull_request.paths上的内置
属性,我可以完成类似的任务,如所述:

我想知道的是,我是否/如何能够在
工作
步骤
级别完成类似的工作。我发现作业支持基于的条件执行,但我不知道是否有任何东西可以帮助获得类似于.pull\u request.path
功能的行为


假设没有,有人找到了一个行动来帮助这一点吗?或者有人可以告诉我在.pull\u request.path上的
功能的实现?

社区论坛上的这篇文章可能会有所帮助。

那里的原始海报也有类似的问题,他们创建了以下操作来确定路径列表是否有修改。我不确定这是否适用于
on:pull_request
,但您可以试试看

路径观察者操作
存储库中的示例:

on: [push]

jobs:
  job:
    runs-on: ubuntu-latest
    steps:
      - id: modified
        uses: pheel/path-watcher-action@v1
        with:
          github_token: ${{ secrets.GITHUB_TOKEN }}
          paths: 'dir1/**/*,dir2/**/*'
      - if: steps.modified.outputs.modified
        run: echo "Hey some change happened in one of your watched paths!"

通过使用
git diff
github.base\u ref
分支与最新的PR提交(
${github\u SHA}
)进行区分,并过滤输出以选择路径,我成功地创建了一个执行所需操作的步骤。问题是:

  • 我需要使用
    github['base\u ref']
    语法(可能是因为下划线?)
  • 克隆的回购协议中不存在base_ref分支,因此我需要在其前面加上
    origin/

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

谢谢!我还设法在不引入自定义操作的情况下实现了一些功能,并将为此编写一个单独的答案。最后,我在上找到了
netlify/actions/diff includes
操作,但没有尝试,因为我已经找到了适合我的东西。
    - 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