import { execFileSync } from "node:child_process"; import { existsSync, readFileSync } from "node:fs"; import { fileURLToPath } from "node:url"; import { dirname, join, resolve } from "node:path"; import { describe, expect, it } from "vitest"; import { packageSourceArchive } from "./package-source"; const ROOT = resolve(dirname(fileURLToPath(import.meta.url)), ".."); const RELEASE_LIB = "scripts/release-lib.ts"; function readReleaseLib(): string { return readFileSync(join(ROOT, RELEASE_LIB), "utf8"); } describe("Firefox release source submission", () => { it("passes the generated source archive to web-ext sign with --upload-source-code", () => { const source = readReleaseLib(); expect(source).toContain('"--upload-source-code"'); expect(source).toContain("sourceZip"); expect(source.match(/--upload-source-code/g)).toHaveLength(1); }); it("shared packager builds an archive containing the reviewed crypto source and Noise build script", () => { const archivePath = packageSourceArchive("0.0.0-release-test"); expect(existsSync(archivePath)).toBe(true); const contents = execFileSync("unzip", ["-Z1", archivePath], { encoding: "utf8", }).split("\n"); expect(contents).toEqual( expect.arrayContaining([ "crypto-core/Cargo.toml", "crypto-core/Cargo.lock", "crypto-core/src/lib.rs", "scripts/build-noise-core.mjs", ]), ); expect(existsSync(join(ROOT, "crypto-core/Cargo.toml"))).toBe(true); expect(existsSync(join(ROOT, "crypto-core/Cargo.lock"))).toBe(true); expect(existsSync(join(ROOT, "crypto-core/src/lib.rs"))).toBe(true); expect(existsSync(join(ROOT, "scripts/build-noise-core.mjs"))).toBe(true); }); });