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

如何在GitHub Workflow中仅对已提交推送文件执行ESLint检查?

实现GitHub Actions中仅对变更文件执行ESLint检查

当然可以实现,核心思路是先获取本次推送中变更的文件列表,再把这些文件传给ESLint做检查。下面是具体的yaml配置示例:

完整工作流配置

name: Lint Changed Files
on: [push, pull_request]

jobs:
  lint:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v4
        with:
          fetch-depth: 0 # 拉取完整提交历史,方便对比变更

      - name: Setup Node.js
        uses: actions/setup-node@v4
        with:
          node-version: 20
          cache: 'npm'

      - name: Install dependencies
        run: npm ci

      - name: Get changed files
        id: changed-files
        run: |
          # 获取与主分支对比的变更文件(如果是PR则对比base分支,否则对比上一次提交)
          if [ "${{ github.event_name }}" = "pull_request" ]; then
            BASE_REF="${{ github.base_ref }}"
          else
            BASE_REF="HEAD~1"
          fi
          # 筛选出.js/.jsx/.ts/.tsx类型的文件,根据你的项目调整后缀
          CHANGED_FILES=$(git diff --name-only $BASE_REF HEAD | grep -E '\.(js|jsx|ts|tsx)$' | tr '\n' ' ')
          echo "files=$CHANGED_FILES" >> $GITHUB_OUTPUT

      - name: Run ESLint on changed files
        if: steps.changed-files.outputs.files != '' # 只有存在变更文件时才执行
        run: npx eslint ${{ steps.changed-files.outputs.files }}

关键步骤说明

  • 拉取完整历史:fetch-depth: 0确保能获取到足够的提交历史来对比变更文件,避免因浅克隆无法获取之前的提交内容。
  • 筛选变更文件:通过git diff命令获取变更文件列表,再用grep过滤出需要ESLint检查的文件类型(可根据项目技术栈调整后缀,比如添加.vue等)。
  • 条件执行检查:通过if判断确保只有存在符合条件的变更文件时,才执行ESLint检查,避免无意义的空执行。

注意事项

  • 如果你的项目默认分支不是main,需要调整BASE_REF的默认值,比如改为对应分支名或者保持HEAD~1对比上一次提交。
  • 确保项目的package.json中已正确配置ESLint规则,且依赖安装命令(npm ci)能正确安装ESLint及相关插件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 00:54:30