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

Function buildPreviewWrapperPackage

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

Source from the content-addressed store, hash-verified

631};
632
633const 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(", ")}`);

Callers 1

build.tsFile · 0.85

Calls 3

readMetadataFunction · 0.85
logMethod · 0.80
replaceMethod · 0.65

Tested by

no test coverage detected