Menu
releaser docs

releaser

semantic-release without the plugins, the config, or node_modules. One static Go binary, zero dependencies.

On every push to main, it reads your Conventional Commits, picks the next version, writes CHANGELOG.md, bumps package.json, commits, tags, and creates the GitHub release. Two optional modes, usable together: artifact (attach files to the release) and docker (build and push the image). Trunk-based? Ship a canary per push and cut stable releases through a release PR.

on:
  push:
    branches: [main]

jobs:
  release:
    runs-on: ubuntu-latest
    permissions:
      contents: write
      packages: write # docker mode only
    steps:
      - uses: actions/checkout@v7
      - uses: orochibraru/releaser@v1
        with: # all optional
          prepare: ./build.sh ${version} # builds dist/app.zip
          artifacts: dist/app.zip=app-${version}.zip
          docker: true # builds ./Dockerfile

Documentation

Runnable examples: Python, Go, TypeScript, JavaScript, Rust, Java, Kotlin, C, Bun, and Docker mode.

Development

mise install    # go and prek, pinned in mise.toml
prek install    # gofmt, go mod tidy, go vet, go test, prettier, markdownlint
go test ./...   # unit + integration, incl. the artifact and Docker examples (Docker needs Docker)
                # the other examples run in the Examples workflow

This guide lives in the project repo: edit it there, and this page follows within a day.