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