runnerq-go follows semver. Release notes are auto-drafted by release-drafter from merged PR titles + labels. Tagging is the only manual step.
Every PR merge to main runs
.github/workflows/release-drafter.yml,
which:
- Looks at every PR merged since the last tag.
- Categorizes each by label (see
.github/release-drafter.yml). - Resolves the next semver bump (
major/minor/patch) from the highest-impact label across that batch. - Updates an unpublished draft release named
vNEXTwith the formatted notes.
Labels are applied automatically by an autolabeler that maps Conventional Commit prefixes in the PR title to labels:
| PR title prefix | Auto-label | Bumps |
|---|---|---|
feat: |
feature |
minor |
fix: |
fix |
patch |
perf: |
perf |
patch |
docs: |
docs |
patch |
chore: |
chore |
patch |
refactor: |
refactor |
patch |
security: |
security |
patch |
build: |
build |
patch |
ci: |
ci |
patch |
deps: / chore(deps): |
deps |
patch |
Anything ending !: (e.g. feat!:) |
breaking |
major |
Body contains BREAKING CHANGE |
breaking |
major |
Override the auto-applied label by setting one manually on the PR — the autolabeler doesn't strip existing labels.
Once main is in a state you want to release:
git checkout main
git pull
git tag -a vX.Y.Z -m "vX.Y.Z"
git push origin vX.Y.ZThe Release workflow (.github/workflows/release.yml)
fires on the tag push, finalizes the draft (matching the tag and name), and
publishes it.
That's it — no binary artifacts to build, no go release step needed. Go's
module proxy auto-discovers the new tag the
moment any user runs go get github.com/alob-mtc/runnerq-go@vX.Y.Z.
- v0.x: pre-1.0. API may change between minors. Pseudo-versions
(
v0.0.0-<date>-<sha>) are how downstream apps pin to specific commits when no tag covers their need. - v1.0.0+: stable public API. Breaking changes require a
v2module path (github.com/alob-mtc/runnerq-go/v2), per Go module versioning.
The "public API" surface includes:
- The
runnerqpackage:Builder(),WorkerEngine,WorkerConfig,ActivityHandler,ActivityContext,ActivityExecutor,ActivityFuture,ActivityBuilder, error types and constants. - The
storagepackage:Storage,QueueStorage,InspectionStorage,WorkerPoolStorage,LeaseConfigurerinterfaces and the supporting data types. - The
storage/postgrespackage:New(),WithConfig(),PostgresBackend. - The
observabilitypackage:QueueInspector,NewQueueInspector(),WithMaxWorkers(). - The
observability/uipackage:RunnerQUI(),ObservabilityAPI(),ConsoleHTML,VendorAssets().
Internal types (lowercase) and the examples/ directory carry no
stability guarantee.
- Database schema columns added defensively for future use, where a breaking change to the column would also bump the major.
- Console UI shape (HTML markup, CSS classes, JS internals). The
observability HTTP API in
observability/ui/routes.gois stable. - The
ShutdownGraceSecondsdefault (30s). Operational tuning, may change. - Exact wording of structured-log fields. Field names are stable; human-readable messages are not.
If you want a vX.Y.Z-rc.N to live alongside the stable line for a
while, the same tag-and-publish flow applies — release-drafter handles
pre-release tags fine. The Go module proxy treats them as pre-releases
(go get's default @latest will not pick them up; users opt in
explicitly).
- Bump the example
go.modfiles if the new release adds APIs you want the examples to demonstrate. - Update the README's installation snippet if needed.
- Announce the release however you announce things — the published
GitHub Release URL is
https://github.com/alob-mtc/runnerq-go/releases/tag/vX.Y.Z.