やったことだけ書く備忘録

リリースバージョンを管理するやつをGoで書いた

Go製のアプリのリリースバージョンを管理する



Goで書いたアプリをバイナリで配布するケースはよくあると思うけど、そのアプリのバージョンをどうするか、やっぱやるならsemverだよなぁってことで、管理するアプリを作った。先にリポジトリのリンクを貼っておく。使い方もそちらに。

gov / Golang versioning tool

なお、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アプリで使いたかったので書いたら楽になったので良かった。

現場からは以上です。

« 前の記事 次の記事 »

0件のコメント