Skip to main content
Bakes a recipe into a VM image. By default the bake executes immediately under your own authority via the imperative Bake API — no change-request is created. With --propose the same content is staged as a BakeAction change-request, left PENDING for a reviewer whose approval runs the identical executor.

Flags

Examples

Bake now (executes immediately):
Propose a bake for someone else to approve:

Semantics

  • One executor, two doors. A direct bake and an approved BakeAction change-request run the same executor with the same authority: bake.create plus service-profile.assume (and placement-sa.assume when a service account is pinned) — bound to whoever executes (the caller, or the approver). Proposing needs only change-request.create + recipe.read. A direct bake creates no change-request record.
  • Idempotent. The bake workflow ID is deterministic from the recipe content, so re-issuing identical content joins the running bake or no-ops on the cached image — it never double-bakes. Use --force-new to bake identical content fresh.
  • Validated up front. The full spec (base image for the placement’s substrate, machine-type region availability, service-account binding match) resolves before anything runs — for proposals, again at execution — so an unbakeable request is rejected immediately.
  • Automated re-bakes. Modifying a recipe’s bake-consumed fields auto-proposes one BakeAction change-request per distinct configuration in your bake history (source: recipe_bake), so a reviewer approves each re-bake against the new content. Track executions with murmur bakes ls.