Skip to content

Release

Release #86

Workflow file for this run

name: Release
on:
workflow_dispatch:
inputs:
version:
description: Version to change to.
required: true
type: string
jobs:
release:
name: Release
runs-on: ubuntu-latest
defaults:
run:
shell: bash
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
ref: main
- name: Use Node.js from nvmrc
uses: actions/setup-node@v4
with:
node-version-file: '.nvmrc'
- name: Bump version
run: |
npm version --commit-hooks false --git-tag-version false ${{ inputs.version }}
./build/bump-version-changelog.js
git commit -m "Bump version to ${{ inputs.version }}"
- name: Push changes
uses: ad-m/github-push-action@master
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
- name: Tag commit and push
uses: mathieudutour/github-tag-action@v6.1
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
custom_tag: ${{ inputs.version }}
- name: Install
run: npm ci
- name: Prepare release
id: prepare_release
run: |
echo "version_tag=v${{ inputs.version }}" >> $GITHUB_OUTPUT
RELEASE_TYPE=$(node -e "console.log(require('semver').prerelease('${{ inputs.version }}') ? 'prerelease' : 'regular')")
echo "release_type=$RELEASE_TYPE" >> $GITHUB_OUTPUT
- name: Build
run: |
npm run build-prod
npm run build-csp
npm run build-dev
npm run build-css
npm run build-benchmarks
npm run generate-typings
- name: Create Archive
run: |
zip -r dist dist
- name: Build Release Notes
id: release_notes
if: ${{ steps.prepare_release.outputs.release_type == 'regular' }}
run: |
RELEASE_NOTES_PATH="${PWD}/release_notes.txt"
./build/release-notes.js > ${RELEASE_NOTES_PATH}
echo "release_notes=${RELEASE_NOTES_PATH}" >> $GITHUB_OUTPUT
- name: Create GitHub Release (regular)
id: create_regular_release
if: ${{ steps.prepare_release.outputs.release_type == 'regular' }}
uses: ncipollo/release-action@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag: ${{ steps.prepare_release.outputs.version_tag }}
name: ${{steps.prepare_release.outputs.version_tag }}
bodyFile: ${{ steps.release_notes.outputs.release_notes }}
artifacts: "dist.zip"
artifactContentType: "application/zip"
allowUpdates: true
draft: false
prerelease: false
- name: Create GitHub Release (prerelease)
id: create_prerelease
if: ${{ steps.prepare_release.outputs.release_type == 'prerelease' }}
uses: actions/create-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: ${{ steps.prepare_release.outputs.version_tag }}
release_name: ${{steps.prepare_release.outputs.version_tag }}
draft: false
prerelease: true
- name: Upload GitHub Release Assets (prerelease)
uses: actions/upload-release-asset@v1
if: ${{ steps.prepare_release.outputs.release_type == 'prerelease' }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.create_prerelease.outputs.upload_url }}
asset_path: ./dist.zip
asset_name: dist.zip
asset_content_type: application/zip
- name: Copy benchmarks_generated.js
run: |
mkdir tmp
cp test/bench/versions/benchmarks_generated.js tmp
cp test/bench/versions/benchmarks_generated.js.map tmp
- name: Upload Benchmarks to GitHub Pages
uses: peaceiris/actions-gh-pages@v3
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: tmp
destination_dir: benchmarks/${{ steps.prepare_release.outputs.version_tag }}
commit_message: 'deploy: ${{ steps.prepare_release.outputs.version_tag }}'
- name: Build the Docs
run: |
npm run generate-docs
docker run --rm -v ${PWD}:/docs squidfunk/mkdocs-material build
- name: Publish the docs
if: ${{ steps.prepare_release.outputs.release_type == 'regular' }}
uses: peaceiris/actions-gh-pages@v3
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: site
destination_dir: docs
commit_message: 'deploy docs: ${{ steps.prepare_release.outputs.version_tag }}'
- name: Clean up
if: ${{ steps.prepare_release.outputs.release_type == 'regular' }}
run: |
rm -f ${{ steps.prepare_release.outputs.release_notes }}
- name: Publish NPM package (regular)
if: ${{ steps.prepare_release.outputs.release_type == 'regular' }}
run: |
npm publish
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_ORG_TOKEN }}
- name: Publish NPM package (pre-release)
if: ${{ steps.prepare_release.outputs.release_type == 'prerelease' }}
run: |
npm publish --tag next
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_ORG_TOKEN }}