Release Process
Dubby uses a three-channel release process to balance shipping speed with stability.
Release channels
Section titled βRelease channelsβ| Channel | Source | Docker tag | Cadence | Audience |
|---|---|---|---|---|
| Dev | Every push to main | :dev | Continuous | Developers, early testers |
| Beta | Release branch | :beta, :X.Y.0-beta.N | Weekly during beta | Adventurous self-hosters |
| Stable | Promoted beta | :latest, :X.Y.Z | After 2-week soak | Everyone |
Branching model
Section titled βBranching modelβmain ββββββββββββββββββββββββββββββββββββββββββββ (trunk) \ release/1.2.0 ββ beta.1 ββ beta.2 ββ 1.2.0 (stable)mainis trunk. All development happens here. Every push builds:devimages automatically.- Release branches (
release/X.Y.0) are created only when cutting a beta. They receive cherry-picked bug fixes only β never new features. - Feature branches are merged to
mainvia pull request. Never commit directly tomainor release branches.
Versioning
Section titled βVersioningβDubby follows Semantic Versioning:
- Major (X.0.0) β Breaking changes to the public API or database schema
- Minor (0.X.0) β New features, non-breaking changes
- Patch (0.0.X) β Bug fixes only
Pre-1.0, breaking changes trigger a minor bump.
Cutting a release
Section titled βCutting a releaseβ- Create release branch from
main:release/X.Y.0 - Tag beta:
vX.Y.0-beta.1β builds:betaDocker images - Bug fixes: Land fixes on
mainfirst, then cherry-pick to the release branch - Tag additional betas as fixes land:
vX.Y.0-beta.2, etc. - Promote to stable after 2-week soak with no critical issues: tag
vX.Y.0 - Patch releases (
vX.Y.1) for critical fixes after stable release
Migration freeze
Section titled βMigration freezeβOnce a database migration ships in a beta, its SQL is frozen. No modifications allowed β only new migrations on main. This ensures users who upgrade from beta to stable donβt hit migration conflicts.
Hotfix process
Section titled βHotfix processβFor critical security or data-loss bugs:
- Fix lands on
mainfirst (with tests) - Cherry-pick the fix to the active release branch
- Tag a new patch version
- The fix ships in both
:devand:latestchannels
Docker images
Section titled βDocker imagesβEvery release publishes four images to Docker Hub:
| Image | Description |
|---|---|
dubbytv/dubby | Standalone (server + web in one container) |
dubbytv/server | API server only (for split deployments) |
dubbytv/worker | Background worker only (for split deployments) |
dubbytv/web | Nginx web client only (for split deployments) |
# Standalone (most users)docker pull dubbytv/dubby:latest # Latest stabledocker pull dubbytv/dubby:1.2.0 # Specific versiondocker pull dubbytv/dubby:beta # Betadocker pull dubbytv/dubby:dev # Development (latest main)
# Split deployment (Kubernetes)docker pull dubbytv/server:devdocker pull dubbytv/worker:devdocker pull dubbytv/web:devCommit conventions
Section titled βCommit conventionsβAll commits and PR titles follow Conventional Commits. This drives automated changelog generation and version bumping:
| Type | Version impact |
|---|---|
feat | Minor bump |
fix | Patch bump |
feat! / fix! | Major bump (minor pre-1.0) |
refactor, docs, chore | No version bump |