Rollback
Откатить production apex <org>-<project>.layero.ru на предыдущий production-деплой. Без пересборки, без выбора commit'а — Layero запоминает прошлое значение указателя при каждом promote, и rollback просто меняет их местами.
Зачем
Только что promote'нули новый билд, и оказалось, что он сломал production. Нужно мгновенно вернуть рабочую версию.
Pересборка предыдущего commit'а из git-истории не сработает идемпотентно: npm install против сегодняшнего реестра может дать другой node_modules (lockfile drift, transitive republish). Rollback берёт тот же артефакт, что работал раньше — он уже в S3.
Использование
# rollback: вернуть apex на предыдущий production
layero promote --rollback
# CI: без подтверждения
layero promote --rollback --yes
Это эквивалентно кнопке «Откатить production» на странице проекта в UI.
Как это работает
Под капотом Layero хранит два указателя на проекте:
projects.production_deploy_id ── что apex отдаёт прямо сейчас
projects.previous_production_deploy_id ── что отдавал до прошлого promote'а
Rollback — это атомарный swap этих двух полей одним SQL-апдейтом. Apex моментально (через CDN edge cache propagation, ~30–60 сек) возвращается на прошлый рабочий билд.
previous_production_deploy_id обновляется автоматически при каждом promote'е (UI / CLI / auto-promote), так что rollback всегда есть «куда».
Стабильность ping-pong: вызвав layero promote --rollback два раза подряд, вы вернётесь в исходную точку. Удобно когда хочется: откатить → проверить старую версию → вернуть новую обратно.
Что происходит
- CLI показывает план:
rollback plan:from: ce70191 2026-05-19 07:09 feature: new pricing page (current production)to: 1743a29 2026-05-08 20:30 v2.4.0 — stable release (previous production)proceed? [y/N]
- После confirm бэкенд:
- Атомарный swap
production_deploy_id ↔ previous_production_deploy_id. - Запись в
promote_events(action='promote', source='cli', с заметкой что это rollback). - Инвалидация resolver-кеша через Postgres NOTIFY.
- Атомарный swap
- CDN propagation — 30–60 секунд, и apex отдаёт прошлую версию.
Ограничения
- На проекте должен быть минимум один предыдущий promote — иначе rollback'у некуда (CLI вернёт ошибку с понятным сообщением).
- Rollback двигает production apex проекта; preview-URL'ы веток остаются нетронутыми — у каждой ветки своя независимая история деплоев.
- Для runtime-проектов (SSR Next, Streamlit, Gradio, Flask) rollback переключает указатель моментально, но running-инстанс старого билда продолжает отвечать пока его не дёрнут (cold-start на следующем запросе уже на старом артефакте).
Альтернативы
- В UI: Project page → Production card → кнопка «Откатить».
- Откатить на конкретный деплой (не предыдущий):
layero promote --deploy=<sha>. См.layero promote. - Если хочется rebuild прошлого коммита (а не reuse артефакта) — обычный
layero deployс тем кодом или Redeploy в дашборде.
Что было раньше (до V071)
В прошлой модели у каждой ветки был свой канонический hostname <branch>.layero.ru, и layero rollback менял environments.active_deploy_id per-ветка. С переходом на «один apex на проект» rollback теперь — это операция уровня проекта, не env'а. Команда layero rollback удалена; используйте layero promote --rollback.