Files
tutti/tools/scripts/npm-release-packages.test.mjs
agent-radar 2ed3415fb7
Publish Claude Code Binaries / Stage and publish binaries (push) Canceled after 0s
Publish Tutti App Runtime / Build darwin-arm64 (push) Canceled after 0s
Publish Tutti App Runtime / Build darwin-amd64 (push) Canceled after 0s
Publish Tutti App Runtime / Build linux-amd64 (push) Canceled after 0s
Publish Tutti App Runtime / Build windows-amd64 (push) Canceled after 0s
Sync Tutti Agent Skills / sync (push) Canceled after 0s
Windows Agent Adapters / Test Windows agent adapters (push) Canceled after 0s
Windows Daemon Adapters / Test Windows daemon adapters (push) Canceled after 0s
Publish Tutti App Runtime / Publish runtime catalog (push) Canceled after 0s
源码快照 @ 2026-09-01 (source-only, 剔除非源码素材)
2026-09-01 20:17:27 +08:00

216 lines
5.2 KiB
JavaScript

import assert from "node:assert/strict";
import test from "node:test";
import {
collectWorkspaceRuntimeDependencyNames,
isPublicReleaseWorkspacePackage,
parseReleasePackageFilters,
selectReleasePackageNames,
validateReleasePackageSelection
} from "./npm-release-packages.mjs";
function createPackageConfig(name, manifest) {
return {
directory: `packages/test/${name}`,
manifest,
manifestPath: `packages/test/${name}/package.json`,
name
};
}
test("identifies public release workspace packages", () => {
assert.equal(
isPublicReleaseWorkspacePackage({
private: false,
publishConfig: { access: "public" }
}),
true
);
assert.equal(
isPublicReleaseWorkspacePackage({
private: true,
publishConfig: { access: "public" }
}),
false
);
assert.equal(
isPublicReleaseWorkspacePackage({
private: false,
publishConfig: { access: "restricted" }
}),
false
);
});
test("collects runtime dependencies on workspace packages only", () => {
const packageMap = new Map([
[
"@tutti-os/ui-system",
createPackageConfig("@tutti-os/ui-system", {
private: false,
publishConfig: { access: "public" }
})
],
[
"@tutti-os/ui-i18n-runtime",
createPackageConfig("@tutti-os/ui-i18n-runtime", {
private: false,
publishConfig: { access: "public" }
})
]
]);
assert.deepEqual(
[
...collectWorkspaceRuntimeDependencyNames(
{
dependencies: {
"@tutti-os/ui-system": "workspace:*",
react: "^19.1.0"
},
peerDependencies: {
"@tutti-os/ui-i18n-runtime": "workspace:*"
},
devDependencies: {
"@tutti-os/config-tsconfig": "workspace:*"
}
},
packageMap
)
].sort(),
["@tutti-os/ui-i18n-runtime", "@tutti-os/ui-system"]
);
});
test("rejects public workspace packages that are missing from the release group", () => {
const packageMap = new Map([
[
"@tutti-os/workbench-surface",
createPackageConfig("@tutti-os/workbench-surface", {
private: false,
publishConfig: { access: "public" }
})
],
[
"@tutti-os/ui-i18n-runtime",
createPackageConfig("@tutti-os/ui-i18n-runtime", {
private: false,
publishConfig: { access: "public" }
})
]
]);
assert.throws(
() =>
validateReleasePackageSelection(packageMap, [
"@tutti-os/workbench-surface"
]),
/Public workspace packages missing/
);
});
test("rejects runtime workspace dependencies outside the release group", () => {
const packageMap = new Map([
[
"@tutti-os/workbench-surface",
createPackageConfig("@tutti-os/workbench-surface", {
private: false,
publishConfig: { access: "public" },
dependencies: {
"@tutti-os/ui-i18n-runtime": "workspace:*"
}
})
],
[
"@tutti-os/ui-i18n-runtime",
createPackageConfig("@tutti-os/ui-i18n-runtime", {
private: true
})
]
]);
assert.throws(
() =>
validateReleasePackageSelection(packageMap, [
"@tutti-os/workbench-surface"
]),
/must not depend on workspace runtime packages outside the fixed release group/
);
});
test("accepts a complete fixed release group", () => {
const packageMap = new Map([
[
"@tutti-os/workbench-surface",
createPackageConfig("@tutti-os/workbench-surface", {
private: false,
publishConfig: { access: "public" },
dependencies: {
"@tutti-os/ui-i18n-runtime": "workspace:*",
"@tutti-os/ui-system": "workspace:*"
}
})
],
[
"@tutti-os/ui-i18n-runtime",
createPackageConfig("@tutti-os/ui-i18n-runtime", {
private: false,
publishConfig: { access: "public" }
})
],
[
"@tutti-os/ui-system",
createPackageConfig("@tutti-os/ui-system", {
private: false,
publishConfig: { access: "public" }
})
]
]);
assert.doesNotThrow(() =>
validateReleasePackageSelection(packageMap, [
"@tutti-os/workbench-surface",
"@tutti-os/ui-i18n-runtime",
"@tutti-os/ui-system"
])
);
});
test("parses an explicit release package subset", () => {
assert.deepEqual(
parseReleasePackageFilters([
"--",
"--packages-json",
'["@tutti-os/agent-gui","@tutti-os/ui-system"]'
]),
["@tutti-os/agent-gui", "@tutti-os/ui-system"]
);
assert.equal(parseReleasePackageFilters([]), null);
assert.throws(
() => parseReleasePackageFilters(["--package", "@tutti-os/agent-gui"]),
/accepts only --packages-json/u
);
assert.throws(
() => parseReleasePackageFilters(["--packages-json", "[]"]),
/non-empty string array/u
);
});
test("rejects package filters outside the fixed release group", () => {
assert.deepEqual(
selectReleasePackageNames(
["@tutti-os/agent-gui", "@tutti-os/ui-system"],
["@tutti-os/agent-gui"]
),
["@tutti-os/agent-gui"]
);
assert.throws(
() =>
selectReleasePackageNames(
["@tutti-os/agent-gui"],
["@tutti-os/not-released"]
),
/Unknown npm release package filter/u
);
});