Skip to content
You're viewing an older version of this GitHub Action. Do you want to see the latest version instead?
tag

GitHub Action

Release GitHub Actions

v3.0.4

Release GitHub Actions

tag

Release GitHub Actions

This is a GitHub Actions that automates the release of GitHub Actions

Installation

Copy and paste the following snippet into your .yml file.

              

- name: Release GitHub Actions

uses: technote-space/release-github-actions@v3.0.4

Learn more about this action in technote-space/release-github-actions

Choose a version

Release GitHub Actions

CI Status codecov CodeFactor License: MIT

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

This is a GitHub Actions that automates the release of GitHub Actions.
Once you create a new tag, this action will automatically

  1. Run build
  2. Create branch for release
  3. Change tags to release branch
  4. If there is release which has same tag name and has been published, re-publish it (Because if the tag is changed, the release will be in a draft state).

Table of Contents

Details

Screenshots

  1. Before publish release
    Before publish release
  2. Publish release (Create tag)
    Publish release
  3. Running GitHub Actions
    Running GitHub Actions
  4. After running GitHub Actions
    After running GitHub Actions

Installation

  1. Setup workflow
    e.g. .github/workflows/release.yml
    # on: push
    on: create
    
    name: Release
    jobs:
      release:
        name: Release GitHub Actions
        runs-on: ubuntu-latest
        steps:
          - name: Release GitHub Actions
            uses: technote-space/release-github-actions@v3
            with:
              GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
    #           TEST_TAG_PREFIX: test/
    #           CLEAN_TEST_TAG: true

More details of target event

Options

BUILD_COMMAND

Build command.
default: ''
More details of execute command

CLEAN_TARGETS

Files or directories to clean before release (Comma separated).
default: .[!.]*,__tests__,src,*.js,*.ts,*.json,*.lock,*.yml,*.yaml
Absolute path and .. are not permitted to use.
More details of execute command

PACKAGE_MANAGER

Package manager to use to install dependencies.
If there is yarn.lock or package-lock.json, the action automatically determines the package manager to use, but this option can be used to specify it explicitly.
npm or yarn
default: ''

COMMIT_MESSAGE

Commit message.
default: 'feat: Build for release'

COMMIT_NAME

Commit name.
default: 'github-actions[bot]'

COMMIT_EMAIL

Commit email.
default: '41898282+github-actions[bot]@users.noreply.github.com'

BRANCH_NAME

Branch name for GitHub Actions release.
default: 'gh-actions'

BUILD_COMMAND_TARGET

Command for search build command.
default: ''
e.g. compile
If this option is not provided, build, production, prod and package are used.

CREATE_MAJOR_VERSION_TAG

Whether to create major version tag (e.g. v1).
default: true
Detail of tags

CREATE_MINOR_VERSION_TAG

Whether to create minor version tag (e.g. v1.2).
default: true
Detail of tags

CREATE_PATCH_VERSION_TAG

Whether to create patch version tag (e.g. v1.2.3).
default: true
Detail of tags

FETCH_DEPTH

Limit fetching to the specified number of commits from the tip of each remote branch history.
default: 3

TEST_TAG_PREFIX

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

CLEAN_TEST_TAG

Whether to clean test tag.
default: 'false'
e.g. 'true'

ORIGINAL_TAG_PREFIX

Prefix to add when leaving the original tag.
default: ''
e.g. 'original/'

Execute commands

Build

  • If package.json includes build, production, prod or package in scripts, the command is used for build. (You can change this with BUILD_COMMAND_TARGET)
  • If command does not have install command like npm run install or yarn install, install commands are added.

so if BUILD_COMMAND is not provided and package.json has build script, the following commands are executed for build.

yarn install
yarn build
yarn install --production

Delete files

To execute GitHub Actions, src files used for build, test files, test settings, etc. are not required.
And GitHub Actions is downloaded every time when it is used, so fewer files are better.

CLEAN_TARGETS option is used for this purpose.
default: .[!.]*,__tests__,src,*.js,*.ts,*.json,*.lock,*.yml,*.yaml

rm -rdf .[!.]*
rm -rdf *.js
rm -rdf *.ts
rm -rdf *.json
rm -rdf *.lock
rm -rdf *.yml
rm -rdf *.yaml
rm -rdf __tests__ src

(action.yml is not subject to deletion.)

The default setting assumes the use of Action template for TypeScript or Action template for JavaScript.
https://github.com/actions/typescript-action
https://github.com/actions/javascript-action

You can see an example of GitHub Actions with unnecessary files deleted below.
https://github.com/technote-space/release-github-actions/tree/gh-actions

Action event details

Target events

eventName: action condition
push: * condition
release: published condition
release: rerequested condition
create: * condition

condition

  • tags
    • semantic versioning tag (e.g. v1.2.3)
    • test tag (e.g. test/v1.2.3)

Motivation

Releasing GitHub Actions needs all build files and dependencies like node_modules, but are not usually committed.
So if you want to release GitHub Actions, you have to do following steps.

  1. Develop locally on the branch for develop
  2. Build for release
  3. Commit all source code including dependencies like node_modules to branch for release
  4. Add tags (consider major, minor and patch versions)
  5. Push to GitHub
  6. Publish release

It is very troublesome to do this steps for every release.

If you use this GitHub Actions, the steps to do are simpler.

  1. Develop locally on the branch for develop
  2. Publish release (Create tag)
  3. Wait for the automated steps to finish
    1. Build for release
    2. Commit all source code including dependencies like node_modules to branch for release
    3. Add tags (consider major, minor and patch versions)
    4. Push to GitHub

Addition

Tags

Tag name format must be Semantic Versioning.
The following tags will be created.

  • tag name
  • major tag name (generated by tag name)
    • e.g. v1
  • minor tag name (generated by tag name)
    • e.g. v1.2
  • patch tag name (generated by tag name)
    • e.g. v1.2.3

Sample GitHub Actions using this Action

Author

GitHub (Technote)
Blog