
npmパッケージ公開時にpackage.jsonのバージョンが正しいかチェックするGitHub Actions
概要
想定しているフロー
- default branch からリリース用ブランチを作成(例:release/v1.2.3)
- 機能追加用ブランチ(例:feature/#123)やバグ修正用ブランチ(例:fix/#321)を切って開発し、完了後リリース用ブランチにマージ
- リリース用ブランチでdefault branchへのプルリクを作成
- プルリクをマージ
- タグを作成(例:v1.2.3)
- タグの作成で起動したGitHub Actionsなどで自動publish
普段個人のリポジトリで行っているフローですが、publishの前にpackage.jsonのバージョンを上げるのを忘れてpublishに失敗することが何度かありました。
その場合、タグを貼り直したりpackage.jsonのバージョンを更新してコミットし直したりといった作業が発生してしまいます。
ブランチ名やタグ名をpublishに合わせて命名しているので、それを利用してpackage.jsonのバージョンを更新するGitHub Actionsを作成しました。
Package Version Check Action
プッシュ時に使用する場合
release/v1.2.3 のようにブランチ名にリリース予定のバージョンを含むフローの場合、以下の設定でpackage.jsonのバージョンが自動更新されます。
例:.github/workflows/check_version.yml
on: push
name: Check package version
jobs:
checkVersion:
name: Check package version
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
with:
fetch-depth: 3
# Use this GitHub Action
- name: Check package version
uses: technote-space/package-version-check-action@v1
with:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
BRANCH_PREFIX: release/
リリースのフローで使用する場合
タグのプッシュやタグの作成時にpublishを行うワークフローがすでにある場合、以下のように追記することでバージョンの自動更新を利用できます。
例:.github/workflows/release.yml
on:
push:
tags:
- 'v*'
name: Publish Package
jobs:
release:
name: Publish Package
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@master
with:
fetch-depth: 3
# Use this GitHub Action
- name: Check package version
uses: technote-space/package-version-check-action@v1
with:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Install Package dependencies
run: yarn install
- name: Build
run: yarn build
- name: Publish
uses: actions/npm@master
env:
NPM_AUTH_TOKEN: ${{ secrets.NPM_AUTH_TOKEN }}
with:
args: publish
オプション
BRANCH_PREFIX
ブランチのリプフィックス
上の挙げた例ではrelease/
が指定されており、その場合 release/v1.2.3 のようなブランチが対象になります。
COMMIT_DISABLED
コミットが無効かどうか
リリースフローで使用する場合、バージョンが更新されたpackage.jsonがあればpublishは成功するため、コミットを行わなくても動作します。
このオプションに1を設定するとコミットを行いません。
補足
Personal access token
GitHub Actionsで提供されるトークン GITHUB_TOKEN は連続するイベントを作成する権限がありません。
したがってこのアクションによるコミット(プッシュ)ではプッシュイベントは発生しないため、プッシュをトリガーとしたCIなどは実行されません。
ブランチプロテクションでCIの結果を利用する設定している場合、このアクションによるコミットが最後の変更だとチェックが通りません。
アクションをトリガーする場合は Personal access token を生成して GITHUB_TOKEN の代わりに使用する必要があります。
タグ
タグ名は Semantic Versioning に従っている必要があります。
実際に使用しているリポジトリの例
