MCPcopy Create free account
hub / github.com/UsefulSoftwareCo/executor / buildPreviewWrapperPackage

Function buildPreviewWrapperPackage

apps/cli/src/build.ts:624–682  ·  view source on GitHub ↗
(targets: Target[])

Source from the content-addressed store, hash-verified

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

Callers 1

build.tsFile · 0.85

Calls 3

readMetadataFunction · 0.85
logMethod · 0.80
replaceMethod · 0.65

Tested by

no test coverage detected