releaser
semantic-release without the plugins, the config or node_modules. One static
Go binary, zero dependencies. Push to main and it reads your conventional
commits, picks the next version, writes the changelog, tags and publishes the
GitHub release.
Use it
.github/workflows/release.yml
name: Release
on:
push:
branches: [main]
jobs:
release:
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- uses: actions/checkout@v7
- uses: orochibraru/releaser@v1That’s the whole setup. The next push with a feat or fix commit gets a
CHANGELOG.md entry, the version in package.json bumped if there is one, a
chore(release): X.Y.Z [skip ci] commit, a vX.Y.Z tag and a GitHub release
with the same notes. The first release is always 1.0.0.
What it does
Versions from commits
feat bumps minor, fix, perf and revert bump patch, ! or a
BREAKING CHANGE: footer bumps major. Everything else releases nothing. The
strongest bump wins.
Rules, not plugins
rules: breaking=patch,feat=patch overrides a bump or adds a type. Overrides
merge over the defaults instead of replacing them.
Release notes
Breaking changes, features, fixes, performance, reverts, docs and refactors, in that order and only when they have entries. Every entry links to its commit, and the heading to the compare view.
Artifact mode
artifacts: dist/app.zip=app-${version}.zip attaches build outputs to the
release. Globs work, and a pattern that matches nothing fails the run before
anything is pushed.
Docker mode
docker: true builds ./Dockerfile and pushes :X.Y.Z and :latest to GHCR,
multi-arch if you ask. The push happens before the tag, so a failed build leaves
the repo untouched.
Dry run by default
Outside CI it only prints the next version and its notes. -dry-run=false
releases for real.
Coming from semantic-release
Delete .releaserc.json, the plugins in package.json and the
npx semantic-release step. The commit analyzer, notes generator, changelog and
package.json bump are built in; exec’s prepareCmd becomes prepare, the
git plugin’s extra assets become commit, the GitHub plugin’s assets become
artifacts. The migration guide maps every plugin.
What it doesn’t do: one release branch, no prerelease or maintenance channels,
and no npm publish. Run that in prepare, or in a later step gated on the
released output.