使用dorny/paths-filter无变更却返回true的问题求助
问题分析与解决方案
核心问题原因
- Checkout历史不足:
actions/checkout@v3默认仅拉取最新1次提交(fetch-depth: 1),导致dorny/paths-filter无法获取对比所需的历史提交,进而误判变更存在,返回true。 - 默认对比逻辑不符预期:该Action针对
push事件默认对比当前提交与前一次提交,针对pull_request事件默认对比PR的head与base分支,若测试场景不匹配此逻辑会出现结果偏差。 - 输出映射笔误:工作流输出中
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
相关产品推荐
相关产品推荐

