layero 0.8.17 → 0.8.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commands/deploys.js +16 -1
- package/package.json +1 -1
package/dist/commands/deploys.js
CHANGED
|
@@ -3,7 +3,7 @@ import chalk from "chalk";
|
|
|
3
3
|
import { ApiClient, ApiError } from "../api.js";
|
|
4
4
|
import { loadConfig } from "../config.js";
|
|
5
5
|
import { loadProjectConfig } from "../project-config.js";
|
|
6
|
-
import { detectMode } from "../agent.js";
|
|
6
|
+
import { detectMode, LayeroError } from "../agent.js";
|
|
7
7
|
async function resolveProjectId(api, cwd, override) {
|
|
8
8
|
if (override) {
|
|
9
9
|
// Accept slug or id; resolve via list to keep consistent error UX.
|
|
@@ -159,6 +159,21 @@ export async function rollbackCmd(opts) {
|
|
|
159
159
|
}
|
|
160
160
|
catch (err) {
|
|
161
161
|
if (err instanceof ApiError) {
|
|
162
|
+
// 409 «not in a rollback-eligible state» — это НЕ сбой платформы, а
|
|
163
|
+
// ожидаемое ограничение, и подавать его кодом `internal` (то есть
|
|
164
|
+
// «сообщите о проблеме») нельзя: человек читает это в момент, когда у
|
|
165
|
+
// него уже что-то сломалось на проде.
|
|
166
|
+
//
|
|
167
|
+
// Две причины дают один и тот же ответ API. Runtime-проекты (SSR,
|
|
168
|
+
// Streamlit, Gradio) не откатываются вообще: их артефакт лежит в
|
|
169
|
+
// реестре образов, а проверка пригодности требует s3_path. У статики
|
|
170
|
+
// артефакт мог быть вычищен по ретенции. Различить их здесь нечем,
|
|
171
|
+
// поэтому называем оба и даём общий выход — пересборку коммита.
|
|
172
|
+
if (err.status === 409 && err.body.includes("rollback-eligible")) {
|
|
173
|
+
throw new LayeroError("rollback_unsupported", "этот деплой нельзя переактивировать: у него нет раздаваемого артефакта", "runtime-проекты (SSR, Streamlit, Gradio) откатывать пока нельзя, " +
|
|
174
|
+
"а у статики артефакт мог быть вычищен по ретенции — " +
|
|
175
|
+
"пересобери нужный коммит через `layero deploy`");
|
|
176
|
+
}
|
|
162
177
|
throw new Error(`rollback failed (${err.status}): ${err.body.slice(0, 200)}`);
|
|
163
178
|
}
|
|
164
179
|
throw err;
|