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

为何使用if & contain时GitHub Actions任务被跳过?

GitHub Workflow 单包测试条件失效问题解决

问题根源

你误解了github.event.pull_request.changed_files的字段含义——它是PR中变更文件的总数量(数字类型),并非变更文件的路径列表。用它判断是否包含特定路径字符串,逻辑永远不成立,所以所有PR的任务都会被跳过。

正确实现方式

方案1:用内置paths过滤(推荐)

GitHub Workflow支持直接用paths字段在job级别过滤,自动检测PR是否有目标路径下的文件变更,语法简洁且可靠:

jobs:
  test-front-end-customer:
    runs-on: ubuntu-latest
    # 直接通过paths指定需要监听的文件路径
    paths:
      - 'packages/front-end-customer/**'
    steps:
      - uses: actions/checkout@v4
      - run: yarn install
      - run: yarn workspace front-end-customer test

如果需要结合其他条件,也可以在if中使用paths()函数:

if: ${{ github.event_name == 'pull_request' && paths('packages/front-end-customer/**') }}

方案2:脚本获取变更文件判断(灵活场景)

如果需要更复杂的判断逻辑,比如排除某些子目录,可以用actions/github-script拉取PR的变更文件列表,再做自定义判断:

jobs:
  test-front-end-customer:
    runs-on: ubuntu-latest
    steps:
      - id: check-changes
        uses: actions/github-script@v7
        with:
          script: |
            const files = await github.rest.pulls.listFiles({
              owner: context.repo.owner,
              repo: context.repo.repo,
              pull_number: context.issue.number
            });
            // 判断是否有目标包下的文件变更
            return files.data.some(file => file.filename.startsWith('packages/front-end-customer/'));
          result-encoding: string
      - name: 执行测试任务
        if: steps.check-changes.outputs.result == 'true'
        run: |
          yarn install
          yarn workspace front-end-customer test

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 10:34:59