From 245a8109df2bbc91b9545d93ec1181925c713664 Mon Sep 17 00:00:00 2001 From: sherwinski Date: Tue, 12 Nov 2024 12:36:03 -0500 Subject: [PATCH] build: automate release flow Adds a GitHub Action to perform the following: - Kick off whenever a new commit is made on the default (main) branch - Bump package version in `package.json` - Version bump follows semantic versioning - Avoid automatically publishing new major versions to prevent unintended releases - Publish updated package to registry (npmjs.com) - Add a new git tag - Generate release notes and add them to the changelog - Publish a new release to GitHub, includes change notes in release body --- .github/workflows/release.yml | 38 ++++++++++ .releaserc.json | 136 ++++++++++++++++++++++++++++++++++ 2 files changed, 174 insertions(+) create mode 100644 .github/workflows/release.yml create mode 100644 .releaserc.json diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..47b6538 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,38 @@ +name: Release +on: + push: + branches: + - main + +jobs: + release: + name: Release + runs-on: ubuntu-latest + permissions: + contents: write + issues: write + pull-requests: write + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + token: ${{ secrets.RELEASE_TOKEN }} + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: 'lts/*' + registry-url: 'https://registry.npmjs.org' + - name: Release + env: + GITHUB_TOKEN: ${{ secrets.RELEASE_TOKEN }} + NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} + NPM_TOKEN: ${{ secrets.NPM_TOKEN }} + run: | + npx -p semantic-release \ + -p @semantic-release/changelog \ + -p @semantic-release/git \ + -p @semantic-release/github \ + -p @semantic-release/npm \ + -p conventional-changelog-conventionalcommits \ + semantic-release --dry-run diff --git a/.releaserc.json b/.releaserc.json new file mode 100644 index 0000000..3f162fe --- /dev/null +++ b/.releaserc.json @@ -0,0 +1,136 @@ +{ + "branches": [ + "main" + ], + "tagFormat": "${version}", + "plugins": [ + [ + "@semantic-release/commit-analyzer", + { + "releaseRules": [ + { + "breaking": true, + "release": "minor" + }, + { + "type": "feat", + "release": "minor" + }, + { + "type": "fix", + "release": "patch" + }, + { + "type": "docs", + "release": "patch" + }, + { + "type": "perf", + "release": "patch" + }, + { + "type": "refactor", + "release": "patch" + }, + { + "type": "style", + "release": "patch" + }, + { + "type": "test", + "release": "patch" + }, + { + "type": "build", + "release": "patch" + }, + { + "type": "ci", + "release": "patch" + }, + { + "type": "chore", + "scope": "deps", + "release": "patch" + } + ] + } + ], + [ + "@semantic-release/release-notes-generator", + { + "preset": "conventionalcommits", + "writerOpts": { + "types": [ + { + "type": "feat", + "section": "Features" + }, + { + "type": "fix", + "section": "Bug Fixes" + }, + { + "type": "docs", + "section": "Documentation", + "hidden": false + }, + { + "type": "deps", + "section": "Dependency Updates", + "hidden": false + }, + { + "type": "chore", + "hidden": true + }, + { + "type": "style", + "hidden": true + }, + { + "type": "refactor", + "hidden": true + }, + { + "type": "perf", + "hidden": true + }, + { + "type": "test", + "hidden": true + } + ] + } + } + ], + [ + "@semantic-release/changelog", + { + "changelogFile": "CHANGELOG.md", + "changelogTitle": "# Changelog" + } + ], + [ + "@semantic-release/npm", + { + "pkgRoot": "." + } + ], + [ + "@semantic-release/git", + { + "assets": [ + "bundles/**", + "esm2015/**", + "fesm2015/**", + "lib/**", + "package.json", + "CHANGELOG.md" + ], + "message": "chore(release): ${nextRelease.version}\n\n${nextRelease.notes} [skip ci]" + } + ], + "@semantic-release/github" + ] +}