概要
ローカルの golangci-lint
のバージョンとCIの golangci-lint-action
による golangci-lint
のバージョンの違いでたびたび詰まることを観測したのでざっと調べたメモ
背景
チーム共通のアクションに golangci-lint-action
を組み込んでおり、golangのプロジェクトでは .golangci.yaml
を直近のプロジェクトからコピペして使い回す運用になっていた。
golangci-lint-action
はversionの指定ができるが、チーム内であまり認識されていなく、CIの設定でも"stable"を固定にしていることが多い。
基本は最新を使っていくと安全なはずなので、"stable"は良いが、 .golangci.yaml
の使い回しが良くない。
この辺りどう運用していくのが良いのかざっくり考えてみる
公式のドキュメント確認
IMPORTANT: It's highly recommended installing a specific version of golangci-lint available on the releases page.
公式では特定のバージョンを使うことを強く推奨している
Configuration
-
golangci-lint linters
で有効になっているlinterのリストが確認できる - 設定ファイル
.golangci.{yaml, toml, json}
がカレントディレクトリにあるとそれを読み込んでくれる
カスタムしたい項目が上記ドキュメントにあれば設定ファイルを書いて挙動を制御する、ということなのでカスタムしたい項目がない(そこまでできていない)なら特に設定ファイルはおかず最新の設定そのままでlintかけていく方針が良さそう?
考えたこと
- 理想
- チームで話し合って必要なlintersや他設定を込めて
.golangci.yaml
を作る - CIは"stable"で最新の状態に追従していく
- ローカル開発でこけたところは直す
- バージョン依存のところも気づけるのでローカルを最新に追従させていく
- チームで話し合って必要なlintersや他設定を込めて
- ボツ案
- チームで話し合って必要なlintersや他設定を込めた
.golangci.yaml
のメンテの手が回らない -
.golangci.yaml
にコメントで対応バージョンを書いてまずはそれを通すことを目標にする - 余力があればCIのバージョンを"stable"にして通すようにする
- (ローカルでlintを通すようにデバッグするためにローカルのバージョンを上げる必要がありこの辺りのバージョン管理が少し手間そうなのでボツ)
- チームで話し合って必要なlintersや他設定を込めた
- 当座の方針
- 使い回している
.golangci.yaml
はチーム内で一度それぞれのlinterを整理済みのものなので使っていく - CIは"stable"、ローカルも追従する
- こけたら直す
-
.golangci.yaml
のドキュメントも修正する - 上記方針でドキュメントに知見をためてもらう、困ったらそこをみるような習慣にする
- 使い回している
以下のような方針もあり本当はやりたいが、リポジトリの管理状況や担当者の状況を考えると現状導入は難しそう