Golang で lint と test をしたい時の CircleCI の config.yml
4 min readFeb 20, 2019
TL;DR
やりたいこと
- Go Modules を用いた依存関係の解決
- lint
- test
これだけ。最低限実行しなきゃいけないものだけできていればいいかなという感じ。
Go Modules
commands:
go_mod_download:
steps:
- restore_cache:
name: Restore go modules cache
keys:
- go-modules-{{ checksum "go.sum" }}
- run: go mod download
- save_cache:
name: Save go modules cache
key: go-modules-{{ checksum "go.sum" }}
paths:
- "/go/pkg/mod"
go mod download
というコマンドを使って依存パッケージのダウンロードを行います。事前にGO111MODULE
という環境変数に on
を突っ込んでおきます。
Go Modules でダウンロードしたあれこれの保存場所は $GOPATH/pkg/mod
になるのでそこをキャッシュするようにしています。
Lint
Lint は GolangCI-Lint を実行します。
GolangCI-Lint は Golang のいろんな Linter をまとめて実行してくれるやつです。ここら辺の話は「GolangCI を使ってコードの品質を保ちながら快適な Golang 生活を送る話」というタイトルである勉強会で LT をしているので、その資料をそのまま貼ります。
今回は複数人で開発する用に最低限の Linter を実行するようにしています。
- goimports
- golint
- govet
- errcheck
- staticcheck
Test
特別書くことがない。
race
オプションをつけとくとデータ競合を検知してくれます。
まとめ
最低限の Lint と Test だけならこれを使い回せば大丈夫かなって思ってます。CircleCI 2.1 のことを完全に理解してないのでもっといい書き方とかあれば改善していきたい。
おまけ
Go Modules を用いた依存解決は CircleCI Orbs が公開されていたりします。