Skip to content

Commit db2e453

Browse files
committed
fix: make CI smoke checks portable
1 parent 2d966df commit db2e453

2 files changed

Lines changed: 34 additions & 3 deletions

File tree

universal-refiner/scripts/acceptance/package-runtime-smoke.mjs

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,8 @@ try {
2828
const bin = process.platform === "win32"
2929
? join(prefixDir, "gemini-prompt-refiner.cmd")
3030
: join(prefixDir, "bin", "gemini-prompt-refiner");
31-
const installedEntry = join(prefixDir, "node_modules", "gemini-prompt-refiner", "dist", "src", "index.js");
31+
const packageRoot = await findInstalledPackageRoot(prefixDir);
32+
const installedEntry = join(packageRoot, "dist", "src", "index.js");
3233
await access(bin);
3334
await access(installedEntry);
3435
const port = await reservePort();
@@ -93,6 +94,29 @@ function runNpm(args) {
9394
: runProcess(npmCommand, args, { cwd: repoRoot, timeoutMs });
9495
}
9596

97+
async function findInstalledPackageRoot(prefixDir) {
98+
const candidates = process.platform === "win32"
99+
? [
100+
join(prefixDir, "node_modules", "gemini-prompt-refiner"),
101+
join(prefixDir, "lib", "node_modules", "gemini-prompt-refiner"),
102+
]
103+
: [
104+
join(prefixDir, "lib", "node_modules", "gemini-prompt-refiner"),
105+
join(prefixDir, "node_modules", "gemini-prompt-refiner"),
106+
];
107+
108+
for (const candidate of candidates) {
109+
try {
110+
await access(candidate);
111+
return candidate;
112+
} catch {
113+
// Try the next npm global install layout.
114+
}
115+
}
116+
117+
throw new Error(`Installed package root not found under npm prefix ${prefixDir}. Tried: ${candidates.join(", ")}`);
118+
}
119+
96120
async function waitForHealth(port, readLogs, deadlineMs) {
97121
const deadline = Date.now() + deadlineMs;
98122
let lastError = "";

universal-refiner/tests/register-global.test.ts

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,13 @@ import { tmpdir } from "node:os";
88
const repoRoot = resolve(import.meta.dirname, "..");
99
const script = join(repoRoot, "register-global.ps1");
1010
const roots: string[] = [];
11+
const powershell = process.platform === "win32" ? "powershell.exe" : "pwsh";
12+
const powershellAvailable = spawnSync(
13+
powershell,
14+
["-NoProfile", "-Command", "$PSVersionTable.PSVersion.ToString()"],
15+
{ encoding: "utf8" },
16+
).status === 0;
17+
const describeIfPowerShell = powershellAvailable ? describe : describe.skip;
1118

1219
function makeRoot(): string {
1320
const root = join(tmpdir(), `promptimprover-register-${process.pid}-${Date.now()}-${roots.length}`, "KimHarjamäki");
@@ -17,7 +24,7 @@ function makeRoot(): string {
1724
}
1825

1926
function run(root: string, mode: "-Check" | "-Apply") {
20-
return spawnSync("powershell.exe", [
27+
return spawnSync(powershell, [
2128
"-NoProfile",
2229
"-ExecutionPolicy", "Bypass",
2330
"-File", script,
@@ -31,7 +38,7 @@ afterEach(() => {
3138
for (const root of roots.splice(0)) rmSync(root, { recursive: true, force: true });
3239
});
3340

34-
describe("global registration doctor", () => {
41+
describeIfPowerShell("global registration doctor", () => {
3542
it("applies idempotent Unicode-safe merges while preserving unrelated config", () => {
3643
const root = makeRoot();
3744
mkdirSync(join(root, ".claude"), { recursive: true });

0 commit comments

Comments
 (0)