(targets: Target[])
| 702 | }; |
| 703 | |
| 704 | const buildPreviewWrapperPackage = async (targets: Target[]) => { |
| 705 | const meta = await readMetadata(); |
| 706 | const cdnUrl = process.env.EXECUTOR_PREVIEW_CDN_URL?.replace(/\/+$/, ""); |
| 707 | const sha = process.env.EXECUTOR_PREVIEW_SHA; |
| 708 | if (!cdnUrl || !sha) { |
| 709 | throw new Error( |
| 710 | "preview build requires EXECUTOR_PREVIEW_CDN_URL and EXECUTOR_PREVIEW_SHA to be set", |
| 711 | ); |
| 712 | } |
| 713 | |
| 714 | const wrapperDir = join(distDir, meta.name); |
| 715 | const binDir = join(wrapperDir, "bin"); |
| 716 | await mkdir(binDir, { recursive: true }); |
| 717 | |
| 718 | await writeFile(join(binDir, "executor"), NODE_SHIM); |
| 719 | await chmod(join(binDir, "executor"), 0o755); |
| 720 | |
| 721 | const postinstall = PREVIEW_POSTINSTALL_SCRIPT.replaceAll("__CDN_BASE_URL__", `${cdnUrl}/${sha}`); |
| 722 | await writeFile(join(wrapperDir, "postinstall.cjs"), postinstall); |
| 723 | |
| 724 | // Restrict os/cpu to platforms we actually built this run so npm refuses |
| 725 | // the install on anything else — a clear error beats a cryptic 404 from |
| 726 | // postinstall on an unbuilt platform. |
| 727 | const osList = Array.from(new Set(targets.map((t) => t.os))); |
| 728 | const cpuList = Array.from(new Set(targets.map((t) => t.arch))); |
| 729 | |
| 730 | await writeFile( |
| 731 | join(wrapperDir, "package.json"), |
| 732 | JSON.stringify( |
| 733 | { |
| 734 | name: meta.name, |
| 735 | version: meta.version, |
| 736 | description: meta.description, |
| 737 | keywords: meta.keywords, |
| 738 | homepage: meta.homepage, |
| 739 | bugs: meta.bugs, |
| 740 | repository: meta.repository, |
| 741 | license: meta.license, |
| 742 | bin: { executor: "bin/executor" }, |
| 743 | files: ["bin", "postinstall.cjs", "README.md"], |
| 744 | scripts: { postinstall: "node ./postinstall.cjs" }, |
| 745 | os: osList, |
| 746 | cpu: cpuList, |
| 747 | engines: { node: ">=20" }, |
| 748 | }, |
| 749 | null, |
| 750 | 2, |
| 751 | ) + "\n", |
| 752 | ); |
| 753 | |
| 754 | const readmePath = join(repoRoot, "README.md"); |
| 755 | if (existsSync(readmePath)) { |
| 756 | await cp(readmePath, join(wrapperDir, "README.md")); |
| 757 | } |
| 758 | |
| 759 | console.log(`\nPreview wrapper: ${wrapperDir}`); |
| 760 | console.log(` ${meta.name}@${meta.version} — CDN ${cdnUrl}/${sha}`); |
| 761 | console.log(` targets: ${targets.map(targetPackageName).join(", ")}`); |
no test coverage detected