This is a convenience wrapper around semantic-release designed to be used with GitHub Actions. It uses conventional commit messages to generate release notes and a changelog. When a release is necessary, it is automatically published to npm, pushing the newly created tag, revised package.json and updated changelog to GitHub.
pnpm add -D @joshunrau/semantic-release @commitlint/cli @commitlint/config-conventional husky
Note: Commitlint and Husky are optional peer dependencies, and could be replaced with any other toolchain that ensures that conventional commits are followed.
First, setup Husky (if applicable):
pnpm exec husky init
Then, add the following git hook:
.husky/commit-msg
#!/bin/sh
pnpm exec commitlint --edit $1
Now, add the following configuration:
package.json
{
"commitlint": {
"extends": ["@commitlint/config-conventional"]
},
"release": {
"extends": ["@joshunrau/semantic-release"]
}
}
Next, generate an access token for npm with read and write permissions for the package in question and set the NPM_TOKEN
secret for the repository.
Then, add the following workflow:
.github/workflows/release.yaml
name: Release
on:
push:
branches: ['main']
workflow_dispatch:
permissions:
contents: read
jobs:
release:
permissions:
contents: write
issues: write
pull-requests: write
id-token: write
uses: joshunrau/semantic-release/.github/workflows/release.yaml@main
secrets:
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
with:
build-command: pnpm build # optional