Сборка шаблона
Template.build отправляет описание и ждёт завершения. Метод возвращает имя, ID шаблона и ID сборки. В параметрах можно задать CPU, память, теги, skipCache и обработчик логов.
Для долгой сборки используйте buildInBackground в JavaScript или build_in_background в Python. Метод сразу возвращает идентификаторы, а getBuildStatus или get_build_status позволяет получить состояние и новую часть логов.
mjs
import { Template } from "@abox-dev/sdk";
const templateName = process.env.TEMPLATE_NAME ?? "background-build";
const template = Template().fromBaseImage().runCmd("echo build-ready");
const build = await Template.buildInBackground(template, templateName);
let logsOffset = 0;
while (true) {
const current = await Template.getBuildStatus(build, { logsOffset });
logsOffset += current.logEntries.length;
for (const entry of current.logEntries) {
console.log(entry.toString());
}
if (current.status === "ready") {
console.log(`Build ${build.buildId} is ready`);
break;
}
if (current.status === "error") {
throw new Error(current.reason?.message ?? "Template build failed");
}
await new Promise((resolve) => setTimeout(resolve, 2_000));
}Возможные состояния: building, waiting, ready и error. Увеличивайте logsOffset на число уже обработанных записей, чтобы не получать их повторно.
Для обычного скрипта проще использовать build. Фоновая сборка полезна в фоновой задаче или CI, где ожиданием управляет ваше приложение.