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

Function buildPreviewWrapperPackage

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

Source from the content-addressed store, hash-verified

702};
703
704const 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(", ")}`);

Callers 1

build.tsFile · 0.85

Calls 3

readMetadataFunction · 0.85
logMethod · 0.80
replaceMethod · 0.65

Tested by

no test coverage detected