Release Package to NPM #33
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# This workflow will submit a new version of the library to NPM and create a GitHub release | |
name: Release Package to NPM | |
on: | |
workflow_dispatch: | |
inputs: | |
release-level: | |
description: 'Release level (one of): patch, minor, major, prepatch, preminor, premajor, prerelease' | |
required: true | |
jobs: | |
release: | |
runs-on: ubuntu-latest | |
steps: | |
# Checkout project main and setup environment | |
- name: Checkout | |
uses: actions/checkout@v3 | |
- name: Setup Node.js environment | |
uses: actions/setup-node@v2 | |
with: | |
registry-url: https://registry.npmjs.org/ | |
node-version: '14.17' | |
# Use cache for node modules | |
- name: Cache node modules | |
id: cache-npm | |
uses: actions/cache@v3 | |
env: | |
cache-name: cache-node-modules | |
with: | |
path: ~/.npm | |
key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }} | |
restore-keys: | | |
${{ runner.os }}-build-${{ env.cache-name }}- | |
${{ runner.os }}-build- | |
${{ runner.os }}- | |
# Install dependencies and run test | |
- name: Install dependencies | |
run: npm ci | |
# Build the project 'dist' | |
- name: Generate build | |
run: npm run build | |
# Move 'dist' files to root | |
- name: Move distributable to root | |
run: mv dist/* . | |
# Git configuration | |
- name: Git configuration | |
run: | | |
git config --global user.email "[email protected]" | |
git config --global user.name "Erick Eduardo Petrucelli" | |
# Bump package version | |
# Use tag latest | |
- name: Bump release version | |
if: startsWith(github.event.inputs.release-level, 'pre') != true | |
run: | | |
echo "NEW_VERSION=$(npm --no-git-tag-version version $RELEASE_LEVEL)" >> $GITHUB_ENV | |
echo "RELEASE_TAG=latest" >> $GITHUB_ENV | |
env: | |
RELEASE_LEVEL: ${{ github.event.inputs.release-level }} | |
# Bump package pre-release version | |
# Use tag beta for pre-release versions | |
- name: Bump pre-release version | |
if: startsWith(github.event.inputs.release-level, 'pre') && github.ref_name != 'main' | |
run: | | |
echo "NEW_VERSION=$(npm --no-git-tag-version --preid=beta version $RELEASE_LEVEL)" >> $GITHUB_ENV | |
echo "RELEASE_TAG=beta" >> $GITHUB_ENV | |
env: | |
RELEASE_LEVEL: ${{ github.event.inputs.release-level }} | |
- name: Bump RC pre-release version | |
if: startsWith(github.event.inputs.release-level, 'pre') && github.ref_name == 'main' | |
run: | | |
echo "NEW_VERSION=$(npm --no-git-tag-version --preid=rc version $RELEASE_LEVEL)" >> $GITHUB_ENV | |
echo "RELEASE_TAG=next" >> $GITHUB_ENV | |
env: | |
RELEASE_LEVEL: ${{ github.event.inputs.release-level }} | |
# Update changelog unreleased section with new version | |
- name: Update changelog contents | |
if: startsWith(github.event.inputs.release-level, 'pre') != true | |
uses: superfaceai/release-changelog-action@v1 | |
with: | |
path-to-changelog: CHANGELOG.md | |
version: ${{ env.NEW_VERSION }} | |
operation: release | |
# Commit changelog changes | |
- name: Commit new version and create tag | |
run: | | |
git add "package.json" | |
git add "CHANGELOG.md" | |
git commit -m "chore: release ${{ env.NEW_VERSION }}" | |
git tag ${{ env.NEW_VERSION }} | |
# Publish version to public repository | |
- name: Publish package | |
run: yarn publish --verbose --access public --tag ${{ env.RELEASE_TAG }} | |
env: | |
NODE_AUTH_TOKEN: ${{ secrets.NPMJS_ACCESS_TOKEN }} | |
# Push changes to origin | |
- name: Push changes to repository | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
run: | | |
git push origin && git push --tags | |
# Read version changelog | |
- id: get-changelog | |
name: Get release version changelog | |
if: startsWith(github.event.inputs.release-level, 'pre') != true | |
uses: superfaceai/release-changelog-action@v1 | |
with: | |
path-to-changelog: CHANGELOG.md | |
version: ${{ env.NEW_VERSION }} | |
operation: read | |
# Update release documentation | |
- name: Update release documentation | |
uses: softprops/action-gh-release@v1 | |
with: | |
tag_name: ${{ env.NEW_VERSION }} | |
body: ${{ steps.get-changelog.outputs.changelog }} | |
prerelease: ${{ startsWith(github.event.inputs.release-level, 'pre') }} | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |