Golang で lint と test をしたい時の CircleCI の config.yml

https://brandfolder.com/circleci

TL;DR

https://gist.github.com/d-kuro/664bdc199ad8c95bbde8f9259e168f39

やりたいこと

  • 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

https://github.com/golangci/golangci-lint

Lint は GolangCI-Lint を実行します。

GolangCI-Lint は Golang のいろんな Linter をまとめて実行してくれるやつです。ここら辺の話は「GolangCI を使ってコードの品質を保ちながら快適な Golang 生活を送る話」というタイトルである勉強会で LT をしているので、その資料をそのまま貼ります。

https://speakerdeck.com/daikurosawa/golangci

今回は複数人で開発する用に最低限の Linter を実行するようにしています。

  • goimports
  • golint
  • govet
  • errcheck
  • staticcheck

Test

race オプションをつけとくとデータ競合を検知してくれます。

まとめ

おまけ

https://circleci.com/orbs/registry/orb/timakin/go-module

SoftwareEngineer

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store