40 lines
2.3 KiB
JavaScript
40 lines
2.3 KiB
JavaScript
import test from "node:test";
|
|
import assert from "node:assert/strict";
|
|
import { readFileSync } from "node:fs";
|
|
|
|
const workflow = readFileSync(new URL("../../workflows/pr-trusted.yml", import.meta.url), "utf8");
|
|
const jobs = [...workflow.matchAll(/^ ([a-z_][a-z_0-9]*):\n([\s\S]*?)(?=^ [a-z_][a-z_0-9]*:\n|$(?![\s\S]))/gm)];
|
|
const installers = jobs.filter(([, , body]) => body.includes("run: pnpm install --frozen-lockfile"));
|
|
|
|
test("PR workflows restore dependency stores without creating branch copies", () => {
|
|
assert.equal(installers.length, 7);
|
|
assert.doesNotMatch(workflow, /^ +cache: pnpm$/m);
|
|
assert.doesNotMatch(workflow, /uses: actions\/cache(?:@|\/save@)/);
|
|
for (const [, job, body] of jobs) {
|
|
for (const step of body.split(" - name:").filter((step) => step.includes("uses: actions/setup-node@"))) {
|
|
assert.match(step, /package-manager-cache: false/, job);
|
|
}
|
|
}
|
|
const policy = jobs.find(([, name]) => name === "policy")[2];
|
|
assert.doesNotMatch(policy, /uses: actions\/cache|cache: pnpm/);
|
|
});
|
|
|
|
for (const [, job, body] of installers) {
|
|
test(`${job}: reuse master keys before restoring the resolved PR lockfile`, () => {
|
|
const locate = body.indexOf(" - name: Locate pnpm store");
|
|
const restore = body.indexOf(" - name: Restore pnpm store (read only)");
|
|
const artifact = body.indexOf(" - name: Restore regenerated PR lockfile");
|
|
const install = body.indexOf("run: pnpm install --frozen-lockfile");
|
|
assert.ok(locate >= 0 && locate < restore && restore < artifact && artifact < install);
|
|
const cache = body.slice(restore, artifact);
|
|
assert.match(body.slice(locate, restore), /pnpm store path --silent/);
|
|
assert.match(body.slice(locate, restore), /node -p 'process.arch'/);
|
|
assert.match(cache, /uses: actions\/cache\/restore@[a-f0-9]{40}/);
|
|
assert.ok(cache.includes("key: node-cache-${{ runner.os }}-${{ steps.pnpm_store.outputs.arch }}-pnpm-${{ hashFiles('pnpm-lock.yaml') }}"));
|
|
assert.ok(cache.includes("restore-keys: node-cache-${{ runner.os }}-${{ steps.pnpm_store.outputs.arch }}-pnpm-"));
|
|
assert.match(body.slice(artifact, install), /if: needs.policy.outputs.lockfile_regenerated == '1'/);
|
|
assert.match(body.slice(artifact, install), /name: pr-lockfile/);
|
|
assert.doesNotMatch(body.slice(artifact, install), /continue-on-error/);
|
|
});
|
|
}
|