Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
78 changes: 78 additions & 0 deletions .github/workflows/github-release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
name: Create GitHub Release

on:
workflow_dispatch:
inputs:
trigger_note:
description: 'Can be run manually in case Release label is forgotten. Does NOT bump version numbers. Will fail if release version already exists.'
required: false
default: 'Run to create release'
pull_request:
types: [closed]
branches:
- main
- master
paths:
- 'package.json'

jobs:
create-release:
runs-on: ubuntu-latest
if: >
github.event_name == 'workflow_dispatch' ||
(github.event.pull_request.merged == true &&
contains(github.event.pull_request.labels.*.name, 'Release'))
steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Get current version
id: current_version
run: |
CURRENT_VERSION=$(jq -r '.version' package.json)
echo "version=$CURRENT_VERSION" >> $GITHUB_OUTPUT

- name: Check if release exists
id: check_release
run: |
TAG="v${{ steps.current_version.outputs.version }}"
if gh release view "$TAG" --json tagName --repo ${{ github.repository }} > /dev/null 2>&1; then
echo "::error::Release $TAG already exists! This indicates either an attempt to recreate an existing release or a version numbering issue."
exit 1
else
echo "Release $TAG does not exist - will create"
fi
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

- name: Create release
id: create_release
run: |
TAG="v${{ steps.current_version.outputs.version }}"
gh release create "$TAG" \
--title "$TAG" \
--generate-notes \
--prerelease \
--verify-tag
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

publish:
runs-on: ubuntu-latest
if: >
github.event_name != 'workflow_dispatch' &&
github.event.pull_request.merged == true &&
contains(github.event.pull_request.labels.*.name, 'Release')
steps:
- uses: actions/checkout@v4

- uses: actions/setup-node@v3
with:
node-version: lts/*
registry-url: 'https://registry.npmjs.org'

- run: npm ci
- run: npm run build
- run: npm publish --access public
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
Loading