Skip to content

cub release publish

cub release publish

Publish a release

Synopsis

Publish a Release for the Space's release Target, bundling the Units in that are assigned to that Target.

is the Space whose Units are bundled (and becomes the Release's Space); a Space ID is also accepted. The consuming Target is the Space's ReleaseTargetID, set via cub space create/update --release-target.

By default each bundled Unit is captured at its head Revision. Pass --revision to instead pin each Unit to the highest-numbered Revision carrying a Tag. A Unit the Tag marks no Revision of is left out of the Release, and listed as skipped, when it has never been released; once a Unit has been released, the Tag has to mark one of its Revisions, since leaving it out would delete it from the Target.

Each Unit's Revision is selected by Tag, so what --revision names has to come down to one Tag. A Tag does; so do the boundaries of a ChangeSet and a ChangeOrder, which is how a whole change is released rather than a Revision number that means something different in every Unit:

--revision | Tag: the Revision that Tag marks --revision ChangeSet: where a Closed ChangeSet ended --revision Before:ChangeSet: the state it started from --revision ChangeOrder: the change order's release tag --revision Before:ChangeOrder: the state before it

A ChangeOrder's release tag marks every releasable Unit of each Space the change is in, at the state the change left it in, and follows what resolving Links within the Space writes after the promotion. Publishing by ChangeOrder publishes for that ChangeOrder: its release prerequisites are checked against what is bundled, and its stage is advanced. Move the release tag to adopt a later Revision of a Unit before releasing with "cub unit tag --move".

A Release of a ChangeOrder can carry revisions from before the change: a unit's revisions after its last released one, up to where the change starts, which an earlier change promoted on from this Space without releasing it here. --prior-revisions Error refuses such a Release, naming them and the change orders they belong to; Include, the default, releases them.

--dry-run publishes in a transaction that is rolled back, reporting the Release that would be published or why it would be refused.

A revision number, a Revision ID and the named revisions each pick out a Revision of one Unit, so they are not accepted. Slugs resolve like any other entity slug: in --space, or across the organization when there is none, unless qualified as space/slug.

--label, --annotation and --delete-gate set the Release's metadata at publish time; cub release update can change it afterwards. The bundled content itself is fixed once published, and so is --bundle-base-name: the release's OCI manifest records the name, so it can only be set here.

Publishing a Space that is unchanged since its latest published Release succeeds without creating a Release, and reports "No change".

Examples:

  cub release publish my-space

  # Bundle each Unit at the Revision tagged "v1.2.0"
  cub release publish --revision v1.2.0 my-space

  # Bundle each Unit at the Revision a closed ChangeSet ended on
  cub release publish --revision ChangeSet:rollout-42 my-space

  # Release a change order, after checking what would be released
  cub release publish --revision ChangeOrder:bump-base-image --dry-run my-space
  cub release publish --revision ChangeOrder:bump-base-image my-space

  # Release the state a promotion started from, to roll it back
  cub release publish --revision Before:ChangeOrder:bump-base-image my-space

  # Publish with metadata, and a gate that blocks deleting the Release
  cub release publish --label env=prod --annotation ticket=OPS-1234 my-space
  cub release publish --delete-gate retention/30-days my-space
cub release publish <variant> [flags]

Options

      --annotation strings        annotations in key=value format; can separate by commas and/or use multiple instances of the flag
      --bundle-base-name string   base filename for the release's stored bundle, without the .tar.gz suffix; defaults to the bundled Unit's slug for a single-Unit release and to the Space's slug otherwise
      --delete-gate strings       delete gates in key[=true] format; can separate by commas and/or use multiple instances of the flag
      --dry-run                   publish in a transaction that is rolled back: report the release that would be published, or why it would be refused, including a change order's release prerequisites, and publish nothing
  -h, --help                      help for publish
      --label strings             labels in key=value format; can separate by commas and/or use multiple instances of the flag
  -o, --output string             Output format. One of: json, yaml, name, wide, mutations, jq=<expr>, yq=<expr>, custom-columns=<spec>
      --permission strings        permission in format Action:UserIDOrUsername, Action:group:GroupSlugOrID for a group you belong to, or Action:serviceaccount:ServiceAccountSlugOrID (e.g., Manage:user@example.com, View:group:platform, View:serviceaccount:deploy-bot, can be repeated)
      --prior-revisions string    with --revision ChangeOrder:<slug>, what to do with a unit's revisions from before the change -- after its last released revision, up to where the change starts: Include releases them; Error refuses, naming them and the change orders they belong to. Defaults to the change order's ReleasePriorRevisions
      --quiet                     No default output.
      --revision string           Which tagged Revision to bundle for each Unit, as a Tag (slug, Tag:slug, space/slug or Tag ID) or as a ChangeSet:slug or ChangeOrder:slug boundary, optionally prefixed with Before:. A Unit without a matching tagged Revision is skipped if it has never been released, and refused otherwise.
      --verbose                   Detailed output, additive with default output

Options inherited from parent commands

      --component string   the Component of --variant, when that names the variant alone; --variant <component>/<variant> says the same in one flag
      --context string     The context to use for this command
      --debug              Debug output
      --space string       space to operate in, by slug or UUID. Omitted, a list or bulk operation spans the organization and a single entity is named as <space>/<slug>
      --variant string     variant to operate in, as <component>/<variant>, or as <variant> with --component: the space naming that Component whose Variant label is <variant>. The same scope as --space, named by what it is rather than by the space's slug; the two cannot be combined

SEE ALSO