Compatibility matrix
Go and Bun are contributor requirements, not operator requirements. An
installation runs the images published to
ghcr.io/kewldan/omniflow/* and
never needs a Go or Bun toolchain on the host.main line is tested and built
against. A future 1.x release that changes a supported version updates this
row, and a version bump that removes support for something in this table is
called out in CHANGELOG.md rather than silently dropped — see
Deprecation policy.
Versioning and release artifacts
Releases follow Semantic Versioning and are cut by Release Please from Conventional Commits, which also generatesCHANGELOG.md — nothing is hand-written after the fact.
Each tagged release publishes four multi-arch (linux/amd64,
linux/arm64) container images to GitHub Container Registry:
X.Y so a deployment can track a minor line
without floating on latest.
SBOM, provenance, and signatures
Every image build attaches an SBOM and SLSA-style build provenance (docker/build-push-action’s sbom: true and provenance: mode=max), and is
then signed keyless with cosign
using the release workflow’s own GitHub Actions OIDC identity — there is no
signing key to manage, rotate, or leak. The signature is recorded in the
public Rekor transparency log.
Verify an image before deploying it:
docker buildx imagetools inspect --format '{{ json .SBOM }}' ghcr.io/kewldan/omniflow/api:vX.Y.Z (and
.Provenance for the build provenance).
Upgrade testing
CI’smigrations job proves every supported upgrade path before a change
merges: it applies the schema from an empty database through every prefix of
the migration history to head, and confirms re-applying head a second time is
a no-op. That is what “automated upgrade tests” means in practice — a
migration that only compiles is unverified, so this runs against a real
PostgreSQL on every change, not only at release time.
The step-by-step upgrade, rollback, and PostgreSQL major-version upgrade
procedures live in
Backup, restore, and disaster recovery
rather than being duplicated here.
Migration policy and supported upgrade window
- Migrations are forward-only. Omniflow does not ship down-migrations; a schema rollback is a restore from the backup taken immediately before the upgrade, as described in Rolling back.
- A migration is never edited after it has shipped in a release. A schema
change always ships as a new migration, and its checksum in
database/migrations/atlas.sumis generated byatlas migrate hash, never hand-edited. - Upgrades apply sequentially through released versions — the supported
upgrade window is exactly what CI’s
migrationsjob tests as a baseline: every prefix of the migration history to head. There is no supported path that skips applying an intermediate release’s migrations; themigrateservice applies whatever has not yet run, in order, every time the stack starts. - Applying migrations twice is always safe: Atlas records what has already run and a re-apply is a no-op.
Deprecation policy
A deprecation is announced before it is removed, and removal is always aCHANGELOG.md entry — never a silent behavior change.
- API. A deprecated OpenAPI operation or field is marked
deprecated: trueinapi/openapi.yamland keeps working for at least one further minor release before it can be removed. - Environment variables. A deprecated variable keeps working, its
replacement is documented alongside it for at least one minor release, and
its eventual removal is called out in
CHANGELOG.mdrather than causing a silent startup-behavior change. - Database behavior. A behavior change ships additively first — a new column or table alongside the old one — rather than rewriting existing behavior in the same release that introduces its replacement. The transition itself, not just the endpoint, is a reviewed migration.
- Integrations. A Remnawave or payment-provider adapter supports the
versions actually exercised by its contract tests, published in the
compatibility matrix above. Dropping support for a
version is a
CHANGELOG.mdentry, not a silent contract-test change.
Related
Deployment
Compose topology, volumes, and the images this matrix describes.
Backup, restore, and disaster recovery
The step-by-step upgrade, rollback, and PostgreSQL major-version upgrade procedures.