You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在分支特定目录有变更时触发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

关键说明:

  1. 去掉了paths限制,每次push都会触发这个Action;
  2. fetch-depth: 0是必须的,否则Git只能拿到当前提交,无法对比分支间的完整差异;
  3. 通过git diff origin/main...HEAD对比当前分支与main分支的所有变更,只要涉及lib-2目录,就执行测试——哪怕最新提交是lib-1的文件,只要分支里还留着lib-2的未合并变更,测试就会跑,避免之前测试失败后直接通过的问题。

如果你的默认分支不是main,把origin/main换成你的默认分支名(比如origin/master)即可。

内容的提问来源于stack exchange,提问作者Dzmitry Vasilevsky

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 18:25:29