mirror of
https://github.com/Sea-Haven-Industries/shoc-frontend-new.git
synced 2026-09-30 06:53:12 +00:00
74 lines
2.5 KiB
JavaScript
74 lines
2.5 KiB
JavaScript
|
|
import assert from "node:assert/strict";
|
||
|
|
import { spawnSync } from "node:child_process";
|
||
|
|
import path from "node:path";
|
||
|
|
import { describe, it } from "node:test";
|
||
|
|
import { fileURLToPath } from "node:url";
|
||
|
|
|
||
|
|
import {
|
||
|
|
liveIsolationFileSets,
|
||
|
|
shouldRunLiveIsolation,
|
||
|
|
usesPerCommitIsolation,
|
||
|
|
} from "./g13-live-isolation.mjs";
|
||
|
|
|
||
|
|
const SCRIPT_DIR = path.dirname(fileURLToPath(import.meta.url));
|
||
|
|
const CLASSIFIER = path.join(SCRIPT_DIR, "check_app_terraform_isolation.py");
|
||
|
|
const TERRAFORM_ONLY = ["terraform/live/dev/main.tf"];
|
||
|
|
const APP_ONLY = ["src/app/routes.tsx"];
|
||
|
|
|
||
|
|
function classify(files) {
|
||
|
|
const result = spawnSync("python3", [CLASSIFIER, ...files], { encoding: "utf8" });
|
||
|
|
return result.status;
|
||
|
|
}
|
||
|
|
|
||
|
|
function anySetFails(fileSets) {
|
||
|
|
return fileSets.some((files) => classify(files) !== 0);
|
||
|
|
}
|
||
|
|
|
||
|
|
describe("shouldRunLiveIsolation", () => {
|
||
|
|
it("runs locally and on pull_request", () => {
|
||
|
|
assert.equal(shouldRunLiveIsolation(undefined), true);
|
||
|
|
assert.equal(shouldRunLiveIsolation(""), true);
|
||
|
|
assert.equal(shouldRunLiveIsolation("pull_request"), true);
|
||
|
|
});
|
||
|
|
|
||
|
|
it("runs on merge_group so the required check classifies the candidate", () => {
|
||
|
|
assert.equal(shouldRunLiveIsolation("merge_group"), true);
|
||
|
|
assert.equal(usesPerCommitIsolation("merge_group"), true);
|
||
|
|
});
|
||
|
|
|
||
|
|
it("skips push and other CI events", () => {
|
||
|
|
assert.equal(shouldRunLiveIsolation("push"), false);
|
||
|
|
assert.equal(shouldRunLiveIsolation("workflow_dispatch"), false);
|
||
|
|
assert.equal(usesPerCommitIsolation("pull_request"), false);
|
||
|
|
});
|
||
|
|
});
|
||
|
|
|
||
|
|
describe("liveIsolationFileSets", () => {
|
||
|
|
it("classifies the PR range as one change set", () => {
|
||
|
|
const range = [...TERRAFORM_ONLY, ...APP_ONLY];
|
||
|
|
const sets = liveIsolationFileSets("pull_request", range, [
|
||
|
|
{ files: TERRAFORM_ONLY },
|
||
|
|
{ files: APP_ONLY },
|
||
|
|
]);
|
||
|
|
assert.deepEqual(sets, [range]);
|
||
|
|
assert.equal(anySetFails(sets), true);
|
||
|
|
});
|
||
|
|
|
||
|
|
it("classifies each queued PR, not the merge-group union", () => {
|
||
|
|
const union = [...TERRAFORM_ONLY, ...APP_ONLY];
|
||
|
|
const sets = liveIsolationFileSets("merge_group", union, [
|
||
|
|
{ files: TERRAFORM_ONLY },
|
||
|
|
{ files: APP_ONLY },
|
||
|
|
]);
|
||
|
|
assert.deepEqual(sets, [TERRAFORM_ONLY, APP_ONLY]);
|
||
|
|
assert.equal(anySetFails(sets), false);
|
||
|
|
assert.equal(classify(union), 1);
|
||
|
|
});
|
||
|
|
|
||
|
|
it("fails a single queued PR that mixes terraform and app files", () => {
|
||
|
|
const mixed = [...TERRAFORM_ONLY, ...APP_ONLY];
|
||
|
|
const sets = liveIsolationFileSets("merge_group", mixed, [{ files: mixed }]);
|
||
|
|
assert.equal(anySetFails(sets), true);
|
||
|
|
});
|
||
|
|
});
|