Query Connector Release Documentation
Releases are driven by the version field in app_version.yml. Bumping
that field on main triggers automation that tags the merge commit, builds
and publishes the Query Connector Docker image to GHCR, creates a GitHub
Release with auto-generated notes, and posts the release link to Slack.
Semantic Versioning
Releases follow Semantic Versioning 2.0.0 with each release's version following the pattern of MAJOR.MINOR.PATCH.
-
MAJOR versions introduce breaking changes.
A breaking change breaks backwards compatibility with previously released versions. In other words, a breaking change is something that may cause a client's implementation to stop working when upgrading from a previous version. Common examples of breaking changes include:
- Deleting a package or public functions/methods
- Deleting public function parameters
- Changing a function name
- Changing the name or order of required parameters
- Adding new required parameters
- Removing, restricting or changing functionality offered by a public function
Major version releases may also include non-breaking enhancements and fixes.
Major version releases will reset MINOR and PATCH versions to 0.
-
MINOR versions introduce new, non-breaking functionality.
Releases with enhancements that do not break backwards compatibility require a minor version update. Common examples of non-breaking changes include:
- Adding a package, module, or method
- Adding optional parameters
Minor version releases may also include fixes.
Minor versions will reset PATCH to 0.
-
PATCH versions introduce non-breaking bug fixes.
Releases that only contain fixes are released as patches.
Cut a release
- Decide the next semver version (
X.Y.Z):- Patch (
X.Y.Z+1): backwards-compatible bug fixes. - Minor (
X.Y+1.0): backwards-compatible new functionality. - Major (
X+1.0.0): incompatible API changes.
- Patch (
- Check with the broader team to see if there's any additional functionality someone wishes to merge into the release.
- Open a PR titled
Release vX.Y.Zthat bumpsversioninapp_version.ymlandversioninpackage.jsontoX.Y.Z. Do not include avprefix in the files; the workflow prepends it when tagging. Keep both files in sync with the same version number. - Get review and merge to
main. - The
CDworkflow runs on the merge commit. It builds the Query Connector Docker image forlinux/amd64, pushes it to GHCR with themain,vX.Y.Z,vX.Y,vX, andlatesttags, and deploys that exact image digest to https://connector.dibbs.tools. - Once
CDsucceeds, theReleaseworkflow:- tags the merge commit as
vX.Y.Z - publishes a GitHub Release named
vX.Y.Zwith auto-generated notes - posts the release link to Slack (if configured)
- tags the merge commit as
On GHCR, the vX.Y and vX tags float to the latest release within that line;
the vX.Y.Z tag is immutable.
Because Release only runs after a successful CD run, a release is never
published for an image that failed to build or deploy. Versioned (vX.Y.Z)
images are published to GHCR for downstream consumers to deploy intentionally.
Hotfix
Same flow. Open a PR that bumps the patch number (e.g. 1.0.0 to 1.0.1) and
merge.
Non-release pushes
Pushes to main that do not bump the version field are handled by the
CD workflow, which builds and pushes the Docker image tagged with main
only and deploys it to https://connector.dibbs.tools. No git tag or GitHub
Release is created. This is the normal build and deploy flow.
Redeploying a specific version
Run the CD workflow manually (Actions, CD, "Run workflow") with the
version input set to an existing GHCR tag such as v1.2.3 or main. The
workflow skips the build and deploys that tag's image digest. See
terraform/azure/README.md for how the deployment is structured.
Verification
After merging a release PR, confirm:
- [ ] Actions tab: the
CDrun on the merge commit is green and theReleaserun it triggered is green. - [ ] Demo: https://connector.dibbs.tools serves the new version.
- [ ] Tags:
git fetch --tags && git tag -l "vX.Y.Z"shows the new tag. - [ ] GitHub Releases:
vX.Y.Zis published (not draft) with PR-list notes. - [ ] GHCR:
query-connectorhasvX.Y.Z,vX.Y,vX, andlatesttags pointing at this release. - [ ] Slack: the release-notifications channel received the release link (if configured).
Failure modes
- Tag
vX.Y.Zalready exists at a different commit: theReleaseworkflow fails loudly at the tagging step. Bump to the next available version in a new PR. CDfailed (build or deploy): no tag or release is created. Fix forward onmain; the release is published whenCDnext succeeds on a commit whose version differs from its parent, so a follow-up fix commit will not retroactively publish the release. Re-run the failedCDrun instead.- Partial failure (tag and image created, release step failed): re-run the workflow from the Actions tab. The collision check treats a same-SHA tag as a no-op, and the GitHub Release creation falls back to fetching an existing release, so re-runs are idempotent.
- Non-semver version: the workflow rejects pre-release suffixes
(e.g.
1.0.0-rc.1). Use a strictX.Y.Zformat.
Release notes
GitHub auto-generates notes from PRs merged since the previous vX.Y.Z tag.
The category and exclusion rules live in .github/release.yml.
For more on customizing release notes, see GitHub's automatically generated release notes documentation.