如何在分支特定目录有变更时触发GitHub Actions
解决方案
原来的paths触发规则只检查当前提交的变更文件,所以后续提交其他目录的文件时,不会触发测试。要实现「只要分支里存在lib-2的变更(无论来自哪个提交)就运行测试」,得换个思路:每次push都触发Actions,然后在job里判断当前分支是否包含lib-2的变更,再决定是否执行测试。
具体配置如下:
on: push jobs: lib2-test: runs-on: ubuntu-latest steps: - name: 拉取完整代码历史 uses: actions/checkout@v4 with: fetch-depth: 0 # 必须拉取所有历史,才能对比分支间的差异 - name: 检查分支是否包含lib-2的变更 id: check_lib2_changes run: | # 对比当前分支与main分支的差异,筛选是否涉及libs/lib-2目录 if git diff --name-only origin/main...HEAD | grep -q "^libs/lib-2/"; then echo "has_changes=true" >> $GITHUB_OUTPUT else echo "has_changes=false" >> $GITHUB_OUTPUT fi - name: 执行lib-2测试 if: steps.check_lib2_changes.outputs.has_changes == 'true' run: | # 替换成你的实际测试命令 echo "开始运行lib-2测试..." # 示例:npm run test -- libs/lib-2
关键说明:
- 去掉了
paths限制,每次push都会触发这个Action; fetch-depth: 0是必须的,否则Git只能拿到当前提交,无法对比分支间的完整差异;- 通过
git diff origin/main...HEAD对比当前分支与main分支的所有变更,只要涉及lib-2目录,就执行测试——哪怕最新提交是lib-1的文件,只要分支里还留着lib-2的未合并变更,测试就会跑,避免之前测试失败后直接通过的问题。
如果你的默认分支不是main,把origin/main换成你的默认分支名(比如origin/master)即可。
内容的提问来源于stack exchange,提问作者Dzmitry Vasilevsky
相关产品推荐
相关产品推荐

