[GitHub] コミットと同時にリリースを作成したい!

GitHub公式のActionにタグをプッシュするとリリースを作成してくれる create-releaseがありますが、わざわざタグを作ってプッシュする必要があり、面倒だったのでプッシュと同時にリリースを作成してくれるActionを作りました。

Release-with-commit

https://github.com/ChanTsune/release-with-commit

やりたいこと

特定のコミットメッセージを付与したコミットをGitHubにプッシュすると同時にリリースを作成する。

流れ

  1. リリース用の作業をする
  2. 作業内容をコミットする
  3. コミットメッセージが事前に設定した正規表現にマッチすればリリースを作成する

Actionを設定する

さっそくActionを設定します。

リポジトリの.github/workflowsディレクトリ以下に.ymlファイルを作成します。

中身にActionの設定を記述します。
以下は一例です。

name: Release with commit

on:
  push:
    branches:
      - master
jobs:
  release:
    runs-on: ubuntu-latest
    steps:
      - uses: ChanTsune/release-with-commit@v1.0.0
        with:
          regexp: "Release (\\d+([.]\\d+)*)\n*((\\s|\\S)+)"
          regexp_options: "us"
          release_name: "version $1"
          tag_name: "v$1"
          body: "$3"
          draft: false
          prerelease: false
        env:
          GITHUB_TOKEN: '${{secrets.GITHUB_TOKEN}}' # GitHubの操作をするために必要なトークン情報

プッシュしたタイミングで動作して欲しいのでアクションの発火条件をmasterにプッシュされたタイミングに設定しています。

パラメータの説明

  • regexp … 正規表現を設定します。コミットメッセージがこの正規表現にマッチした場合にリリースを作成します。(必須)
  • regexp_options … 正規表現のオプションを設定できます。RegExpオブジェクトのオプションです。
  • release_name … リリース時のタイトルです。$nを利用する事で正規表現にマッチしたグループを利用できます。
  • tag_name … リリースにつけるタグ名です。$nを利用する事で正規表現にマッチしたグループを利用できます。
  • body … リリースの詳細です。 $nを利用する事で正規表現にマッチしたグループを利用できます。
  • drafttrueが設定されている場合はリリースをドラフトに設定します。デフォルトはfalse
  • prereleasetrueが設定されている場合はプレリリースに設定します。デフォルトはfalse

他にもちょっとしたオプションパラメータがありますがactions/create-releaseと同じなので省略します。

詳細は、README.mdをご覧ください。

動かしてみる

上記の例を利用して動かすと次のようなコミットメッセージの場合にリリースが作成されます。

Release 1.1.1

- Fix
  - typo

この場合、リリース時のタイトルが

version 1.1.1

タグが

v1.1.1

リリースの詳細が

- Fix
  - typo

な状態でリリースが作成されます。

気をつけること

マージしたタイミングでアクションを発火させようとすると、マージコミットを作成するとうまく動いてくれないのでリベースするかスカッシュするとうまく動作してくれます。

おわりに

リリースを作成する場合に特定のコミットメッセージを設定するようにしているプロジェクトも多いのではないかと思うので、コミットメッセージからリリースの作成ができるとちょっと便利ですね。

かく言う私もリリースのタイミングのコミットメッセージのテンプレートを用意して使っているのでこいつのお陰ですこし幸せになれました。

不具合や改善案等がございましたらissuePRをたてていただけると助かります。