🐾
git log で Go の疑似バージョン表記を出す
結論
TZ=UTC git log --date=format-local:'%Y%m%d%H%M%S' --abbrev=12 --format='v0.0.0-%cd-%h %s'
を実行すればいい。
実行例
$ TZ=UTC git log --date=format-local:'%Y%m%d%H%M%S' --abbrev=12 --format='v0.0.0-%cd-%h %s' -10
v0.0.0-20230906232137-654a3c66be98 Update module github.com/hashicorp/terraform-plugin-sdk/v2 to v2.29.0
v0.0.0-20230904233526-1077d60ced9a Merge pull request #125 from bgpat/renovate/actions-checkout-4.x
v0.0.0-20230904233517-0b7163fe1e9d Update module github.com/hashicorp/terraform-plugin-sdk/v2 to v2.28.0
v0.0.0-20230904233129-9e289b1d432a Update actions/checkout action to v4
v0.0.0-20230805024101-270bd80eb425 Merge pull request #123 from bgpat/renovate
v0.0.0-20230805023739-06d0f0b946de Tweak renovate.json
v0.0.0-20230805023449-0c6149120647 Merge pull request #122 from bgpat/renovate-label
v0.0.0-20230805022208-6e872aadaaf7 Add dependencies label to renovate PR
v0.0.0-20230805022144-0b78967be185 Add renovate-config-validator workflow
v0.0.0-20230805014607-eb3934dacb9e Merge pull request #121 from bgpat/bgpat-patch-1
経緯
fork した reviewdog を GitHub Actions で動かすために欲しくなった。
git clone して go build なり go install なりを実行するより直接 go install github.com/bgpat/reviewdog@v0.0.0-20230907141438-28d913ad231f
みたいな感じでインストールした方が楽では!?と思って書いた。
よく考えると(よく考えなくても) clone して go install するのでもそんなに変わらない。
解説
Go の疑似バージョン表記
vX.Y.Z のような version tag が設定されていない場合に Go では疑似バージョン (pseudo-version) が使われる。
疑似バージョンの形式は以下の通り。
既存の version tag がなかった場合は v0.0.0
になる。
<既存の version tag + 1>-<コミット日時(UTC) YYMMDDhhmmss>-<commit hash の先頭12桁>
コマンドの意味
Go の疑似バージョン表記を作れるように git log のフォーマットを作ればいい。
TZ=UTC
環境変数の $TZ
を指定してタイムゾーンを UTC にする。
git log で使うときは --date
に local
か format-local
を指定すると $TZ
が利用される。
--date=format-local:'%Y%m%d%H%M%S'
日付のフォーマットを指定している。
strftime
の形式で指定する。
-
%Y
年 -
%m
月 -
%d
日 -
%H
時 -
%M
分 -
%S
秒
--abbrev=12
短縮形の commit hash を12桁に変更している。
--format='v0.0.0-%cd-%h %s'
v0.0.0
の部分は version tag が設定されている場合は異なるのでよしなに変える。
%cd
は短縮形の commit hash で %h
はコミット日時を表す。
最後に見やすいようにスペースと %s
で commit title を出すようにしている。
Discussion