如何在PR中所有变更文件均为.csv时触发GitHub Workflow
实现PR仅在所有变更文件为.csv时触发Workflow
GitHub自带的paths触发规则只能做到「只要有指定格式文件就触发」或者「排除某些文件」,没法直接判断所有变更文件都是.csv。要实现你要的效果,得分两步来:
- 先让Workflow在PR有变更时触发(也可以先限定至少包含.csv文件,减少没必要的运行)
- 在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
相关产品推荐
相关产品推荐

