GitHub Actions で次のリリースバージョンを取得する
はじめに
みなさんはコミットメッセージをちゃんと書いていますか?
修正、新規機能、ドキュメント更新など、コミットで行う変更の種類による型 及び 説明をもたせる 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 はそのバージョンを取得します。
使用するアクション
プルリクエストに含まれるコミットから次のバージョンを決定し、環境変数に設定するアクションです。
実装例
例としてプルリクエストが 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 のアクションタイプで動作します。
それ以外で使用しても環境変数は設定されません。