(targets: Target[])
| 653 | }; |
| 654 | |
| 655 | const buildPreviewWrapperPackage = async (targets: Target[]) => { |
| 656 | const meta = await readMetadata(); |
| 657 | const cdnUrl = process.env.EXECUTOR_PREVIEW_CDN_URL?.replace(/\/+$/, ""); |
| 658 | const sha = process.env.EXECUTOR_PREVIEW_SHA; |
| 659 | if (!cdnUrl || !sha) { |
| 660 | throw new Error( |
| 661 | "preview build requires EXECUTOR_PREVIEW_CDN_URL and EXECUTOR_PREVIEW_SHA to be set", |
| 662 | ); |
| 663 | } |
| 664 | |
| 665 | const wrapperDir = join(distDir, meta.name); |
| 666 | const binDir = join(wrapperDir, "bin"); |
| 667 | await mkdir(binDir, { recursive: true }); |
| 668 | |
| 669 | await writeFile(join(binDir, "executor"), NODE_SHIM); |
| 670 | await chmod(join(binDir, "executor"), 0o755); |
| 671 | |
| 672 | const postinstall = PREVIEW_POSTINSTALL_SCRIPT.replaceAll("__CDN_BASE_URL__", `${cdnUrl}/${sha}`); |
| 673 | await writeFile(join(wrapperDir, "postinstall.cjs"), postinstall); |
| 674 | |
| 675 | // Restrict os/cpu to platforms we actually built this run so npm refuses |
| 676 | // the install on anything else — a clear error beats a cryptic 404 from |
| 677 | // postinstall on an unbuilt platform. |
| 678 | const osList = Array.from(new Set(targets.map((t) => t.os))); |
| 679 | const cpuList = Array.from(new Set(targets.map((t) => t.arch))); |
| 680 | |
| 681 | await writeFile( |
| 682 | join(wrapperDir, "package.json"), |
| 683 | JSON.stringify( |
| 684 | { |
| 685 | name: meta.name, |
| 686 | version: meta.version, |
| 687 | description: meta.description, |
| 688 | keywords: meta.keywords, |
| 689 | homepage: meta.homepage, |
| 690 | bugs: meta.bugs, |
| 691 | repository: meta.repository, |
| 692 | license: meta.license, |
| 693 | bin: { executor: "bin/executor" }, |
| 694 | files: ["bin", "postinstall.cjs", "README.md"], |
| 695 | scripts: { postinstall: "node ./postinstall.cjs" }, |
| 696 | os: osList, |
| 697 | cpu: cpuList, |
| 698 | engines: { node: ">=20" }, |
| 699 | }, |
| 700 | null, |
| 701 | 2, |
| 702 | ) + "\n", |
| 703 | ); |
| 704 | |
| 705 | const readmePath = join(repoRoot, "README.md"); |
| 706 | if (existsSync(readmePath)) { |
| 707 | await cp(readmePath, join(wrapperDir, "README.md")); |
| 708 | } |
| 709 | |
| 710 | console.log(`\nPreview wrapper: ${wrapperDir}`); |
| 711 | console.log(` ${meta.name}@${meta.version} — CDN ${cdnUrl}/${sha}`); |
| 712 | console.log(` targets: ${targets.map(targetPackageName).join(", ")}`); |
no test coverage detected