Skip to main content
push uploads each definition file to the revision exactly as it stands on disk. No compiler runs, nothing is skipped for being unchanged, and an alias the revision does not have yet is created on the way. It is the write half of the pull/push pair, and it is rarely the command you want for code: a manifest that binds a Python package expects build to have run first, or deploy to do both. push is for a document you edited directly.

Synopsis

What it does

  1. Loads the manifest and resolves its blob and revision. This is a write, so the revision must have status ready and phase draft or managed; commit is refused.
  2. Lists the revision’s definitions in both categories and matches the manifest against them.
  3. For each entry, reads the source document — a missing file is MANIFEST_INVALID, not a silent skip — and uploads it. An alias absent from the revision is created first.
  4. Prints drift, then one line per definition:
A newly created definition appears on both lines, because both calls happened. Under --json the payload carries created, uploaded, planned, dry_run and drift, alongside the envelope’s schema_version.

Creating an absent alias takes two calls

create_definition writes an empty stub — an alias, a category, and for a playground its canonical layout — and nothing else. upload_definition is then a full replace of that stub’s document. The platform offers no create-with-content call, so the sequence is two calls, in that order, and push performs both. The gap between them is why a freshly created definition briefly exists with no content, and why an interrupted push can leave a stub behind. Re-running push fixes it: the alias now exists, so the second run skips straight to the upload. For a playground, the layout handed to create_definition comes from the document being pushed. The platform canonicalizes it at creation and compares every later upload against it, so the layout you create with is the layout that definition keeps.

Verbatim means unvalidated

upload_definition validates nothing. The workflow and playground upload schemas are placeholders that accept any object, so a malformed document — or a playground document uploaded into a workflow definition — is accepted without complaint and corrupts that definition silently. Two things stand between you and that. The manifest’s category rule catches the document/category mismatch locally, because nothing server-side will. And check is what tells you whether what you uploaded is a workflow the platform can run — push never runs it, unlike deploy. push also uploads every definition it resolves, changed or not. Only deploy compares against the remote document first.

--dry-run

Resolves everything and reports the intended calls without making them:
The two actions are distinguished, so a dry run tells you which aliases the revision does not have yet.

Errors

push has no rollback. It uploads definitions in manifest order, and a failure on the third leaves the first two uploaded — which is a state, not a corruption: re-running after the fix re-uploads all three. Every code above, with its remediation, is in Error codes.

See also