GitHub Actions のリリース手順を自動化する GitHub Actions
GitHub Actions の種類にはDockerコンテナ版とJavaScript版があります。
元々はDocker版しかなかったようですが、JavaScript版は起動がとても早く、これからはJavaScript版が主流になっていくと思っています。
そのJavaScript版ですが、実行してもらうためにはビルド済みのソースやすべての依存モジュールがコミットされている必要があります。
一方でこれらは開発用のブランチにはコミットすべきではありません。
開発者のシステムごとに適切なバイナリが異なる場合があったり、cloneする際に開発に必要ないファイルが含まれたりするためです。
したがって GitHub Actions をリリースする手順は割と面倒です。
リリースするまでの手順
- 開発用ブランチでローカルにて開発を行う
- リリース用にビルドする
- ビルドしたファイルや node_modules のような依存モジュールも含めて実行に必要なコードをリリース用ブランチにコミットする
- タグを付与する(メジャーやマイナーバージョンを考慮)
- GitHub に Push
- リリース
開発を終えてからリリースを完了するまでに行うことは多いです。
とくに GitHub が推奨している Semantic versioning を考慮してタグを張り直しを行っている GitHub Actions をほとんど見かけたことがありません。
GitHub Actions を使用して自動化
Release GitHub Actions を使用することで手順は以下のように簡略化されます。
- 開発用ブランチでローカルにて開発を行う
- リリース(タグを作成)
- 自動化された手順が完了するのを待つ
- リリース用にビルドする
- ビルドしたファイルや node_modules のような依存モジュールも含めて実行に必要なコードをリリース用ブランチにコミットする
- タグを付与する(メジャーやマイナーバージョンを考慮)
- GitHub に Push
開発者が行うことは
- GitHub Actions の開発
- GitHub Releases からリリース(タグを作成)
だけです。
このアクションはタグ作成をトリガーとして起動し、以下を実行して実行に必要なファイルを用意します。
yarn install
yarn build
yarn install --production
rm -rdf .[!.]*
...
rm -rdf __tests__ src '_config.yml'
それらをGitHub Actions用に作成したブランチにコミットした後、すでに付与されているタグを張替えてプッシュします。
もし公開済みのリリースがある場合はタグの張替えで下書き状態になるため、再度公開させます。
GitHub Actions 上でビルドするため、手元でビルドするよりも GitHub Actions として正しく動作する可能性が高いというメリットもあるかもしれません(適当)
使用方法
タグ作成をトリガーとする workflow を用意します。
on: create
name: Release
jobs:
release:
name: Release GitHub Actions
runs-on: ubuntu-latest
steps:
- name: Release GitHub Actions
uses: technote-space/release-github-actions@v1
with:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
あとは GitHub Actions を開発し、GitHub Releases のページからリリースを作成(タグを作成)します。
テスト用リリース
更新を公開する前に実際に動作させてみたい場合、 TEST_TAG_PREFIX
を設定してください。
例えば TEST_TAG_PREFIX: test/
を設定した場合、 test/v1.2.3
のようなタグを付与すると
- test/v1
- test/v1.2
- test/v1.2.3
のバージョンでアクションが利用できるようになります。
uses で上記タグを指定して動作を確認し、問題なければ改めて v1.2.3
のようなタグを付与します。
スクリーンショット
オプション
この GitHub Actions は 以下のテンプレートから作成されたものを想定しています。
ビルド用コマンドがより複雑なものであったり、不要なファイルが他にある場合はオプションで設定を変更してください。
アクションの再実行
何らかの理由で再度実行したい場合、タグを付け直すことで再度実行できます。