npmパッケージ公開時にpackage.jsonのバージョンが正しいかチェックするGitHub Action

開発

概要

想定しているフロー

  1. default branch からリリース用ブランチを作成(例:release/v1.2.3)
  2. 機能追加用ブランチ(例:feature/#123)やバグ修正用ブランチ(例:fix/#321)を切って開発し、完了後リリース用ブランチにマージ
  3. リリース用ブランチでdefault branchへのプルリクを作成
  4. プルリクをマージ
  5. タグを作成(例:v1.2.3)
  6. タグの作成で起動したGitHub Actionsなどで自動publish

普段個人のリポジトリで行っているフローですが、publishの前にpackage.jsonのバージョンを上げるのを忘れてpublishに失敗することが何度かありました。

その場合、タグを貼り直したりpackage.jsonのバージョンを更新してコミットし直したりといった作業が発生してしまいます。

ブランチ名やタグ名をpublishに合わせて命名しているので、それを利用してpackage.jsonのバージョンを更新するGitHub Actionを作成しました。

Package Version Check Action

technote-space/package-version-check-action
GitHub Action to check package version before publish - technote-space/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 の代わりに使用する必要があります。

technote-space/package-version-check-action
GitHub Action to check package version before publish - technote-space/package-version-check-action

タグ

タグ名は Semantic Versioning に従っている必要があります。

実際に使用しているリポジトリの例

technote-space/package-version-check-action
GitHub Action to check package version before publish - technote-space/package-version-check-action

コメント

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