如何配置ESLint校验master分支与HEAD间代码并解决GitHub Action运行报错
问题根因
- 部分 GitHub 仓库默认主分支名为
main而非master,硬写origin/master会因分支不存在触发报错 actions/checkout@v2默认仅拉取当前触发工作流的分支,不会主动拉取远程主分支的提交记录,仅设置fetch-depth: 100无法解决分支不存在的问题- 当前工作流触发条件为
on: push,不符合PR校验的场景需求,向主分支推送时origin/master...HEAD本身不存在提交差,逻辑也不成立
修复后完整配置
name: PR Lint Check on: [pull_request] jobs: lint-check: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v3 with: fetch-depth: 0 - name: Set up Node.js uses: actions/setup-node@v3 with: node-version: 14.18.0 - name: Install Node.js dependencies run: npm ci --ignore-scripts - name: Run ESLint on changed files shell: bash run: | TARGET_BRANCH=origin/${{ github.base_ref }} npx eslint --max-warnings 0 $(git diff $TARGET_BRANCH...HEAD --name-only --relative --diff-filter=MATR '*.js' '*.jsx' '*.ts' '*.tsx' | xargs)
关键修改说明
- 触发条件改为
pull_request,匹配PR校验场景,可通过GitHub内置变量github.base_ref直接获取PR的目标分支,无需硬写分支名 fetch-depth设置为0,拉取全量提交和分支信息,彻底解决找不到目标分支的问题- 动态拼接目标分支名,适配不同主分支名的仓库,避免硬编码分支名的兼容性问题
- 将通配符从
***.js修正为*.js,符合git diff的通配符规则,避免文件匹配异常
内容的提问来源于stack exchange,提问作者Ash
相关产品推荐
相关产品推荐

