LoginSignup
8
7

More than 5 years have passed since last update.

Golangでソースにバージョン番号を埋め込む方法

Last updated at Posted at 2015-06-01

分散型のサバクラ?エージェント式?のツールを作ってると、各クライアントのバージョンを集中して確認したくなることがあると思う。
たとえばこういうものとか → HighBatch(宣伝)

Webでちょっと探した感じだとビルド時にGitから取得するのが一般的な感じ1だけど、それってGitが入ってない環境でZipとかでダウンロードした時ってどうなるの?って考えたら夜も眠れなくなりそうなのでコミット時にバージョンをつける方法を考えてみた。

cat .git/hooks/pre-commit

#!/bin/sh
a=(`git describe | tr -s '-' ' '`)
echo "package hogehoge" > hogehoge/version.go
echo "const Version = \"${a[0]}-${a[1]}\"" >> hogehoge/version.go

要は git describe を使ってプレコミットフックのタイミングでバージョン用のソースを自動で作ってるだけなんだけど、一応レビジョン番号はカットしている。
Gitのインストール元にもよるんだろうけど、一応WindowsのHookでも動作確認済み。

でも、複数人でコミットする場合はどうするの?とかHookの共有はどうするの?とか、どの環境でもうまくいく方法ではないのがイマイチな感じ。
複数人でコミットしあうときには ver.0.9-23-nobu とかってもう少し情報を与えないとダメだったりするので、うまくまわるのは一人で開発してる時だけかもしれませんね...
でも、ビルド痔に付加させるのもビルドするコマンドを矯正できるかどうかってのも疑問なんでそっちよりはいい感じがするかな?どっちがいいんだろう?

個人的には、ソースに埋め込む方法だとレビジョンをカットしても検索で引っかけることができるという副次的なメリットもあって良さそうだけど。

なるべく複雑なことはしたくないし。

8
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
7