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

需求:实现GitHub Action检查文件变更,强制PR修改指定文件以通过CI

如何用GitHub Action强制PR中必须修改变更日志文件

以下是实现该需求的具体方案,直接在你的仓库中添加一个GitHub Action工作流即可:

1. 创建工作流文件

在仓库的.github/workflows目录下新建一个名为check-changelog.yml的文件,内容如下:

name: 检查变更日志是否修改

on:
  pull_request:
    types: [opened, synchronize, reopened]

jobs:
  check-changelog:
    runs-on: ubuntu-latest
    steps:
      - name: 拉取代码
        uses: actions/checkout@v4
        with:
          fetch-depth: 0 # 必须拉取完整历史才能对比分支差异

      - name: 检查CHANGELOG是否有变更
        run: |
          # 对比PR目标分支与源分支的文件差异
          CHANGED_FILES=$(git diff --name-only ${{ github.base_ref }} ${{ github.head_ref }})
          # 检查是否包含指定的变更日志文件(这里以CHANGELOG.md为例,可自行修改)
          if ! echo "$CHANGED_FILES" | grep -q "^CHANGELOG.md$"; then
            echo "❌ 错误:PR必须修改CHANGELOG.md文件"
            exit 1
          else
            echo "✅ 已检测到CHANGELOG.md文件的修改"
          fi

2. 关键配置说明

  • 触发条件:工作流会在PR打开、同步(提交新代码)、重新打开时自动执行
  • 分支差异对比:fetch-depth: 0确保拉取完整的仓库历史,这样才能正确对比PR源分支和目标分支的文件差异
  • 文件检查逻辑:通过git diff获取所有变更的文件名,再用grep检查是否包含指定的变更日志文件。如果未检测到修改,工作流会返回非零状态码,导致CI校验失败

3. 自定义调整

如果你的变更日志文件路径或名称不同(比如docs/CHANGELOG.md或CHANGELOG.rst),只需修改grep命令中的匹配规则即可:

  • 例如检查docs/CHANGELOG.md:将grep -q "^CHANGELOG.md$"改为grep -q "^docs/CHANGELOG.md$"
  • 例如支持多种后缀:grep -q "^CHANGELOG\."

4. 验证效果

提交一个未修改变更日志的PR,CI会直接失败并提示错误信息;修改变更日志后重新提交PR,CI会正常通过。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 09:40:27