🐶 使用 Reviewdog 将 golangci-lint 集成进 GitHub PR 评论
在现代代码协作中,Code Review 自动化 是提升团队效率的重要一环。我们希望在 Pull Request 创建时,能够自动运行 Linter 工具(如 golangci-lint
),并将代码问题直接反馈到 GitHub 评论中。这正是 reviewdog
的用武之地。
本文将介绍如何将 golangci-lint
结合 reviewdog
在 GitHub Actions 中完成这项任务。
🧰 工具简介
- golangci-lint:Go 的多合一 lint 工具,支持十几种分析器(如
govet
、errcheck
等)。 - 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
报告的代码问题标注在对应行,例如:
🛠 配置项说明
参数 | 说明 |
---|---|
github_token |
GitHub 提供的 token,默认使用 secrets.GITHUB_TOKEN 即可。 |
reporter |
选择输出方式,可选值:github-pr-review (内联)、github-pr-check (Checks) |
level |
日志级别:info 、warning 、error |
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-lint
与 reviewdog
集成到 GitHub PR 流程中,我们可以在第一时间将代码风格、潜在 bug 等问题反馈给开发者,有效提升代码质量和团队协作体验。