fix(release): detect packaged bundled runtime layouts

This commit is contained in:
Peter Steinberger
2026-05-02 02:33:56 +01:00
parent caa697e4cb
commit 7d89d4997e
2 changed files with 22 additions and 1 deletions

View File

@@ -705,10 +705,22 @@ export async function runPluginRegistryPostinstallMigration(params = {}) {
export function isSourceCheckoutRoot(params) {
const pathExists = params.existsSync ?? existsSync;
const readFile = params.readFileSync ?? readFileSync;
const hasPostinstallInventory = pathExists(join(params.packageRoot, DIST_INVENTORY_PATH));
let hasDeclaredMirroredPackageRuntimeDeps = false;
try {
const packageJson = JSON.parse(readFile(join(params.packageRoot, "package.json"), "utf8"));
const mirrored = packageJson?.openclaw?.bundle?.mirroredRootRuntimeDependencies;
hasDeclaredMirroredPackageRuntimeDeps = Array.isArray(mirrored) && mirrored.length > 0;
} catch {
hasDeclaredMirroredPackageRuntimeDeps = false;
}
const hasPackagedRuntimeDepsLayout =
hasPostinstallInventory || hasDeclaredMirroredPackageRuntimeDeps;
return (
(pathExists(join(params.packageRoot, ".git")) ||
(pathExists(join(params.packageRoot, "pnpm-workspace.yaml")) && !hasPostinstallInventory)) &&
(pathExists(join(params.packageRoot, "pnpm-workspace.yaml")) &&
!hasPackagedRuntimeDepsLayout)) &&
pathExists(join(params.packageRoot, "src")) &&
pathExists(join(params.packageRoot, "extensions"))
);

View File

@@ -140,6 +140,7 @@ describe("bundled plugin postinstall", () => {
it("does not classify published packages with source files as source checkouts", () => {
const packageRoot = "/pkg";
const existingPaths = new Set([
path.join(packageRoot, "package.json"),
path.join(packageRoot, "pnpm-workspace.yaml"),
path.join(packageRoot, "src"),
path.join(packageRoot, "extensions"),
@@ -150,6 +151,14 @@ describe("bundled plugin postinstall", () => {
isSourceCheckoutRoot({
packageRoot,
existsSync: (value: string) => existingPaths.has(value),
readFileSync: () =>
JSON.stringify({
openclaw: {
bundle: {
mirroredRootRuntimeDependencies: ["json5"],
},
},
}),
}),
).toBe(false);
});