最近のgolangのCI周りを勉強する目的で、fujiwaraさんの[aswrap - ~/.aws/(config|credentials) で定義した AssumeRole 定義から一時キーを取得してコマンドを起動してくれる wrapper] (http://sfujiwara.hatenablog.com/entry/2017/12/13/122952)をgolangで再実装してみた。
-> https://github.com/masahide/assumer
まだMFA対応のtodoが残ってたり本家より劣化しているところはありますが、一時キーのキャッシュ保存に対応させたり、rpm,deb,brewのパッケージを作成したので導入が簡単なところぐらいが少ない取り柄
今回やりたかったこと/やったこと
- goreleaserを使ってrpm,deb,homebrewのパッケージのリリースを自動化
- codecov.ioでカバレッジの可視化
- gometalinterで行単位でのignore設定
goreleaser
golang製のソフトウェアのリリース処理を全部引き受けてくれてる便利なツールです。具体的には・・
- goのクロスコンパイル
- バイナリのtar.gzアーカイブやrpm,debパッケージ、dockerイメージの作成
- github.comのGithub Releasesへの添付
- dockerhubへの登録
- homebrewのFormula作成
などかなり幅広く対応しています。
使い方に関しては、 goreleaserを使ってGoで書いたツールのバイナリをGithub Releasesで配布する
を参考にしつつ、goreleaser自身の.travis.yml や .goreleaser.ymlがとても参考になるのでこの辺りを真似ながらで基本的に問題ないかと。
codecov.ioでカバレッジの可視化
以前、 golangの静的解析,カバレッジ解析,バイナリリリースをCircleCIで簡単に整えるで使ったcoverallsより導入が簡単だった。
事前にcodecov.ioでトークンを取得して、travisのenvにCODECOV_TOKEN
として設定しておいて、あとは、基本的にはこちらもgoreleaserの.travis.ymlを参考にしましたが
after_success:
- bash <(curl -s https://codecov.io/bash)
これだけで良いみたいですね。
gometalinterで行単位でのignore設定
gometalinterで様々な静的解析が走るけどその解析ツール毎にignoreを設定するのは大変だなぁと思ってたんですが・・・
defer cf.Close() // nolint errcheck
のように行単位で// nolint <解析ツール名>
でチェックを除外できるようです。
comment-directives に記載されてます。