GitHub Actionsとnpを使ったプロダクトのバージョン管理/リリースフローが簡単すぎた
DESCRIPTION
- https://github.com/capacitor-community/admob/releases のようなバージョンタグとリリースノートを自動生成した話
- package.jsonのversionとGitHub上のversionが一致するようになって幸せ
- デプロイ/リリースフローもそれに沿った形にした話
本文
GitHubでプロダクトのソースコード管理することは当たり前になりましたが、皆さんリリースバージョンはどのように管理していますか??
恥ずかしながら半年ほど前まで、プロダクトでリリースバージョンというものをつけていませんでした。
- よし、この機能追加した
- よし、テストも通った。リリースするぞ。
- 手動でpackage.jsonのversionを変更する
- じゃあ、productブランチにマージして(GitHub Actionsが動いて)デプロイだ!!
まぁ、特筆した問題はないのですが、アプリ内でバージョン表示するために resolveJsonModule: true
にしてpackage.jsonをインポートしてる関係上、これを変え忘れると問い合わせ対応の時のバージョン確認で手間増えるし、GitHubを利用してるのに、GitHubのバージョンタグは活用されていないし、それによってどのバージョンでどこを変更したかの一覧性ないし。 あれ、今考えてみると、十分に問題だらけでした。
そこで、ちょっと本腰をいれて対応してみました。
npの設定
まず、プロジェクトにnpmパッケージをいれます。なので、トップディレクトリに package.json
がない場合は、 npm init
して package.json
を追加してください。この段階で、 version
と repository
があることを確認しておく必要があります。例えば、以下のような形です。
{
"name": "test",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"repository": {
"type": "git",
"url": "git+ssh://git@github.com/test/test.git"
},
"author": "",
"license": "ISC",
"bugs": {
"url": "https://github.com/test/test/issues"
},
"homepage": "https://github.com/test/test#readme"
}
そして、今回の肝であるパッケージ、 np
をインストールします。
% npm install np --save-dev
このパッケージはもともと、 npm publish
する時に利用されるバージョン管理パッケージなのですが、オプションをちゃんとみると npm publish
以外でも利用できるのでこれを利用します。では、まず試しに実行してみましょう。
% npx np --no-publish --yolo
--no-publish
は 「 npm publish
ではない」(npmパッケージとしてリリースしない)、 --yolo
は 「node_modulesのクリーンアップとテストを実行しない」という意味です。オプションは必要に応じて変更してください。ここでテストを実行してもいいのですが、私は本番デプロイ時のCI上で行うので --yolo
にしています。
オプションはこちら: https://www.npmjs.com/package/np#usage
そうして、パッチなのか、マイナーアップデート、メジャーアップデートなのかを選択します。
? Select semver increment or specify new version (Use arrow keys)
❯ patch 8.2.17
minor 8.3.0
major 9.0.0
prepatch 8.2.17-0
preminor 8.3.0-0
premajor 9.0.0-0
prerelease 8.2.17-0
選択すると、以下の実行が行われます。
- package.jsonのversionの値を変更する
- 最後のGitHubのタグからここまでのGitのコミット履歴を一覧にしてくれる
- Gitにタグをつけてくれる
- GitHubにリリースノートの下書きをつくってリリースをクリックするだけの状態にしてくれる(以下)
めっちゃ便利!!そして、GitHub上からこのようにリリースバージョン、タグバージョンを追えるようになります。
GitHub Actionsの設定
デプロイ用のGitHub Actionsをブランチ指定ではなく、タグ指定をするようにします。
on:
push:
tags:
- v[0-9]+.[0-9]+.[0-9]+
これだと、 x.x.x
のタグがついたPushがデプロイされます。タグがついてなかったらデプロイされません。
おわりに
これで関係者に「今回のアップデートは」みたいな説明は不要になって、以下のようにURLを渡すだけで済むようになりました。
自分自身物忘れしやすいので「あれ変更したのっていつだっけな」みたいなのなくなり助かっています。ぜひCI環境を構築してる方は、バージョン管理も追加してみてください。
ちなみに以下記事もおすすめなのでぜひお時間ある方はご覧ください。
それではまた。
Discussion