1import { execFileSync } from "node:child_process";2import { existsSync, readFileSync } from "node:fs";3import { fileURLToPath } from "node:url";4import { dirname, join, resolve } from "node:path";5import { describe, expect, it } from "vitest";67import { packageSourceArchive } from "./package-source";89const ROOT = resolve(dirname(fileURLToPath(import.meta.url)), "..");10const RELEASE_LIB = "scripts/release-lib.ts";1112function readReleaseLib(): string {13 return readFileSync(join(ROOT, RELEASE_LIB), "utf8");14}1516describe("Firefox release source submission", () => {17 it("passes the generated source archive to web-ext sign with --upload-source-code", () => {18 const source = readReleaseLib();19 expect(source).toContain('"--upload-source-code"');20 expect(source).toContain("sourceZip");21 expect(source.match(/--upload-source-code/g)).toHaveLength(1);22 });2324 it("shared packager builds an archive containing the reviewed crypto source and Noise build script", () => {25 const archivePath = packageSourceArchive("0.0.0-release-test");26 expect(existsSync(archivePath)).toBe(true);2728 const contents = execFileSync("unzip", ["-Z1", archivePath], {29 encoding: "utf8",30 }).split("\n");3132 expect(contents).toEqual(33 expect.arrayContaining([34 "crypto-core/Cargo.toml",35 "crypto-core/Cargo.lock",36 "crypto-core/src/lib.rs",37 "scripts/build-noise-core.mjs",38 ]),39 );4041 expect(existsSync(join(ROOT, "crypto-core/Cargo.toml"))).toBe(true);42 expect(existsSync(join(ROOT, "crypto-core/Cargo.lock"))).toBe(true);43 expect(existsSync(join(ROOT, "crypto-core/src/lib.rs"))).toBe(true);44 expect(existsSync(join(ROOT, "scripts/build-noise-core.mjs"))).toBe(true);45 });46});