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

如何在PR中所有变更文件均为.csv时触发GitHub Workflow

实现PR仅在所有变更文件为.csv时触发Workflow

GitHub自带的paths触发规则只能做到「只要有指定格式文件就触发」或者「排除某些文件」,没法直接判断所有变更文件都是.csv。要实现你要的效果,得分两步来:

  1. 先让Workflow在PR有变更时触发(也可以先限定至少包含.csv文件,减少没必要的运行)
  2. 在Workflow的任务里加个检查步骤,确认所有变更文件都是.csv,不符合就直接终止流程

完整配置示例

name: Check All Changed Files Are CSV
on:
  pull_request:
    types: [opened, synchronize, reopened]
    # 可选:先过滤出带.csv的PR,避免完全无关的PR跑流程
    paths:
      - '**.csv'

jobs:
  check-csv-only:
    runs-on: ubuntu-latest
    steps:
      - name: 拉取代码
        uses: actions/checkout@v4
        with:
          fetch-depth: 0 # 必须拉全历史才能对比出变更文件

      - name: 获取所有变更文件
        id: changed-files
        uses: tj-actions/changed-files@v41
        with:
          separator: ' '

      - name: 验证所有文件都是.csv格式
        run: |
          for file in ${{ steps.changed-files.outputs.all_changed_files }}; do
            if [[ "$file" != *.csv ]]; then
              echo "错误:发现非CSV文件 - $file"
              exit 1
            fi
          done
          echo "所有变更文件都是CSV格式"

配置说明

  • 触发时机:针对PR的创建、代码同步、重开这几种事件,可选通过paths先筛选出包含.csv的PR,减少无意义的Workflow运行。
  • 变更文件检查:用tj-actions/changed-files工具快速获取PR里所有变更的文件,然后通过shell循环逐个检查后缀,只要碰到非.csv的文件就报错退出,终止后续流程。
  • 注意点:fetch-depth: 0一定要设置,不然Git拉取的代码不全,没法对比出变更的文件。

要是不想用第三方工具,也可以用原生Git命令来获取变更文件,替换上面的「获取所有变更文件」和「验证」步骤就行:

- name: 用Git获取变更文件
  run: |
    # 对比PR目标分支和当前分支的差异文件
    CHANGED_FILES=$(git diff --name-only origin/${{ github.base_ref }}...origin/${{ github.head_ref }})
    echo "changed_files=$CHANGED_FILES" >> $GITHUB_ENV

- name: 验证所有文件都是.csv格式
  run: |
    for file in $CHANGED_FILES; do
      if [[ "$file" != *.csv ]]; then
        echo "错误:发现非CSV文件 - $file"
        exit 1
      fi
    done
    echo "所有变更文件都是CSV格式"

内容的提问来源于stack exchange,提问作者Peter T. Walker

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 18:06:27