Appearance
Release Process
See also: Contributing, Deploy and Operations, Admin Runbooks, ADR: Cocogitto Releases, git-cliff Changelogs, and GHCR Image Publishing
This runbook explains how maintainers publish an Oceans LLM release.
Release Contract
Oceans LLM uses one Semantic Version for the gateway, admin UI, container images, and Helm chart. A tag named vX.Y.Z identifies the source for all release artifacts.
Run one command to create and publish a release:
bash
mise run releaseThe command creates the version commit and tag, pushes them, and creates a published GitHub release. The pushed tag starts the distribution workflow.
Source Files
- mise.toml defines the release and changelog tasks.
- cog.toml defines versioning and pre-bump hooks.
- cliff.toml defines changelog content and layout.
- release.yml builds and publishes release artifacts.
- Helm chart defines the Kubernetes package.
Merge and Changelog Rules
Pull request titles must follow Conventional Commits. Merge commits include the pull request number, author, and link in the generated changelog.
git-cliff removes duplicate entries across each release. It keeps the later commit so the pull request link remains. It also keeps distinct scoped entries and any breaking-change marker from the duplicate commits.
The changelog uses these groups in this order:
:rocket: New featuresforfeatcommits.:bug: Bug fixesforfixcommits.Changedforperf,refactor,revert,docs,chore, and other public changes.
Build, CI, style, and test commits do not appear by default. Use a changelog: ignore commit footer when another conventional commit must not appear. Breaking commits remain visible even when their type is normally hidden.
Before a Release
Before you run the release command:
- Update local
mainfromorigin/main. - Confirm that normal CI passed for the current commit.
- Confirm that generated admin contract files are current.
- Confirm that changelog-worthy commits have clear titles.
- Set a valid
GITHUB_TOKENfor git-cliff and the GitHub CLI.
You can preview the next version and changelog without creating a release:
bash
mise run release-dry-runPublish a Release
Run this command from main:
bash
mise run releaseThe command completes these steps:
- Update the pricing catalog.
- Ask Cocogitto to calculate the next version.
- Update workspace Cargo versions.
- Regenerate
CHANGELOG.md. - Create the release commit and
vX.Y.Ztag. - Push
mainand the tag to GitHub. - Create the published GitHub release with notes from git-cliff.
The release tag points to a commit that contains the Cargo version changes and the new changelog section.
Distribution Workflow
The pushed v* tag starts release.yml. The workflow:
- Builds and publishes the gateway image for
linux/amd64. - Builds and publishes the admin UI image for
linux/amd64andlinux/arm64. - Adds provenance attestations to both images.
- Validates, packages, and publishes the Helm chart after both image jobs pass.
The workflow publishes the Helm chart to:
text
oci://ghcr.io/ahstn/charts/oceans-llmFor a tag named vX.Y.Z, the chart version is X.Y.Z and its appVersion is vX.Y.Z.
Verify the Release
After the workflow finishes, verify:
- The GitHub release notes are correct.
- The gateway and admin UI image tags exist.
- Image digests and provenance attestations exist.
- The Helm chart version exists at the expected OCI path.
- The deploy documentation matches the published image platforms.
If the release changed behavior for admins or users, confirm that the canonical documentation describes that behavior.
Failure Recovery
If the command fails before it pushes the tag, inspect the local commit, tag, and worktree before you rerun it.
If the tag was pushed but GitHub release creation failed, create the release for the same tag after you correct the GitHub CLI or permission problem.
If the distribution workflow failed, fix the workflow problem and rerun the failed jobs for the same tag when the source is valid. Do not move a published tag to a different commit.
CI Boundary
Normal CI is the quality gate for the release source. Tag CI builds and publishes the distribution artifacts. The release command does not replace either gate.
