fix(cicd): preserve validator shell status
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
import { expect, test } from "bun:test";
|
||||
import { mkdtempSync, mkdirSync, readFileSync, rmSync, writeFileSync } from "node:fs";
|
||||
import { mkdtempSync, mkdirSync, readFileSync, readdirSync, rmSync, writeFileSync } from "node:fs";
|
||||
import { tmpdir } from "node:os";
|
||||
import { join, resolve } from "node:path";
|
||||
import { spawnSync } from "node:child_process";
|
||||
@@ -35,8 +35,10 @@ test("HWLAB, AgentRun, and Sentinel normal stages validate without source worksp
|
||||
try {
|
||||
const source = join(root, "source");
|
||||
const rendered = join(root, "rendered");
|
||||
const temp = join(root, "tmp");
|
||||
mkdirSync(join(source, "config"), { recursive: true });
|
||||
mkdirSync(rendered, { recursive: true });
|
||||
mkdirSync(temp);
|
||||
writeFileSync(join(source, "config", "feature-config.schema.json"), JSON.stringify({
|
||||
$schema: "https://json-schema.org/draft/2020-12/schema",
|
||||
type: "object",
|
||||
@@ -59,10 +61,16 @@ test("HWLAB, AgentRun, and Sentinel normal stages validate without source worksp
|
||||
repoDirExpression: JSON.stringify(source),
|
||||
renderedRootExpression: JSON.stringify(rendered),
|
||||
});
|
||||
const result = spawnSync("sh", [], { input: `set -eu\n${stage}\n`, encoding: "utf8" });
|
||||
const result = spawnSync("sh", [], {
|
||||
input: `set -eu\n${stage}\n`,
|
||||
encoding: "utf8",
|
||||
env: { ...process.env, TMPDIR: temp },
|
||||
});
|
||||
expect(result.status, consumer.consumer).toBe(0);
|
||||
expect(result.stderr, consumer.consumer).toContain('"code":"feature-config-schema-valid"');
|
||||
expect(result.stderr, consumer.consumer).not.toContain("feature-config-validator-unavailable");
|
||||
expect(result.stderr, consumer.consumer).not.toContain("feature-config-validator-process-failure");
|
||||
expect(readdirSync(temp), consumer.consumer).toEqual([]);
|
||||
}
|
||||
} finally {
|
||||
rmSync(root, { recursive: true, force: true });
|
||||
@@ -73,7 +81,9 @@ test("embedded node process failure remains a typed warning with zero shell exit
|
||||
const root = mkdtempSync(join(tmpdir(), "feature-config-stage-"));
|
||||
try {
|
||||
const bin = join(root, "bin");
|
||||
const temp = join(root, "tmp");
|
||||
mkdirSync(bin);
|
||||
mkdirSync(temp);
|
||||
writeFileSync(join(bin, "node"), "#!/bin/sh\nexit 71\n", { mode: 0o755 });
|
||||
const stage = renderPacFeatureConfigSchemaStage({
|
||||
repositoryId: "sentinel-nc01-v03",
|
||||
@@ -83,11 +93,12 @@ test("embedded node process failure remains a typed warning with zero shell exit
|
||||
});
|
||||
const result = spawnSync("sh", [], {
|
||||
input: `set -eu\n${stage}\n`,
|
||||
env: { ...process.env, PATH: `${bin}:${process.env.PATH ?? ""}` },
|
||||
env: { ...process.env, PATH: `${bin}:${process.env.PATH ?? ""}`, TMPDIR: temp },
|
||||
encoding: "utf8",
|
||||
});
|
||||
expect(result.status).toBe(0);
|
||||
expect(result.stderr).toContain("feature-config-validator-process-failure");
|
||||
expect(readdirSync(temp)).toEqual([]);
|
||||
} finally {
|
||||
rmSync(root, { recursive: true, force: true });
|
||||
}
|
||||
|
||||
@@ -49,10 +49,10 @@ export function renderPacFeatureConfigSchemaStage(options: PacFeatureConfigSchem
|
||||
" consumer: process.env.UNIDESK_PAC_CONSUMER,",
|
||||
"});",
|
||||
"NODE_UNIDESK_FEATURE_CONFIG_SCHEMA",
|
||||
...(materializeBundle ? ["if [ -n \"$feature_config_ajv_bundle\" ]; then rm -f \"$feature_config_ajv_bundle\" || true; fi"] : []),
|
||||
"then",
|
||||
" printf '{\"event\":\"feature-config-schema-validation\",\"warning\":true,\"blocking\":false,\"code\":\"feature-config-validator-process-failure\",\"mutation\":false,\"valuesPrinted\":false}\\n' >&2",
|
||||
"fi",
|
||||
...(materializeBundle ? ["if [ -n \"$feature_config_ajv_bundle\" ]; then rm -f \"$feature_config_ajv_bundle\" || true; fi"] : []),
|
||||
"if command -v ci_timing_emit >/dev/null 2>&1; then",
|
||||
" ci_timing_emit feature-config-schema-validation succeeded \"$feature_config_schema_started_ms\"",
|
||||
"else",
|
||||
|
||||
Reference in New Issue
Block a user