GitHub Actions のリリース手順を自動化する GitHub Actions

JavaScript
GitHub Actionsについて - GitHub ヘルプ
GitHub Actions では、カスタムソフトウェア開発のライフサイクル (SDLC) にわたるワークフローを GitHub リポジトリに直接作成することができます。

GitHub Actions の種類にはDockerコンテナ版とJavaScript版があります。

アクションについて - GitHub ヘルプ
アクションは個々のタスクで、組み合わせてジョブを作成したりワークフローをカスタマイズしたりできます。 独自のアクションを作成したり、GitHubコミュニティで共有されたアクションを利用したりカスタマイズしたりできます。

元々はDocker版しかなかったようですが、JavaScript版は起動がとても早く、これからはJavaScript版が主流になっていくと思っています。

そのJavaScript版ですが、実行してもらうためにはビルド済みのソースやすべての依存モジュールがコミットされている必要があります

一方でこれらは開発用のブランチにはコミットすべきではありません

開発者のシステムごとに適切なバイナリが異なる場合があったり、cloneする際に開発に必要ないファイルが含まれたりするためです。

したがって GitHub Actions をリリースする手順は割と面倒です。

リリースするまでの手順

  1. 開発用ブランチでローカルにて開発を行う
  2. リリース用にビルドする
  3. ビルドしたファイルや node_modules のような依存モジュールも含めて実行に必要なコードをリリース用ブランチにコミットする
  4. タグを付与する(メジャーやマイナーバージョンを考慮)
  5. GitHub に Push
  6. リリース

開発を終えてからリリースを完了するまでに行うことは多いです。

とくに GitHub が推奨している Semantic versioning を考慮してタグを張り直しを行っている GitHub Actions をほとんど見かけたことがありません。

About actions - GitHub Help
Actions are individual tasks that you can combine to create jobs and customize your workflow. You can create your own actions, and use and customize actions sha...

GitHub Actions を使用して自動化

Release GitHub Actions を使用することで手順は以下のように簡略化されます。

  1. 開発用ブランチでローカルにて開発を行う
  2. リリース(タグを作成)
  3. 自動化された手順が完了するのを待つ
    1. リリース用にビルドする
    2. ビルドしたファイルや node_modules のような依存モジュールも含めて実行に必要なコードをリリース用ブランチにコミットする
    3. タグを付与する(メジャーやマイナーバージョンを考慮)
    4. GitHub に Push

開発者が行うことは

  • GitHub Actions の開発
  • GitHub Releases からリリース(タグを作成)

だけです。

このアクションはタグ作成をトリガーとして起動し、以下を実行して実行に必要なファイルを用意します。

yarn install
yarn build
yarn install --production
rm -rdf .[!.]*
...
rm -rdf __tests__ src '_config.yml'
GitHub - technote-space/release-github-actions: GitHub Actions to auto release GitHub Actions

それらをGitHub Actions用に作成したブランチにコミットした後、すでに付与されているタグを張替えてプッシュします。

もし公開済みのリリースがある場合はタグの張替えで下書き状態になるため、再度公開させます。

GitHub Actions 上でビルドするため、手元でビルドするよりも GitHub Actions として正しく動作する可能性が高いというメリットもあるかもしれません(適当)

使用方法

タグ作成をトリガーとする workflow を用意します。

GitHub - technote-space/release-github-actions: GitHub Actions to auto release GitHub Actions
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 のページからリリースを作成(タグを作成)します。

リポジトリのリリースを管理する - GitHub ヘルプ
リリースを作成し、プロジェクトのイテレーションをバンドルしてユーザに配信できます。

テスト用リリース

更新を公開する前に実際に動作させてみたい場合、 TEST_TAG_PREFIX を設定してください。

GitHub - technote-space/release-github-actions: GitHub Actions to auto release GitHub Actions

例えば TEST_TAG_PREFIX: test/ を設定した場合、 test/v1.2.3 のようなタグを付与すると

  • test/v1
  • test/v1.2
  • test/v1.2.3

のバージョンでアクションが利用できるようになります。

uses で上記タグを指定して動作を確認し、問題なければ改めて v1.2.3 のようなタグを付与します。

スクリーンショット

オプション

この GitHub Actions は 以下のテンプレートから作成されたものを想定しています。

GitHub - actions/typescript-action: Create a TypeScript Action with tests, linting, workflow, publishing, and versioning

ビルド用コマンドがより複雑なものであったり、不要なファイルが他にある場合はオプションで設定を変更してください。

GitHub - technote-space/release-github-actions: GitHub Actions to auto release GitHub Actions

アクションの再実行

何らかの理由で再度実行したい場合、タグを付け直すことで再度実行できます。

コメント

タイトルとURLをコピーしました