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

GitHub Actions按特定文件变更触发/跳过步骤配置失效求助

GitHub Actions 路径过滤失效问题修复

问题根源分析

你的流水线出现所有步骤都执行的情况,主要由以下几个原因导致:

  1. 重复且不完整的代码检出:连续使用两次actions/checkout,且未配置完整历史拉取。GitHub Actions 默认只拉取最新一次提交(fetch-depth:1),dorny/paths-filter需要对比历史提交才能检测路径变更,缺少完整历史会导致过滤逻辑失效。

  2. 路径匹配错误:配置中写的路径(如foo/js/bc-global.js)与实际隐藏文件名(.bc-global.js)不符,少了开头的.,导致路径过滤规则无法正确匹配文件变更。

  3. 自动提交范围过宽:git-auto-commit-action的file_pattern设为*.js会提交所有JS文件,包括未修改的项目产物,可能引发不必要的提交。

修正后的完整配置

name: Upload to S3

on:
  push:
    branches:
      - test-s3
    paths:
      - "foo/js/.bc-global.js"
      - "foo/js/scripts/**.js"
      - "foo2/js/.lc-global.js"
      - "foo2/js/scripts/**.js"

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code with full history
        uses: actions/checkout@v4
        with:
          fetch-depth: 0  # 拉取完整历史,确保路径过滤能对比变更

      - uses: dorny/paths-filter@v2
        id: changes
        with:
          filters: |
            foo:
              - 'foo/js/.bc-global.js'
              - 'foo/js/scripts/**.js'
            foo2:
              - 'foo2/js/.lc-global.js'
              - 'foo2/js/scripts/**.js'

      - name: Install Node.js
        uses: actions/setup-node@v3
        with:
          node-version: 16.13.0

      - name: Install uglify-js
        run: npm install uglify-js -g

      # 按项目执行压缩步骤
      - name: Minify script files for foo
        if: steps.changes.outputs.foo == 'true'
        run: uglifyjs foo/js/scripts/**.js -o foo/js/live/scripts-bundle.js
      - name: Minify global file for foo
        if: steps.changes.outputs.foo == 'true'
        run: uglifyjs foo/js/.bc-global.js -o foo/js/live/global-bundle.js

      - name: Minify script files for foo2
        if: steps.changes.outputs.foo2 == 'true'
        run: uglifyjs foo2/js/scripts/**.js -o foo2/js/live/scripts-bundle.js
      - name: Minify global file for foo2
        if: steps.changes.outputs.foo2 == 'true'
        run: uglifyjs foo2/js/.lc-global.js -o foo2/js/live/global-bundle.js

      # 仅提交变更的项目产物
      - name: Auto commit minified files
        uses: stefanzweifel/git-auto-commit-action@v4
        with:
          file_pattern: "foo/js/live/*.js foo2/js/live/*.js"
          commit_message: "Github Action: Auto Minified JS files"
          branch: ${{ github.ref }}

      # 部署foo项目(仅当foo路径有变更时执行)
      - name: Deploy to S3 for foo
        if: steps.changes.outputs.foo == 'true'
        uses: jakejarvis/s3-sync-action@master
        with:
          args: --follow-symlinks --cache-control max-age=600
        env:
          AWS_S3_BUCKET: ${{ secrets.AWS_BUCKET_NAME }}
          AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
          AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          AWS_REGION: ${{ secrets.AWS_REGION }}
          SOURCE_DIR: "foo/js/live"
          DEST_DIR: "foo/pages/assets/js/test/"

      # 部署foo2项目(仅当foo2路径有变更时执行)
      - name: Deploy to S3 for foo2
        if: steps.changes.outputs.foo2 == 'true'
        uses: jakejarvis/s3-sync-action@master
        with:
          args: --follow-symlinks --cache-control max-age=600
        env:
          AWS_S3_BUCKET: ${{ secrets.AWS_BUCKET_NAME }}
          AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
          AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          AWS_REGION: ${{ secrets.AWS_REGION }}
          SOURCE_DIR: "foo2/js/live"
          DEST_DIR: "foo2/pages/assets/js/test/"

关键修改说明

  1. 修复代码检出:移除重复的actions/checkout,改用最新的v4版本并设置fetch-depth:0,确保拉取完整Git历史,让路径过滤能正确对比前后提交的文件变更。

  2. 修正路径匹配:将配置中所有文件路径补全开头的.(如foo/js/.bc-global.js),保证与实际隐藏文件名一致,让过滤规则能准确匹配变更。

  3. 缩小自动提交范围:把file_pattern改为仅匹配两个项目的live目录下的JS文件,避免提交未修改的文件。

  4. 清理冗余配置:移除了不必要的registry-url配置(仅当发布npm包时需要),简化配置结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 16:21:01