39 lines
1.4 KiB
JavaScript
39 lines
1.4 KiB
JavaScript
import { test } from "node:test";
|
|
import assert from "node:assert/strict";
|
|
import { readFile } from "node:fs/promises";
|
|
import { resolve } from "node:path";
|
|
|
|
const repoRoot = resolve(import.meta.dirname, "../../..");
|
|
|
|
test("Docker context retains every runner-local traceability test", async () => {
|
|
const runnerRoot = resolve(repoRoot, "packages/paperclip-runner");
|
|
const manifest = JSON.parse(
|
|
await readFile(resolve(runnerRoot, "spec/evals/stress-workflow-traceability.json"), "utf8"),
|
|
);
|
|
const dockerignore = await readFile(resolve(repoRoot, ".dockerignore"), "utf8");
|
|
const retainedPaths = new Set(
|
|
dockerignore
|
|
.split(/\r?\n/u)
|
|
.map((line) => line.trim())
|
|
.filter((line) => line.startsWith("!") && !line.endsWith("/**"))
|
|
.map((line) => line.slice(1)),
|
|
);
|
|
|
|
const runnerLocalTests = new Set(
|
|
manifest.findings
|
|
.flatMap((finding) => finding.regressionTests)
|
|
.filter((path) => !path.startsWith("../../"))
|
|
.map((path) => `packages/paperclip-runner/${path}`),
|
|
);
|
|
const missing = [...runnerLocalTests].filter((path) => !retainedPaths.has(path));
|
|
|
|
assert.deepEqual(missing, []);
|
|
});
|
|
|
|
test("Docker context probe walks the traceability manifest", async () => {
|
|
const probe = await readFile(resolve(repoRoot, ".github/docker-context-checks.Dockerfile"), "utf8");
|
|
|
|
assert.match(probe, /stress-workflow-traceability\.json/u);
|
|
assert.match(probe, /finding\.regressionTests/u);
|
|
});
|