77 lines
3.3 KiB
TypeScript
77 lines
3.3 KiB
TypeScript
import { readFile } from "node:fs/promises";
|
|
import { describe, expect, it } from "vitest";
|
|
|
|
describe("package installation workflows", () => {
|
|
it("runs package E2E without the retired native rebuild script", async () => {
|
|
const continuousIntegration = await readFile(
|
|
new URL("../.github/workflows/ci.yml", import.meta.url),
|
|
"utf8",
|
|
);
|
|
const realHopperLinux = await readFile(
|
|
new URL("../.github/workflows/real-hopper-linux.yml", import.meta.url),
|
|
"utf8",
|
|
);
|
|
const realHopperMac = await readFile(
|
|
new URL("../.github/workflows/real-hopper.yml", import.meta.url),
|
|
"utf8",
|
|
);
|
|
|
|
expect(continuousIntegration).toContain("os: [ubuntu-latest, macos-14]");
|
|
expect(continuousIntegration).toContain("npm run verify:package");
|
|
expect(continuousIntegration).toContain("name: Static checks");
|
|
expect(continuousIntegration).toContain("npm run check:ci");
|
|
expect(continuousIntegration).toContain("shard: [1/2, 2/2]");
|
|
expect(continuousIntegration).toContain("needs: [changes, test-shard]");
|
|
expect(continuousIntegration).toContain("if-no-files-found: error");
|
|
expect(continuousIntegration).toContain("overwrite: true");
|
|
expect(continuousIntegration).toContain(
|
|
"code: ${{ steps.package.outputs.required }}",
|
|
);
|
|
expect(continuousIntegration).toContain("CODE_REQUIRED:");
|
|
expect(continuousIntegration).toContain(
|
|
'test "${CODE_REQUIRED}" != "true" || test "${SHARD_RESULT}" = "success"',
|
|
);
|
|
expect(continuousIntegration).toContain("npm run test:ci:merge");
|
|
expect(continuousIntegration).toContain("needs: changes");
|
|
expect(continuousIntegration).toContain(
|
|
"cancel-in-progress: ${{ github.event_name == 'pull_request' }}",
|
|
);
|
|
for (const workflow of [
|
|
continuousIntegration,
|
|
realHopperLinux,
|
|
realHopperMac,
|
|
])
|
|
expect(workflow).not.toContain("npm run rebuild:native");
|
|
for (const workflow of [realHopperLinux, realHopperMac])
|
|
expect(workflow).toContain("npm install --global --ignore-scripts");
|
|
for (const workflow of [realHopperLinux, realHopperMac])
|
|
expect(workflow).toContain(
|
|
"REA_HOPPER_CONFORMANCE_MANIFEST_PATH: ${{ github.workspace }}/build/conformance/manifest.json",
|
|
);
|
|
expect(realHopperLinux).not.toContain("HOPPER_TARGET_PATH");
|
|
expect(realHopperLinux).not.toContain("HOPPER_SECOND_TARGET_PATH");
|
|
expect(realHopperLinux).not.toContain("first_target");
|
|
expect(realHopperLinux).not.toContain("second_target");
|
|
});
|
|
|
|
it("verifies the package before publish and runs published canaries outside the checkout", async () => {
|
|
const release = await readFile(
|
|
new URL("../.github/workflows/release.yml", import.meta.url),
|
|
"utf8",
|
|
);
|
|
const canary = await readFile(
|
|
new URL("../scripts/verify-published-package.mjs", import.meta.url),
|
|
"utf8",
|
|
);
|
|
|
|
expect(release.indexOf("npm run verify:package")).toBeLessThan(
|
|
release.indexOf("npm publish --access public"),
|
|
);
|
|
expect(release).toContain('verification_root="$(mktemp -d)"');
|
|
expect(release).toContain('cd "${verification_root}"');
|
|
expect(release).not.toContain('npm run verify:published -- "${version}"');
|
|
expect(canary).toContain('mkdtemp(join(tmpdir(), "rea-published-canary-")');
|
|
expect(canary).toContain("cwd: canaryRoot");
|
|
});
|
|
});
|