GitHub Actions で次のリリースバージョンを取得する

TypeScript

はじめに

みなさんはコミットメッセージをちゃんと書いていますか?

修正、新規機能、ドキュメント更新など、コミットで行う変更の種類による型 及び 説明をもたせる Conventional Commits という仕様があります。

Conventional Commits
人間と機械が読みやすく、意味のあるコミットメッセージにするための仕様

例:

feat: add new design pattern
docs: add parameter descriptions
refactor: drop support WP5.0

BREAKING CHANGE: refactor to use function not available in WP5.0

このルールに従っている場合、次のバージョンを機械的に決めることができます

今回紹介する GitHub Actions はそのバージョンを取得します。

使用するアクション

technote-space/get-next-version-action
GitHub Actions to get next version from commit histories. - technote-space/get-next-version-action

プルリクエストに含まれるコミットから次のバージョンを決定し、環境変数に設定するアクションです。

実装例

例としてプルリクエストが master ブランチにマージされたときにリリースタグを付与するために次のようなワークフローを作成します。

e.g. .github/workflows/add-release-tag.yml

on:
  pull_request:
    branches:
      - master
    types: [closed]

name: Add release tag

jobs:
  tag:
    name: Add release tag
    runs-on: ubuntu-latest
    if: github.event.pull_request.merged == true
    steps:
      - name: Get version
        uses: technote-space/get-next-version-action@v1
        with:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
      - uses: actions/github-script@0.4.0
        with:
          github-token: ${{ secrets.ACCESS_TOKEN }}
          script: |
            github.git.createRef({
              owner: context.repo.owner,
              repo: context.repo.repo,
              ref: `refs/tags/${process.env.NEXT_VERSION}`,
              sha: context.sha
            })

以下簡単な解説

master ブランチへのマージ

on:
  pull_request:
    branches:
      - master
    types: [closed]

の部分で master へのプルリクエストが閉じた時にワークフローが起動するように絞り込んでいます。

if: github.event.pull_request.merged == true

の部分でマージが行われたかどうかを判定しています。

リリースバージョンを取得

      - name: Get version
        uses: technote-space/get-next-version-action@v1
        with:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

Get Next Version Action を使用すると NEXT_VERSION 環境変数にバージョンが格納されます。

タグを付与

      - uses: actions/github-script@0.4.0
        with:
          github-token: ${{ secrets.ACCESS_TOKEN }}
          script: |
            github.git.createRef({
              owner: context.repo.owner,
              repo: context.repo.repo,
              ref: `refs/tags/${process.env.NEXT_VERSION}`,
              sha: context.sha
            })

アクションによって設定された環境変数と GitHub API を簡単に使用できる github-script アクションを使用してタグを付与しています。

アクションの詳細

オプション

MINOR_UPDATE_TYPES

マイナーアップデートのコミットタイプ
default: 'feat'
例:'feat, refactor'

EXCLUDE_MESSAGES

除外するコミットメッセージ
default: ''
例:

EXCLUDE_MESSAGES: |
  tweaks
  trivial changes      

上の例の場合、次のコミットは無視されます。

  • chore: tweaks
  • style: trivial changes

BREAKING_CHANGE_NOTES

破壊的変更を示すキーワード
default: 'BREAKING CHANGE'

SET_ENV_NAME

環境変数名
default: 'NEXT_VERSION'

対象イベント

このアクションは pull_request イベントの opened, reopened, synchronize, closed のアクションタイプで動作します。

それ以外で使用しても環境変数は設定されません。

コメント

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