fix(pac): 修正 runtime GitOps verify marker 条件
This commit is contained in:
@@ -281,26 +281,60 @@ describe("HWLAB YAML-owned Pipeline provenance", () => {
|
||||
name: "gitops-promote",
|
||||
taskSpec: { steps: [{
|
||||
name: "render",
|
||||
script: "node scripts/run-bun.mjs scripts/gitops-render.mjs --use-deploy-images\nnode scripts/run-bun.mjs scripts/gitops-render.mjs --use-deploy-images --check\n",
|
||||
script: [
|
||||
"if [ -s /workspace/source/affected-services.json ] && node - /workspace/source/affected-services.json <<'NODE'",
|
||||
"const fs = require(\"node:fs\");",
|
||||
"const plan = JSON.parse(fs.readFileSync(process.argv[2], \"utf8\"));",
|
||||
"const buildServices = Array.isArray(plan.buildServices) ? plan.buildServices : [];",
|
||||
"const affectedServices = Array.isArray(plan.affectedServices) ? plan.affectedServices : [];",
|
||||
"const willRunGitopsPromote = plan.ciCdPlan && plan.ciCdPlan.willRunGitopsPromote === true;",
|
||||
"process.exit(!willRunGitopsPromote && buildServices.length === 0 && affectedServices.length === 0 ? 0 : 1);",
|
||||
"NODE",
|
||||
"then",
|
||||
" printf 'false' > /tekton/results/runtime-ready-required || true",
|
||||
" echo '{\"event\":\"gitops-promote\",\"status\":\"skipped\",\"reason\":\"no-build-no-rollout-plan\"}'",
|
||||
" exit 0",
|
||||
"fi",
|
||||
"node scripts/run-bun.mjs scripts/gitops-render.mjs --use-deploy-images",
|
||||
"node scripts/run-bun.mjs scripts/gitops-render.mjs --use-deploy-images --check",
|
||||
"",
|
||||
].join("\n"),
|
||||
}] },
|
||||
}] },
|
||||
}));
|
||||
const overlayBase64 = Buffer.from(JSON.stringify(overlay), "utf8").toString("base64");
|
||||
const postprocessInput = [
|
||||
"set -eu",
|
||||
`render_dir=${JSON.stringify(temporary)}`,
|
||||
`overlay_b64=${JSON.stringify(overlayBase64)}`,
|
||||
...nodeRuntimePipelinePostprocessScript(),
|
||||
].join("\n");
|
||||
const result = spawnSync("sh", [], {
|
||||
cwd: rootPath(),
|
||||
input: [
|
||||
"set -eu",
|
||||
`render_dir=${JSON.stringify(temporary)}`,
|
||||
`overlay_b64=${JSON.stringify(overlayBase64)}`,
|
||||
...nodeRuntimePipelinePostprocessScript(),
|
||||
].join("\n"),
|
||||
input: postprocessInput,
|
||||
encoding: "utf8",
|
||||
timeout: 30_000,
|
||||
});
|
||||
expect(result.status, result.stderr).toBe(0);
|
||||
const pipeline = Bun.YAML.parse(readFileSync(pipelinePath, "utf8")) as Record<string, any>;
|
||||
const guardedPipelineText = readFileSync(pipelinePath, "utf8");
|
||||
const repeated = spawnSync("node", [
|
||||
resolve(temporary, ".unidesk-runtime-gitops", "runtime-gitops-pipeline-guard.mjs"),
|
||||
"--pipeline", pipelinePath,
|
||||
], {
|
||||
cwd: rootPath(),
|
||||
env: { ...process.env, UNIDESK_RUNTIME_GITOPS_OVERLAY_B64: overlayBase64 },
|
||||
encoding: "utf8",
|
||||
timeout: 30_000,
|
||||
});
|
||||
expect(repeated.status, repeated.stderr).toBe(0);
|
||||
expect(readFileSync(pipelinePath, "utf8")).toBe(guardedPipelineText);
|
||||
const pipeline = Bun.YAML.parse(guardedPipelineText) as Record<string, any>;
|
||||
const scripts = pipeline.spec.tasks.flatMap((task: Record<string, any>) => task.taskSpec.steps.map((step: Record<string, any>) => String(step.script ?? "")));
|
||||
expect(Math.max(...scripts.map((script: string) => Buffer.byteLength(script)))).toBeLessThanOrEqual(budget as number);
|
||||
expect(scripts.join("\n")).toContain("process.exit(buildServices.length === 0 && affectedServices.length === 0 ? 0 : 1);");
|
||||
expect(scripts.join("\n")).not.toContain("!willRunGitopsPromote");
|
||||
expect(scripts.join("\n")).toContain("no-build-no-rollout-plan-gitops-verify");
|
||||
expect(scripts.join("\n")).not.toContain('"status":"skipped","reason":"no-build-no-rollout-plan"');
|
||||
expect(scripts.join("\n")).toContain("UNIDESK_RUNTIME_GITOPS_OVERLAY_FILE=/etc/unidesk-cicd-runtime-gitops/runtime-gitops-overlay.json");
|
||||
expect(scripts.join("\n")).not.toContain("NODE_UNIDESK_RUNTIME_GITOPS_POSTPROCESS");
|
||||
expect(scripts.join("\n")).not.toContain("NODE_UNIDESK_RUNTIME_GITOPS_VERIFY");
|
||||
|
||||
Reference in New Issue
Block a user