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

Function buildPreviewWrapperPackage

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

Source from the content-addressed store, hash-verified

653};
654
655const 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(", ")}`);

Callers 1

build.tsFile · 0.85

Calls 3

readMetadataFunction · 0.85
logMethod · 0.80
replaceMethod · 0.65

Tested by

no test coverage detected