Description: relctl is a provider-agnostic release management CLI for CI/CD pipelines. It supports two versioning schemes – SemVer and CalVer – and integrates with GitHub, GitHub Enterprise, GitLab, and Jenkins.
- Technology stack: Go, Cobra CLI
- Status: Stable
- Supported environments:
- GitHub & GitHub Enterprise (GitHub Actions)
- GitLab (GitLab CI)
- Jenkins Pipelines
- Versioning schemes: SemVer (branch-prefix driven) · CalVer (date-based, git-tag driven)
Download the latest release
and add it to your PATH, or use the
layer87-labs/relctl-action in GitHub Actions.
relctl derives the SemVer bump level from the source branch name:
| Branch prefix | Bump |
|---|---|
bugfix/, fix/, patch/, dependabot/ |
Patch |
feature/, feat/, minor/ |
Minor |
major/ |
Major |
Format: YYYY.MM.DD.N – e.g. 2026.06.01.3
YYYY.MM.DD– current date in UTCN– monotonically increasing counter per day, 1-based
N is calculated exclusively from local Git tags – no SCM API call, fully provider-agnostic.
relctl lists all tags matching YYYY.MM.DD.* for today and sets N to max(N) + 1 (or 1 if no tag exists yet).
Prerequisite: the repository must be checked out with full tag history (
fetch-depth: 0). This is already a general relctl requirement.
Place a .relctl.yaml in your repository root to set project-wide defaults:
version_scheme: calver # semver (default) | calver
default_branch: mainThe file is optional. When absent, relctl behaves exactly as before (SemVer, main).
Priority: --version-scheme flag > .relctl.yaml > built-in default (SemVer)
| Flag | Scope | Description |
|---|---|---|
--config <path> |
relctl, release |
Override config file path (default: .relctl.yaml) |
--version-scheme <scheme> |
release |
semver or calver; overrides config file |
# After merging a PR – relctl reads the PR branch and GitHub API
relctl release create
relctl release publish --release-id "$RELCTL_RELEASE_ID" --asset "file=dist/binary"# .relctl.yaml
version_scheme: calver# No branch prefix or PR context required
relctl release create
# → e.g. 2026.06.01.1
relctl release publish --release-id "$RELCTL_RELEASE_ID" --asset "file=dist/binary"relctl release create --version-scheme calver
# → e.g. 2026.06.01.1
# Second release on the same day (git tag 2026.06.01.1 already exists)
relctl release create --version-scheme calver
# → 2026.06.01.2relctl release create --version-scheme calver --dry-run
# Would create new release with version: 2026.06.01.1- uses: actions/checkout@v4
with:
fetch-depth: 0 # required: full tag history for N calculation
- name: Create CalVer release
run: relctl release create --version-scheme calver
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}More examples are available in the examples section of the documentation.
See the Q&A section.
Please file an issue in this repository's Issue Tracker.
relctl is licensed under the Apache License, Version 2.0. See LICENSE.