背景
Javaプロジェクトを開発している時にいくつか課題があり、それぞれ以下のように解決しました。
- リリースのたびに
build.gradle
のversion
を書き換える必要がある -> gradleプロジェクトでバージョンを自動指定 - リリースノートの作成が手間 -> GitHubのリリースノートの自動作成
上記をもう少し自動化してみようというのがこの記事の目的となります。前提として、bashコマンドを用いたスクリプトを実行するため、bashが利用できる環境であることが条件となります(macOS Big Sur
とAmazon Linux 2
では動作確認済み)。
事前準備
grenコマンドのインストール
gren-release-notesパッケージのインストールの手順に沿ってgrenコマンドが利用できるようにします。
build.gradleの設定
nebulaプラグインを利用するため、gradleプロジェクトでバージョンを自動指定を参考にbuild.gradle
を設定します。
GitHub CLIのインストール
GitHub CLIは、GitHub上でリリースドラフトを作成するために利用します。以下の手順でインストールと設定をします。
- 利用する環境に合わせて、Installationを参考にインストールします。
- 先ほどと同様に、個人アクセストークンを作成します。権限は
repo
とread:org
にチェックを入れます。 - 一度だけgh auth loginを実行して認証します。
echo {個人アクセストークンの文字列} | gh auth login --with-token
を実行します。
上記設定の後、GitHubリポジトリに移動してgh repo view
を実行し、結果が表示されたらOKです。
スクリプトの実行
https://github.com/kazntree/nebula-chain にあるrelease.sh
をリリースしたいリポジトリ内の任意の場所に置いて実行すると、新しいバージョンでリリースして、さらにプルリクエストを基にリリースノートを作成します。
$ ./script/release.sh
Do you want to release and publish? [y/n]
y
release start.
Inferred project: nebula-chain-test, version: 0.4.0
> Task :release
Tagging repository as 0.4.0
Pushing changes in [0.4.0] to origin
BUILD SUCCESSFUL in 7s
11 actionable tasks: 10 executed, 1 up-to-date
https://github.com/kazntree/nebula-chain-test/releases/tag/0.4.0
Getting gren config from local file /home/ec2-user/github/nebula-chain-test/.grenrc.yml
🤖 - Generate release notes:
===================================
✔ Releases found: 4
✔ Tags found: 0.4.0, 0.3.0
✔ Pull Requests found: 1
✔ 0.4.0 has been successfully updated!
See the results here: https://github.com/kazntree/nebula-chain-test/releases/tag/0.4.0
メジャーバージョンを上げたい場合はrelease.sh -Prelease.scope=major
を、パッチバージョンを上げたい場合はrelease.sh -Prelease.scope=patch
を指定します。
release.shの説明
release.sh
で行っていることは、以下のとおりです。
- 事前準備が終わっているか確認する(コマンドの存在など)
- コマンド実行の確認(
y
で実行) - nebulaプラグインを利用して、新しいバージョンをリリース
- GitHub CLIを利用して、GitHub上で新しいリリースノートを作成
- grenコマンドを利用して、前回リリースから取り込まれたプルリクエスト一覧をリリースノートへ上書き