如果分支中有特定目录的更新文件,则运行Github Actions。

5
文件结构:
apps
-- app-1
-- app-2
libs
-- lib-1
-- lib-2

我们有一些测试,只有在lib-2中的文件发生更改时才应该运行。 我已经尝试过了。

on:
  push:
    paths:
      - 'libs/lib-2/**'

但是它只在提交时推送了来自lib-2的文件时才运行测试,如果在此之后推送了其他文件,则不会运行。 假设lib-2的测试失败了,然后开发人员在下一个提交中提交了来自lib-1的文件,以前的更改就不会运行测试,github将认为检查成功。

是否有一种方法可以在分支中更改某个目录中的文件时运行操作,无论在哪个提交中都可以?


仅使用具有paths子类型的本机push触发器无法达到您想要的效果,该子类型仅检查最后一次提交。解决方法可能是仅使用push触发器(不使用子类型),然后在测试作业之前添加一个check作业,该作业将查看更改的文件(例如,使用此操作),并在更新了您想要的特定路径时触发第二个作业。 - GuiFalourd
1个回答

6

我根据@guifalourd的建议设计了一个解决方案。

name: 'UI-kit Tests'
on:
  pull_request:
    branches:
      - proto
      - develop
      - staging
      - master
jobs:
  filter-ui-kit:
    runs-on: ubuntu-latest
    name: Filter Ui kit
    steps:
      - uses: actions/checkout@v3
        with:
          fetch-depth: 0

      - name: Get changed files in the docs folder
        id: changed-files-specific
        uses: tj-actions/changed-files@v34
        with:
          files: libs/ui-kit/**

      - name: Run step if any file(s) in the docs folder change
        if: steps.changed-files-specific.outputs.any_changed == 'true'
        run: echo UI-kit is affected

      - name: Prevent from running
        if: steps.changed-files-specific.outputs.any_changed != 'true'
        run: exit 1
  test:
    timeout-minutes: 60
    runs-on: ubuntu-latest
    needs: [filter-ui-kit]
    steps:
      ... test actions goes there

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接