Skip to content
RunDeploy

Releases

A release gives the images CI built for one source commit a durable name. It records four things (a version, the source commit, the exact image digests, and generated notes) as an immutable OCI manifest in the registry, beside the component’s images. An annotated git tag (order-extractor/v1.4.2) is pushed alongside, but the OCI manifest is the release: a tag-push failure is only a warning, and re-running repairs a missing tag.

Publishing a release changes no environment. Whatever each environment was running, it still is. Shipping the release is a separate act, and a separate page: Promote and sync.

Run it inside the component’s source repository:

Terminal window
intropy release create order-extractor --version 1.4.2

The commit is HEAD, and two preconditions protect the meaning of the version:

  • The working tree must be clean under the component’s sourcePaths (from its component.yaml). CI builds pushed commits, so uncommitted changes mean the images do not contain what you are naming. The check is scoped, so unrelated dirty files elsewhere in a monorepo do not block you; --allow-dirty waives it.
  • HEAD must be pushed. An unpushed commit has no image in the registry.

The CLI then resolves the exact digests CI published for that commit. If the pipeline has not finished publishing them, the command fails at that point; pass -w/--watch to poll the registry until the images appear instead. There is no timeout; like kubectl --watch, the wait ends when the image arrives or you interrupt it.

Notes are generated from the component-scoped commits since the closest ancestor release, and the manifest records what they were measured against.

Versions are immutable. Re-running for a version that already exists compares the intended manifest to the published one: an identical release is left in place (and a missing git tag repaired), a different one is refused.

Terminal window
intropy release list order-extractor
VERSION CREATED COMMIT NOTES
1.4.2 2026-07-24 a1b2c3d Retry on port timeouts
1.4.1 2026-07-22 9f8e7d6 Handle empty payloads
1.4.0 2026-07-20 4c5d6e7 Initial release.

Releases are read from the registry, not from git tags, so this reports what is published rather than what tags claim, ordered by publication. A component that has never been released is reported as such rather than treated as an error, and -o json adds each release’s full digest.

intropy release show order-extractor 1.4.2 prints one manifest (source commit, image digests, comparison basis, notes) and verifies that the OCI tag and the manifest’s declared version agree. Use it to sanity-check the generated notes before shipping anything; -o json returns the manifest itself.

Both commands, like the rest of the deploy surface, locate the component by searching the GitOps repository for domains/*/*/<component>; pass --domain/--system if the name is ambiguous. Neither changes any source repository, GitOps remote, or environment.

Separating naming bits from shipping them is the operational backbone of the model:

  • A version always resolves the same digests. The manifest recorded them at creation; nothing re-reads the registry later. A registry tag that has since been moved cannot substitute different bits for what 1.4.2 meant.
  • Deploying a release needs no source checkout. intropy deploy pin order-extractor 1.4.2 --env staging reads the manifest, not HEAD: no cleanliness check, no registry tag lookup, works from any directory. Whoever operates the environment does not need the code that built it.
  • Rollback is pinning an older release. Nothing is rebuilt, nothing is reverted in the source repository: pin 1.4.1 back into the environment and ArgoCD reconciles to digests that already exist and already ran. The speed of a rollback is the speed of a commit.
  • The history stays legible. Deployment commits from a release carry Deploy-Release: 1.4.2 in their trailers, and promotions can report transitions like prod 1.4.1 → 1.4.2, which is possible only because a version durably names its digests.

Full flag detail: intropy release.