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

使用dorny/paths-filter无变更却返回true的问题求助

问题分析与解决方案

核心问题原因

  1. Checkout历史不足:actions/checkout@v3默认仅拉取最新1次提交(fetch-depth: 1),导致dorny/paths-filter无法获取对比所需的历史提交,进而误判变更存在,返回true。
  2. 默认对比逻辑不符预期:该Action针对push事件默认对比当前提交与前一次提交,针对pull_request事件默认对比PR的head与base分支,若测试场景不匹配此逻辑会出现结果偏差。
  3. 输出映射笔误:工作流输出中ecr对应了不存在的steps.changes.outputs.infra,导致该输出结果异常。

解决方案

1. 修复Checkout历史缺失问题

在actions/checkout步骤中添加fetch-depth参数,拉取足够的提交历史以支持变更对比:

- uses: actions/checkout@v3
  with:
    fetch-depth: 2 # 拉取最近两次提交,满足当前与上一次提交的对比需求
    # 若需全量历史可设置为 fetch-depth: 0

2. 自定义对比基准(指定对比最新提交或特定分支)

通过dorny/paths-filter的base-ref和head-ref参数,精确指定对比的两个提交/分支:

  • 对比当前提交与上一次提交(最新的两个提交):
    - uses: dorny/paths-filter@v2
      id: changes
      with:
        filters: |
          backend:
            - 'scraper_backend/**'
            - 'app.py'
            - 'tagging.sh'
          ecr:
            - 'terraform_ecr/**'
          lambda:
            - 'terraform_lambda/**'
        base-ref: HEAD^ # 基准提交:上一次提交
        head-ref: HEAD  # 目标提交:当前最新提交
    
  • 对比当前分支与main分支:
    - uses: dorny/paths-filter@v2
      id: changes
      with:
        filters: |
          backend:
            - 'scraper_backend/**'
            - 'app.py'
            - 'tagging.sh'
          ecr:
            - 'terraform_ecr/**'
          lambda:
            - 'terraform_lambda/**'
        base-ref: main  # 基准分支:main
        head-ref: HEAD  # 目标提交:当前分支最新提交
    

3. 修正输出映射笔误

将ecr的输出映射修正为对应filter中定义的ecr键:

outputs:
  backend: ${{ steps.changes.outputs.backend }}
  ecr: ${{ steps.changes.outputs.ecr }} # 修正为对应filter的ecr键
  lambda: ${{ steps.changes.outputs.lambda }}

完整修正后的工作流配置

name: Composite Test
on: [pull_request, push]
jobs:
  changes:
    runs-on: ubuntu-latest
    outputs:
      backend: ${{ steps.changes.outputs.backend }}
      ecr: ${{ steps.changes.outputs.ecr }}
      lambda: ${{ steps.changes.outputs.lambda }}
    steps:
    - uses: actions/checkout@v3
      with:
        fetch-depth: 2 # 确保拉取足够历史用于对比
    - uses: dorny/paths-filter@v2
      id: changes
      with:
        filters: |
          backend:
            - 'scraper_backend/**'
            - 'app.py'
            - 'tagging.sh'
          ecr:
            - 'terraform_ecr/**'
          lambda:
            - 'terraform_lambda/**'
      # 如需自定义对比基准,取消以下两行注释
      # base-ref: HEAD^
      # head-ref: HEAD
  test:
    needs: changes
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - run: echo ${{ needs.changes.outputs.backend }}
      - run: echo ${{ needs.changes.outputs.ecr }}
      - run: echo ${{ needs.changes.outputs.lambda }}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 07:30:33