Skip to content

Release

Release #72

Workflow file for this run

# This workflow will do a clean installation of node dependencies, cache/restore them, build the source code and run tests across different versions of node
# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-nodejs
name: Release
on:
workflow_dispatch:
inputs:
dry-run:
description: Dry run
required: false
default: false
type: boolean
increment:
description: Increment version
required: true
default: patch
type: choice
options:
- patch
- minor
- major
permissions:
contents: write
env:
INPUTS_DRY_RUN: ${{ github.event.inputs.dry-run }}
INPUTS_INCREMENT: ${{ github.event.inputs.increment }}
DRY_RUN_OPTION: ${{ github.event.inputs.dry-run == 'true' && '--dry-run' || '' }}
jobs:
publish-npm:
runs-on: ubuntu-latest
environment: npm
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 22
registry-url: https://registry.npmjs.org/
- name: Run Unit Tests
if: ${{ github.event.inputs.dry-run == 'false' }}
run: |
npm ci
npm run test
## - name: Run Integration Tests
## run: |
## npm install
## npm run test:integration
# requires npm which we get from setup-node
- name: Increment version
id: increment-version
run: |
npm version $INPUTS_INCREMENT --no-git-tag-version
echo "new-version=$(npm pkg get version | tr -d '"')" >> $GITHUB_OUTPUT
# replace placeholder with current values in CHANGELOG.md
# -E extended mode for \s support, -i inplace
# 0,: only operate on the first match.
- name: Replace TBD entry in CHANGELOG.md
env:
NEW_VERSION: ${{ steps.get-version.outputs.new-version }}
run: |
CURRENT_DATE=$(date +%Y-%m-%d)
sed -i -E "0,/^##\s+\[Unreleased\].*$/s//## [${NEW_VERSION}] - ${CURRENT_DATE}/" CHANGELOG.md
- name: Publish to npm
run: npm publish --access public $DRY_RUN_OPTION
env:
NODE_AUTH_TOKEN: ${{secrets.npm_token}}
- name: Parse changelog
id: parse-changelog
uses: schwma/[email protected]
with:
version: '${{ steps.increment-version.outputs.new-version }}'
- name: Create a GitHub release
if: ${{ github.event.inputs.dry-run == 'false' }}
uses: ncipollo/release-action@v1
with:
tag: 'v${{ steps.increment-version.outputs.new-version }}'
body: '${{ steps.parse-changelog.outputs.body }}'
# add missing template to change log for new development
# -E extended mode for \s support, -i inplace
# 0,: only operate on the first match.
# & is the matched string
- name: Add version template to CHANGELOG.md
run: |
sed -i -E '0,/^##\s+.*$/s//## [Unreleased]\
\
### Added\
### Changed\
### Deprecated\
### Removed\
### Fixed\
### Security\
\
&/' CHANGELOG.md
# prepare branch
- name: Commit changes
env:
NEW_VERSION: ${{ steps.increment-version.outputs.new-version }}
run: |
git config --global user.name "${GITHUB_ACTOR}"
git config --global user.email "[email protected]"
git add -u .
git commit -m "chore(version): $INPUTS_INCREMENT version $NEW_VERSION"
git push origin $BRANCH $DRY_RUN_OPTION