technote-space / package-version-check-action

GitHub Actions to check package version before publish
MIT License
36 stars 1 forks source link
github-actions

Package Version Check Action

CI Status codecov CodeFactor License: MIT

Read this in other languages: English, 日本語.

This is a GitHub Actions to check package version before publish npm.

Table of Contents

Details - [Screenshots](#screenshots) - [Usage](#usage) - [Use when push](#use-when-push) - [Use in the release process](#use-in-the-release-process) - [Options](#options) - [BRANCH_PREFIX](#branch_prefix) - [COMMIT_DISABLED](#commit_disabled) - [COMMIT_MESSAGE](#commit_message) - [PACKAGE_NAME](#package_name) - [PACKAGE_DIR](#package_dir) - [TEST_TAG_PREFIX](#test_tag_prefix) - [NEXT_VERSION](#next_version) - [Action event details](#action-event-details) - [Target events](#target-events) - [Conditions](#conditions) - [Motivation](#motivation) - [Addition](#addition) - [Commit](#commit) - [Tags](#tags) - [Example repositories using this Action](#example-repositories-using-this-action) - [Author](#author)

Screenshots

  1. Running GitHub Action

    Running

  2. Updated version of package.json and commit (if branch is not protected)

    Updated

Usage

Use when push

e.g. .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@v2

         # Use this GitHub Action
         - name: Check package version
           uses: technote-space/package-version-check-action@v1
           with:
             BRANCH_PREFIX: release/

Use in the release process

e.g. .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@v2

         # Use this GitHub Action
         - name: Check package version
           uses: technote-space/package-version-check-action@v1
           with:
             COMMIT_DISABLED: 1

         - name: Install Package dependencies
           run: yarn install
         - name: Build
           run: yarn build
         - name: Publish
           run: |
             npm config set //registry.npmjs.org/:_authToken=$NPM_AUTH_TOKEN
             npm publish
           env:
             NPM_AUTH_TOKEN: ${{ secrets.NPM_AUTH_TOKEN }}

More details of target event

Options

BRANCH_PREFIX

Branch name prefix.
default: ''
e.g. release/

COMMIT_DISABLED

Whether commit is disabled.
default: ''

COMMIT_MESSAGE

Commit message of update package version commit.
default: 'feat: update package version'

PACKAGE_NAME

Package file name.
default: 'package.json'

PACKAGE_DIR

Package directory.
default: ''

TEST_TAG_PREFIX

Prefix for test tag.
default: ''
e.g. 'test/'

NEXT_VERSION

Specify next version.
default: ''
e.g. 'v1.2.3'

Action event details

Target events

eventName: action condition
push: * condition1
release: published condition1
pull_request, pull_request_target: opened, reopened, synchronize condition2
created: * condition3

Conditions

condition1

Motivation

If you forget to update the package.json version, publishing the npm package will fail.

Failed

If you are invoking an action by pushing a tag, you have to do following steps again.

  1. Delete pushed tag
  2. Update package.json version
  3. Commit and tag again
  4. Push

This is very troublesome.

This GitHub Action updates the version in package.json based on the tag name automatically.
So you don't have to worry about the version in package.json.

This action also commits the change if the branch is not protected.
If the branch is protected, this action just update the version in package.json.

Not commit

Addition

Commit

Commit is valid when pushing to default branch with tag or branch starting with ${BRANCH_PREFIX}.

The GITHUB_TOKEN that is provided as a part of GitHub Actions doesn't have authorization to create any successive events.
So it won't spawn actions which triggered by push.

GITHUB_TOKEN

This can be a problem if you have branch protection configured.

If you want to trigger actions, use a personal access token instead.

  1. Generate a personal access token with the public_repo or repo scope.
    (repo is required for private repositories).
  2. Save as ACCESS_TOKEN
  3. Add input to use ACCESS_TOKEN instead of GITHUB_TOKEN.
    e.g. .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@v2
    
         # Use this GitHub Action
         - name: Check package version
           uses: technote-space/package-version-check-action@v1
           with:
             GITHUB_TOKEN: ${{ secrets.ACCESS_TOKEN }}
             BRANCH_PREFIX: release/

ACCESS_TOKEN

Tags

Tag name format must be Semantic Versioning.

Example repositories using this Action

Author

GitHub (Technote)
Blog