fix: use RootlessKit for sentinel BuildKit readiness
This commit is contained in:
@@ -761,7 +761,7 @@ export function sentinelPublishImageBuildShell(state: SentinelCicdState, jobName
|
||||
"buildkit_log=/workspace/buildkitd.log",
|
||||
"mkdir -p \"$(dirname \"$buildkit_socket\")\"",
|
||||
"rm -f \"$buildkit_socket\"",
|
||||
"buildkitd --addr \"$buildkit_address\" ${BUILDKITD_FLAGS:-} > \"$buildkit_log\" 2>&1 &",
|
||||
"rootlesskit buildkitd --addr \"$buildkit_address\" ${BUILDKITD_FLAGS:-} > \"$buildkit_log\" 2>&1 &",
|
||||
"buildkitd_pid=$!",
|
||||
"buildkit_ready=false",
|
||||
"buildkit_probe_attempt=0",
|
||||
|
||||
@@ -1,7 +1,10 @@
|
||||
import { describe, expect, test } from "bun:test";
|
||||
import { spawnSync } from "node:child_process";
|
||||
import { readFileSync } from "node:fs";
|
||||
import { resolve } from "node:path";
|
||||
import { createRequire } from "node:module";
|
||||
import { sentinelPublishImageBuildShell } from "./hwlab-node-web-sentinel-cicd-jobs";
|
||||
import type { SentinelCicdState } from "./hwlab-node-web-sentinel-cicd-shared";
|
||||
import { compactHistoryJson, compactStatusSummary, renderDebugStep, renderHistory, renderStatus } from "./platform-infra-pipelines-as-code";
|
||||
|
||||
const require = createRequire(import.meta.url);
|
||||
@@ -58,13 +61,30 @@ describe("PaC 失败证据合同", () => {
|
||||
});
|
||||
|
||||
test("sentinel image build 显式等待 socket 与 worker readiness 并清理 daemon", () => {
|
||||
const source = readFileSync(resolve(import.meta.dir, "hwlab-node-web-sentinel-cicd-jobs.ts"), "utf8");
|
||||
expect(source).toContain("mkdir -p \\\"$(dirname \\\"$buildkit_socket\\\")\\\"");
|
||||
expect(source).toContain("buildkitd --addr");
|
||||
expect(source).toContain("debug workers");
|
||||
expect(source).toContain("failure_error_type=BuildKitReadinessError");
|
||||
expect(source).toContain("failure_error_code=BUILDKIT_NOT_READY");
|
||||
expect(source).toContain("cleanup_buildkitd");
|
||||
expect(source).not.toContain("buildctl-daemonless.sh build");
|
||||
const shell = sentinelPublishImageBuildShell({
|
||||
spec: {
|
||||
nodeId: "NC01",
|
||||
lane: "v03",
|
||||
buildkit: { sidecarImage: "moby/buildkit:rootless" },
|
||||
networkProfile: { imageBuildProxy: { http: "", https: "", all: "", noProxy: [] } },
|
||||
},
|
||||
image: {
|
||||
ref: "registry.example.test/web-probe-sentinel:test",
|
||||
monitorWeb: {
|
||||
imageBuildPackageMode: "frozen-lockfile",
|
||||
imageBuildNetworkMode: "host",
|
||||
imageBuildProxySource: "test",
|
||||
},
|
||||
},
|
||||
} as unknown as SentinelCicdState, "sentinel-test");
|
||||
expect(shell).toContain("mkdir -p \"$(dirname \"$buildkit_socket\")\"");
|
||||
expect(shell).toContain("rootlesskit buildkitd --addr");
|
||||
expect(shell).not.toMatch(/(^|\n)buildkitd --addr/);
|
||||
expect(shell).toContain("debug workers");
|
||||
expect(shell).toContain("failure_error_type=BuildKitReadinessError");
|
||||
expect(shell).toContain("failure_error_code=BUILDKIT_NOT_READY");
|
||||
expect(shell).toContain("cleanup_buildkitd");
|
||||
expect(shell).not.toContain("buildctl-daemonless.sh build");
|
||||
expect(spawnSync("sh", ["-n"], { input: shell, encoding: "utf8" })).toMatchObject({ status: 0, stderr: "" });
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user