Gradle でバージョンを自動的に付ける (2020 年版)
旬の生魚おじさん、都元です。弊社は本日を最終営業日として、これから冬季休業となります。 今年も一年、どうもありがとうございました。というわけで恒例の書き納め三本締め、その2。
だいぶ昔に「Gradle でバージョン名を自動的に付ける 〜 git-describe とのコラボ」というエントリーを書きました。
当時は grgit という Git クライアントを導入して文字列操作をするような方法をご紹介しました。が、もっとスマートな Gradle プラグインを見つけたので、最近はそっちに切り替えていこうと思っています。
超小ネタですが、ご紹介します。
Gradle com.palantir.git-version
プラグイン
com.palantir.git-version というプラグインがあります。導入方法は簡単です。build.gradle
の中に次の記述を行うだけです。
plugins { // 略 id 'com.palantir.git-version' version '0.12.2' } version = gitVersion()
これにより、git-describe に従ったフォーマットで自動的にバージョン名設定ができます。ついでに printVersion
というタスクが利用できるようになります。
実行してみる
新しいディレクトリに上記の build.gradle
を作成して、実行してみます。
$ gradle printVersion FAILURE: Build failed with an exception. * Where: Build file '/path/to/build.gradle' line: 3 * What went wrong: An exception occurred applying plugin request [id: 'com.palantir.git-version', version: '0.12.2'] > Failed to apply plugin [id 'com.palantir.git-version'] > Cannot find '.git' directory * Try: Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights. * Get more help at https://help.gradle.org BUILD FAILED in 891ms
そりゃそうですね。そもそも .git/
が存在しなければエラーになります。
$ git init $ gradle printVersion > Task :printVersion unspecified BUILD SUCCESSFUL in 889ms 1 actionable task: 1 executed
git init
したてで何もコミットが無ければ unspecified
になるようです。
$ git add --all && git commit -m'Initial commit' $ gradle printVersion > Task :printVersion 63402c4 BUILD SUCCESSFUL in 1s 1 actionable task: 1 executed
コミットしてみると、コミットハッシュがバージョン名になります。そして。
$ git tag 1.0.0 $ gradle printVersion > Task :printVersion 1.0.0 BUILD SUCCESSFUL in 897ms 1 actionable task: 1 executed
タグを打つと、そのタグ名がバージョン名になります。
$ touch hoge $ gradle printVersion > Task :printVersion 1.0.0.dirty BUILD SUCCESSFUL in 1s 1 actionable task: 1 executed
なにかを追加して、未コミットのものがある状態では .dirty
という suffix が付きます。
$ git add --all && git commit -m'Add hoge' $ gradle printVersion > Task :printVersion 1.0.0-1-gd306f6c BUILD SUCCESSFUL in 1s 1 actionable task: 1 executed
これをコミットしてみると、git-describe の仕様に従って {直近のタグ名}-{からのコミット数}-g{ハッシュ}
という形式になります。
ああっ、便利だ。
まとめ
まとめもなにもありませんでした…。便利なのでぜひ導入しましょう。
ではみなさま、良いお年を。