This document describes the versioning scheme used for Ceracoder releases.
Ceracoder uses Calendar Versioning (CalVer) with automatic version detection, matching the versioning scheme used in CeraUI.
| Release Type | Format | Example |
|---|---|---|
| Stable | YYYY.M.patch |
v2026.1.0, v2026.1.1, v2026.2.0 |
| Beta | YYYY.M.patch-beta.N |
v2026.1.1-beta.1, v2026.1.2-beta.2 |
Where:
YYYY= 4-digit year (e.g., 2026)M= Month without leading zero (e.g., 1 for January, 12 for December)patch= Incrementing patch number starting from 0 each monthN= Beta number, incremented for each beta release
Versions are automatically calculated based on existing git tags. The system looks at the current year and month, then determines the next appropriate version number.
January 2026:
First stable release: v2026.1.0
Second stable release: v2026.1.1
Third stable release: v2026.1.2
February 2026 (new month, patch resets):
First stable release: v2026.2.0
Second stable release: v2026.2.1
Beta releases use the next patch number with a beta suffix:
January 2026:
Current stable: v2026.1.1
First beta (next patch): v2026.1.2-beta.1
Second beta: v2026.1.2-beta.2
Third beta: v2026.1.2-beta.3
When v2026.1.2 is released as stable:
Next beta: v2026.1.3-beta.1
- Stable releases increment the patch number for the current year.month
- Beta releases use the next patch number with a
-beta.Nsuffix - Multiple betas can exist for the same patch version (beta.1, beta.2, etc.)
- When a new month starts, the patch number resets to 0
- Beta numbers are tracked independently per patch version
Releases are created through GitHub Actions workflow dispatch:
- Navigate to Actions → Build and Release Ceracoder
- Click Run workflow
- Select parameters:
- Release type:
stableorbeta - Release notes: Optional description of changes
- Force version: Optional manual version override (e.g.,
2026.1.5)
- Release type:
- Click Run workflow
The workflow will:
- Automatically calculate the next version based on existing tags
- Build binaries for x86_64 and ARM64
- Create a GitHub release with all assets
- Tag the release with the calculated version
- Mark beta releases as "pre-release"
If you need to override the automatic version detection, use the force_version input:
force_version: 2026.1.5
This is useful for:
- Hotfix releases out of sequence
- Correcting version numbering issues
- Creating specific version numbers for compatibility
The version is compiled into the binary via the VERSION macro defined in the Makefile:
VERSION=$(shell git rev-parse --short HEAD)
CFLAGS=... -DVERSION=\"$(VERSION)\" ...To display the version:
ceracoder -v| Input | Required | Description | Options |
|---|---|---|---|
release_type |
Yes | Type of release | stable, beta |
release_notes |
No | Description of changes | Free text |
force_version |
No | Override auto version | e.g., 2026.1.0 |
-
calculate-version
- Fetches all git tags with
fetch-depth: 0 - Determines next version based on
release_type - Outputs:
version,version_tag,is_beta
- Fetches all git tags with
-
build-release (matrix: x86_64, arm64)
- Builds ceracoder binary for each architecture
- Creates compressed
.tar.gzarchives - Generates SHA256 checksums
- Uploads artifacts
-
create-release
- Downloads all build artifacts
- Generates changelog from commit history
- Creates GitHub release with:
- Version tag (e.g.,
v2026.1.0) - Release name with beta indicator if applicable
- Formatted release notes
- All binary archives and checksums
- Pre-release flag for beta releases
- Version tag (e.g.,
Debian packages use the same CalVer versioning scheme. The publish-deb.yml workflow:
- Automatically calculates the CalVer version
- Builds ARM64 Debian packages
- Packages are named:
ceracoder_YYYY.M.patch_arm64.deborceracoder_YYYY.M.patch-beta.N_arm64.deb
To trigger a Debian package build:
# Via GitHub Actions
Actions → Build and Upload Debian Package → Run workflow
# Or automatically on push to master (builds beta by default)
git push origin masterCeracoder previously used git commit hashes as versions. The new CalVer system:
- Provides human-readable version numbers
- Enables proper version ordering and comparison
- Aligns with CeraUI's versioning scheme
- Supports both stable and beta release channels
- Integrates with Debian package management
Existing installations using commit-based versions will continue to work. New releases will use the CalVer format.
Use beta releases for:
- Testing new features before stable release
- Gathering user feedback
- Pre-release validation
- Release candidates
Use stable releases for:
- Production deployments
- Official announcements
- Long-term support versions
- Recommended installations
- Stable: Release when features are complete and tested
- Beta: Release as often as needed for testing
- Monthly: Patch number resets each month, creating natural release cycles
If the version calculation fails:
- Ensure you have git tags fetched:
git fetch --tags - Check existing tags:
git tag -l - Use
force_versioninput to override if needed
If the wrong version is detected:
- Verify your git tags follow the format
vYYYY.M.patchorvYYYY.M.patch-beta.N - Check that old tags don't interfere (e.g.,
v1.0.0from old versioning) - Use
force_versionto specify the correct version
If beta versioning is incorrect:
- List beta tags:
git tag -l "v*-beta.*" - Ensure beta tags follow the exact format
vYYYY.M.patch-beta.N - Remove conflicting tags if necessary
- CeraUI Versioning - Reference implementation
- GitHub Actions Workflows - Workflow definitions
- Makefile - Build configuration with VERSION macro
# 1. Go to GitHub Actions → Build and Release Ceracoder
# 2. Select:
# - release_type: stable
# - release_notes: "Added SRT statistics logging"
# 3. Run workflow
#
# Result: v2026.1.0 (or next available version)# 1. Go to GitHub Actions → Build and Release Ceracoder
# 2. Select:
# - release_type: beta
# - release_notes: "Testing new bitrate algorithm"
# 3. Run workflow
#
# Result: v2026.1.1-beta.1 (or next available beta)# 1. Go to GitHub Actions → Build and Release Ceracoder
# 2. Select:
# - release_type: stable
# - release_notes: "Hotfix for critical bug"
# - force_version: 2026.1.5
# 3. Run workflow
#
# Result: v2026.1.5 (regardless of existing versions)For questions or issues with versioning, please open an issue on GitHub.