Go製のアプリのリリースバージョンを管理する
Goで書いたアプリをバイナリで配布するケースはよくあると思うけど、そのアプリのバージョンをどうするか、やっぱやるならsemverだよなぁってことで、管理するアプリを作った。先にリポジトリのリンクを貼っておく。使い方もそちらに。
なお、vendoring toolではないです。
リリースバージョンの管理と埋め込み
gov initってやると .versions というファイルを作り、そこにバージョン情報を書き込んでいく。ファイル自体はMakrdown崩れみたいなやつで、 一応バージョンに対するメモも残せるのでリリースノート的な使い方もできる。
普段はnodeで開発しているので、コマンド体系はnpmと同じにした。
$ gov [major|minor|patch] [-m memo]
でバージョンを更新し、masterにコミット作成、タグを打つ、.versionsに追記ってところまでを一気にやる。 で、後は --follow-tagsとかでまとめてリモートにあげちゃう感じ。npmのライブラリ作ってるときと同じような操作感にした。と思う。
そしてGoで開発してるとビルドするバイナリにバージョン情報を埋め込むことがあるけど、このコマンドの結果を使えば簡単になる。 Makefileだとこんな感じ:
all:
go build -ldflags "-X main.version=$(shell gov)"
引数なしで gov ってやると現在のバージョンが戻るので、それを埋め込むことで簡単になる。 CircleCIでやるなら $CIRCLE_TAG を使えばいいけど。
まとめ
シングルバイナリなのでGoアプリに限らず使えると思う(大体の言語はnpmだったりcargoだったりで管理できるけど)。 バージョンは最初から溜めていくのでリリースノートと履歴の管理には良いと思う。
とりあえず自分はGoアプリで使いたかったので書いたら楽になったので良かった。
現場からは以上です。