Skip to main content

layero promote

The command forms were verified on 27 July 2026
  • The deploy is given as a positional argument: layero promote <commit-sha>. There is no --deploy= flag. Take the sha from layero deploys list.
  • layero promote --rollback does not exist — the CLI answers unknown option. For the working rollback, see Rollback.

Point a project's production apex at the given deploy. It moves the production_deploy_id pointer — no rebuild — and the apex starts serving the new artifact almost immediately; the only delay is a short edge cache, up to a minute.

What it is for​

Layero's production flow works the way Vercel's does:

  1. Push to any branch → that branch's preview URL
  2. Test it, share it, compare it
  3. Ready to ship — promote the ready deploy you just checked

Without a promote the apex keeps serving the previous production. That is the safeguard against accidental releases right after a merge into main, when auto-promote is off for the team.

Usage​

# promote the latest ready deploy of the default branch
layero promote

# promote by commit SHA (the first 7+ characters) or a full deploy id
layero promote a3f9c2b

# a specific branch → its latest ready deploy
layero promote --branch=staging

# roll back: return the apex to a previous working deploy, by its sha
layero promote <commit-sha>

# CI: no confirmation
layero promote --yes

What happens​

  1. The CLI finds the deploy (by the positional sha, by the latest ready deploy in --branch, or by the latest ready deploy of the default branch).
  2. It shows the plan:
    promote plan:
    from: 1743a29 2026-05-08 20:30 v2.4.1 — bugfix release
    to: ce70191 2026-05-19 07:09 feature: new pricing page
    proceed? [y/N]
  3. Once you confirm, the backend:
    • atomically updates projects.production_deploy_id (a CTE captures the old value into previous_production_deploy_id, for rollbacks);
    • writes to promote_events (an audit log: who, when, source='cli', prev → new);
    • invalidates the resolver cache through a Postgres NOTIFY.
  4. The edge picks up the new artifact at once; previously cached responses refresh on a short TTL, up to a minute.

Rolling back​

layero rollback returns the previous successful deploy and, since 27 July 2026, moves the production pointer with it — see Rollback.

Use promote when you need a specific older deploy rather than the previous one:

layero deploys list # find the commit_sha of a working build
layero promote ff0d1b86 --yes # point the apex back at it

The platform keeps two pointers on the project — production_deploy_id and previous_production_deploy_id. The second is updated on every promote, so the previous working deploy is always visible in the promote history. More in Rollback.

--promote as a flag on layero deploy​

If you want build → promote in one command, without waiting for ready in the UI:

layero deploy --branch=hot-fix --promote --yes

The build finishes, the CLI moves straight to the promote and confirms it. It is equivalent to layero deploy … && layero promote <last-sha>, minus the second manual command.

Limits​

  • You can only promote a ready deploy that has an s3_path (or a registered runtime container).
  • For runtime projects (SSR Next, Streamlit, Gradio, Flask) the promote switches the pointer instantly, but a running instance of the old build keeps answering until it is cycled — the next cold start already uses the new artifact.
  • If auto-promote of the default branch is on, the next push to that branch will overwrite your manual promote. Turn auto-promote off in the project's Settings if you want to keep manual control over production.

Alternatives​

  • In the dashboard, on the deploy page — the "Promote to production" button.
  • On the project page, in the Production card — the "Roll back" button. It works on the backend and moves the production pointer; since 27 July 2026 the CLI's rollback does the same.
  • The promote history — Project → Deploys → "Promote history" (it shows auto vs ui vs cli, and who did it).

How this relates to rollback​

Each branch used to have its own canonical hostname, and layero rollback changed environments.active_deploy_id — that is, it worked per branch. Under V071 the domain model became one-per-project, and a rollback has to move the project's production pointer. For a while the CLI command lagged behind that change and did not bring the apex back; fixed on 27 July 2026 — rollback now moves the pointer too, when the apex is served by the same branch. Details in Rollback.