Skip to main content
zerv is designed to be complementary to semantic-release. The tools answer different questions:
  • semantic-release: what version is this release? It reads conventional commits, decides the next version, writes the changelog, tags, and publishes.
  • zerv: what version is this exact Git state? It computes a version for any commit on any branch. The builds semantic-release never sees.
The split in practice: zerv never writes tags or parses commit messages, so it cannot interfere with semantic-release’s decisions. It only reads the tag semantic-release left behind.

On main: semantic-release, then zerv

zerv’s own CD pipeline does exactly this. cd.yml calls both shared workflows:
(Trimmed. The real semantic-release job also pins workflow-dispatch guard inputs.)
  • The semantic-release job publishes and tags releases (new_release_version, new_release_published outputs). The zerv-versioning job runs only on valid semantic-release refs, via the if: gate shown above.
  • The zerv-versioning job (GitHub Actions) versions the current build for artifact naming, including on commits semantic-release skips because no new release was published.
For builds that must match a semantic-release output exactly, pin the tag version from its output instead of letting zerv detect it:

On pull requests: zerv alone

PRs never reach semantic-release, so the PR pipeline runs zerv by itself: it versions the PR head, optionally tags a pre-release, and feeds semver, PEP440, and docker tags to the deploy jobs. zerv-flow is a working demonstration repo (trimmed from its ci.yml, which pins workflows by commit SHA):

Choosing where each applies

  • Release flow (changelog, publish, tag): semantic-release. zerv has no opinion and no tooling for it.
  • Continuous artifact versioning (docker tags on every push, deploy manifests on PR previews): zerv. semantic-release only versions release commits.
  • Non-conventional commit histories: zerv works from tags and distance alone, so it drops in without retraining your team on commit message format.

Where to go next

  • Why zerv - the complementary positioning story
  • GitHub Actions - the reusable versioning workflow
  • zerv-flow - working demo repo for both halves of this split