Releasing
Releases are triggered by a v* git tag. The .github/workflows/release.yml workflow then:
- Builds a multi-arch (amd64 + arm64) container image.
- Tags it:
v1.2.3โ1.2.3,1.2,1, pluslatest(unless the tag is a prerelease likev1.2.3-rc1). - Pushes to
ghcr.io/developerz-ai/db-mcp-gateway. - Creates a GitHub Release with auto-generated notes.
GHCR is used because this is an open-source project โ public images are free, unmetered for pulls, and don't have Docker Hub's rate limits.
Cutting a releaseโ
# 1. Bump version in Cargo.toml
sed -i 's/^version = .*/version = "X.Y.Z"/' Cargo.toml
cargo update -w
git add Cargo.toml Cargo.lock
git commit -m "release: X.Y.Z"
# 2. Tag and push
git tag -a vX.Y.Z -m "vX.Y.Z"
git push origin main vX.Y.Z
Watch the workflow at https://github.com/developerz-ai/db-mcp-gateway/actions. When it finishes:
ghcr.io/developerz-ai/db-mcp-gateway:X.Y.Zis pullable.ghcr.io/developerz-ai/db-mcp-gateway:latestpoints at it.- A GitHub Release exists with the changelog.
Versioningโ
Semver. Pre-1.0 we don't promise compat between minors โ 0.x.y to 0.(x+1).0 may break config schema, MCP tool surface, or audit log shape. The release notes will call out any break.
Post-1.0:
- Patch (
1.2.3โ1.2.4) โ no behavior changes a config has to react to. - Minor (
1.2.xโ1.3.0) โ additive only: new tools, new config keys (always with safe defaults), new sinks. - Major (
1.x.yโ2.0.0) โ breaking change. Documented migration path in release notes.
Prereleasesโ
v1.2.3-rc1, v1.2.3-beta1 etc. push to GHCR with the literal tag (1.2.3-rc1) but do not update latest. Use these for previews against a staging gateway.
Image provenanceโ
The image is built from a clean checkout of the tagged commit by GitHub Actions. The workflow runs with id-token: write so we can attach SLSA provenance to the image later (not wired in phase 0 โ see roadmap).
Yanking a releaseโ
Don't delete tags. To pull a broken release out of circulation:
- Cut the next patch with the fix.
- Update GHCR
latestto the new patch (automatic on tag push). - Note the yank in the next release's notes.
Deleted tags break anyone who pinned to that version. Cutting a forward fix is always safer.