mirror of
https://github.com/openclaw/openclaw.git
synced 2026-03-27 09:21:35 +07:00
* fix(channels): ship official channel catalog (#52838) * fix(release): keep shipped bundles in npm tar (#52838) * build(release): fix rebased release-check helpers (#52838)
147 lines
4.3 KiB
TypeScript
147 lines
4.3 KiB
TypeScript
import fs from "node:fs";
|
|
import os from "node:os";
|
|
import path from "node:path";
|
|
import { afterEach, describe, expect, it } from "vitest";
|
|
import {
|
|
buildOfficialChannelCatalog,
|
|
OFFICIAL_CHANNEL_CATALOG_RELATIVE_PATH,
|
|
writeOfficialChannelCatalog,
|
|
} from "../scripts/write-official-channel-catalog.mjs";
|
|
|
|
const tempDirs: string[] = [];
|
|
|
|
function makeRepoRoot(prefix: string): string {
|
|
const repoRoot = fs.mkdtempSync(path.join(os.tmpdir(), prefix));
|
|
tempDirs.push(repoRoot);
|
|
return repoRoot;
|
|
}
|
|
|
|
function writeJson(filePath: string, value: unknown): void {
|
|
fs.mkdirSync(path.dirname(filePath), { recursive: true });
|
|
fs.writeFileSync(filePath, `${JSON.stringify(value, null, 2)}\n`, "utf8");
|
|
}
|
|
|
|
afterEach(() => {
|
|
for (const dir of tempDirs.splice(0, tempDirs.length)) {
|
|
fs.rmSync(dir, { recursive: true, force: true });
|
|
}
|
|
});
|
|
|
|
describe("buildOfficialChannelCatalog", () => {
|
|
it("includes publishable official channel plugins and skips non-publishable entries", () => {
|
|
const repoRoot = makeRepoRoot("openclaw-official-channel-catalog-");
|
|
writeJson(path.join(repoRoot, "extensions", "whatsapp", "package.json"), {
|
|
name: "@openclaw/whatsapp",
|
|
version: "2026.3.23",
|
|
description: "OpenClaw WhatsApp channel plugin",
|
|
openclaw: {
|
|
channel: {
|
|
id: "whatsapp",
|
|
label: "WhatsApp",
|
|
selectionLabel: "WhatsApp (QR link)",
|
|
detailLabel: "WhatsApp Web",
|
|
docsPath: "/channels/whatsapp",
|
|
blurb: "works with your own number; recommend a separate phone + eSIM.",
|
|
},
|
|
install: {
|
|
npmSpec: "@openclaw/whatsapp",
|
|
localPath: "extensions/whatsapp",
|
|
defaultChoice: "npm",
|
|
},
|
|
release: {
|
|
publishToNpm: true,
|
|
},
|
|
},
|
|
});
|
|
writeJson(path.join(repoRoot, "extensions", "local-only", "package.json"), {
|
|
name: "@openclaw/local-only",
|
|
openclaw: {
|
|
channel: {
|
|
id: "local-only",
|
|
label: "Local Only",
|
|
selectionLabel: "Local Only",
|
|
docsPath: "/channels/local-only",
|
|
blurb: "dev only",
|
|
},
|
|
install: {
|
|
localPath: "extensions/local-only",
|
|
},
|
|
release: {
|
|
publishToNpm: false,
|
|
},
|
|
},
|
|
});
|
|
|
|
expect(buildOfficialChannelCatalog({ repoRoot })).toEqual({
|
|
entries: [
|
|
{
|
|
name: "@openclaw/whatsapp",
|
|
version: "2026.3.23",
|
|
description: "OpenClaw WhatsApp channel plugin",
|
|
openclaw: {
|
|
channel: {
|
|
id: "whatsapp",
|
|
label: "WhatsApp",
|
|
selectionLabel: "WhatsApp (QR link)",
|
|
detailLabel: "WhatsApp Web",
|
|
docsPath: "/channels/whatsapp",
|
|
blurb: "works with your own number; recommend a separate phone + eSIM.",
|
|
},
|
|
install: {
|
|
npmSpec: "@openclaw/whatsapp",
|
|
localPath: "extensions/whatsapp",
|
|
defaultChoice: "npm",
|
|
},
|
|
},
|
|
},
|
|
],
|
|
});
|
|
});
|
|
|
|
it("writes the official catalog under dist", () => {
|
|
const repoRoot = makeRepoRoot("openclaw-official-channel-catalog-write-");
|
|
writeJson(path.join(repoRoot, "extensions", "whatsapp", "package.json"), {
|
|
name: "@openclaw/whatsapp",
|
|
openclaw: {
|
|
channel: {
|
|
id: "whatsapp",
|
|
label: "WhatsApp",
|
|
selectionLabel: "WhatsApp",
|
|
docsPath: "/channels/whatsapp",
|
|
blurb: "wa",
|
|
},
|
|
install: {
|
|
npmSpec: "@openclaw/whatsapp",
|
|
},
|
|
release: {
|
|
publishToNpm: true,
|
|
},
|
|
},
|
|
});
|
|
|
|
writeOfficialChannelCatalog({ repoRoot });
|
|
|
|
const outputPath = path.join(repoRoot, OFFICIAL_CHANNEL_CATALOG_RELATIVE_PATH);
|
|
expect(fs.existsSync(outputPath)).toBe(true);
|
|
expect(JSON.parse(fs.readFileSync(outputPath, "utf8"))).toEqual({
|
|
entries: [
|
|
{
|
|
name: "@openclaw/whatsapp",
|
|
openclaw: {
|
|
channel: {
|
|
id: "whatsapp",
|
|
label: "WhatsApp",
|
|
selectionLabel: "WhatsApp",
|
|
docsPath: "/channels/whatsapp",
|
|
blurb: "wa",
|
|
},
|
|
install: {
|
|
npmSpec: "@openclaw/whatsapp",
|
|
},
|
|
},
|
|
},
|
|
],
|
|
});
|
|
});
|
|
});
|