使用 Reviewdog 将 golangci-lint 集成进 GitHub PR 评论

| 分类 reviewdog  | 标签 reviewdog 

🐶 使用 Reviewdog 将 golangci-lint 集成进 GitHub PR 评论

在现代代码协作中,Code Review 自动化 是提升团队效率的重要一环。我们希望在 Pull Request 创建时,能够自动运行 Linter 工具(如 golangci-lint),并将代码问题直接反馈到 GitHub 评论中。这正是 reviewdog 的用武之地。

本文将介绍如何将 golangci-lint 结合 reviewdog 在 GitHub Actions 中完成这项任务。


🧰 工具简介

  • golangci-lint:Go 的多合一 lint 工具,支持十几种分析器(如 goveterrcheck 等)。
  • reviewdog:支持多种 Linter 的代码审查工具,可将 lint 结果反馈到 GitHub PR 评论。

📦 快速开始

1. 创建 .github/workflows/lint.yml

name: Lint with golangci-lint and reviewdog

on: [pull_request]

jobs:
  golangci-lint:
    name: 🧪 Lint Go Code
    runs-on: ubuntu-latest

    steps:
      - name: 📥 Checkout code
        uses: actions/checkout@v4

      - name: 🔧 Set up Go
        uses: actions/setup-go@v5
        with:
          go-version: '1.21'

      - name: 🧹 Run golangci-lint with reviewdog
        uses: reviewdog/action-golangci-lint@v2
        with:
          github_token: $
          golangci_lint_flags: '--timeout=3m'
          reporter: github-pr-review # 可以是 github-pr-check / github-check
          level: warning

🎯 效果展示

在 PR 中,reviewdog 会自动将 golangci-lint 报告的代码问题标注在对应行,例如:

reviewdog pr example


🛠 配置项说明

参数 说明
github_token GitHub 提供的 token,默认使用 secrets.GITHUB_TOKEN 即可。
reporter 选择输出方式,可选值:github-pr-review(内联)、github-pr-check(Checks)
level 日志级别:infowarningerror
golangci_lint_flags 传给 golangci-lint 的参数,例如自定义配置文件、过滤规则等

📁 示例项目结构

.
├── .github/
│   └── workflows/
│       └── lint.yml       # reviewdog 集成点
├── .golangci.yml          # golangci-lint 配置
├── main.go
└── go.mod

.golangci.yml 示例

run:
  timeout: 3m
linters:
  enable:
    - govet
    - errcheck
    - staticcheck
    - unused
issues:
  exclude-rules:
    - path: _test\.go
      linters:
        - errcheck

✅ 小贴士

  • reviewdog/action-golangci-lint 自动安装了 golangci-lint,不需要你手动安装。
  • 使用 reporter: github-pr-review 会将注释放在代码行上,更适合代码审查。
  • 对于私有仓库也支持,只需配置 secrets.GITHUB_TOKEN 权限。

🧩 扩展阅读


🧠 总结

通过将 golangci-lintreviewdog 集成到 GitHub PR 流程中,我们可以在第一时间将代码风格、潜在 bug 等问题反馈给开发者,有效提升代码质量和团队协作体验。