GitHub Actions でリリースを完全に自動化した話
はじめに
私は markdown-preview という、よくある(?)マークダウンをリアルタイムにブラウザで見れる、個人的OSSを作っています。
個人的なOSSなので、なるべく手間をかけずにリリース作業を行いたいと考えていました。
そこで GitHub Actions を使いワンクリックで以下の作業ができるようにしました。
- npmjs.com へのリリース
- GitHub へのコミットとタグのプッシュ
- GitHub Release の作成
意外とこの辺りの情報がまとまっている記事が私は見つけられなかったので、ブログ記事にしてみました。
おことわり
先に書いた通り、個人的なOSSのリポジトリにフィットするようなものです。
例えば、チーム開発ではワンクリックで簡単にリリースされると困る、などの問題も出ると思います。
あくまで「こういった事もできるんだな〜」という参考程度に見ていただけると幸いです。
サンプル
実際に使用している YAML ファイルです。この記事の執筆時点のものです。
ポイント解説
actions/checkout
actions/checkout の with.token
を使い、リポジトリに設定している Personal Access Token を使用しています。
何も指定しない場合は、実行毎に付与される GITHUB_TOKEN
が使われるようです。
- name: Checkout
uses: actions/checkout@v4
with:
token: ${{ secrets.PERSONAL_ACCESS_TOKEN }}
GITHUB_TOKEN
だと Branch Protection の関係で main
ブランチにプッシュができないので、管理者である私の GitHub アカウントとして Git を操作するためです。管理者であれば、Branch Protection の設定を無視してプッシュすることができるようにしています。
この辺の事情は、リポジトリの設定によって異なります。with.token
を指定しなくても問題ない場合もあるかもしれません。
actions/checkout が Git の設定をやってくれるため、自分で git
コマンドを使った設定をしなくて良くなり楽です。
package.json のアップデート
npm version
コマンドでバージョンをアップデートしています。
引数に major
, minor
, patch
のいずれかを指定すると、現在のバージョンを元に自動で適切な次のバージョンに書き換えてくれて、Git のタグも作成してくれます。
現在のバージョンを確認する必要がなく、GitHub Actions を起動する際にバージョンアップの種類を選択するだけで良くなります。
Git へのプッシュ
普通に git
コマンドを使用します。
小さな注意点としては、以下の2つを使わないとコミットとタグの両方をプッシュできなかったです。
$ git push
$ git push --tags
GitHub Release の作成
gh
コマンドを使って GitHub Release を作成しています。
--generate-notes
を使うと、自動でコミットログからリリースノートを生成してくれるので、手間がかかりません。
gh release create "${VERSION}" --generate-notes
このような感じで、リリースノートが自動的に作成されます。
ちなみに、GitHub 上にある Generate release notes
というボタンと同じ内容です。
おわりに
リリース作業が非常に楽になったので、今後も更新を続けていけそうです。
Discussion