fix: enforce release metadata consistency (#297)
This commit is contained in:
@@ -1,5 +1,86 @@
|
||||
import { describe, expect, test } from "bun:test"
|
||||
import { buildCompoundEngineeringDescription } from "../src/release/metadata"
|
||||
import { mkdtemp, mkdir, writeFile } from "fs/promises"
|
||||
import os from "os"
|
||||
import path from "path"
|
||||
import { afterEach, describe, expect, test } from "bun:test"
|
||||
import { buildCompoundEngineeringDescription, syncReleaseMetadata } from "../src/release/metadata"
|
||||
|
||||
const tempRoots: string[] = []
|
||||
|
||||
afterEach(async () => {
|
||||
for (const root of tempRoots.splice(0, tempRoots.length)) {
|
||||
await Bun.$`rm -rf ${root}`.quiet()
|
||||
}
|
||||
})
|
||||
|
||||
async function makeFixtureRoot(): Promise<string> {
|
||||
const root = await mkdtemp(path.join(os.tmpdir(), "release-metadata-"))
|
||||
tempRoots.push(root)
|
||||
|
||||
await mkdir(path.join(root, "plugins", "compound-engineering", "agents", "review"), {
|
||||
recursive: true,
|
||||
})
|
||||
await mkdir(path.join(root, "plugins", "compound-engineering", "skills", "ce-plan"), {
|
||||
recursive: true,
|
||||
})
|
||||
await mkdir(path.join(root, "plugins", "compound-engineering", ".claude-plugin"), {
|
||||
recursive: true,
|
||||
})
|
||||
await mkdir(path.join(root, "plugins", "compound-engineering", ".cursor-plugin"), {
|
||||
recursive: true,
|
||||
})
|
||||
await mkdir(path.join(root, "plugins", "coding-tutor", ".claude-plugin"), {
|
||||
recursive: true,
|
||||
})
|
||||
await mkdir(path.join(root, "plugins", "coding-tutor", ".cursor-plugin"), {
|
||||
recursive: true,
|
||||
})
|
||||
await mkdir(path.join(root, ".claude-plugin"), { recursive: true })
|
||||
|
||||
await writeFile(
|
||||
path.join(root, "plugins", "compound-engineering", "agents", "review", "agent.md"),
|
||||
"# Review Agent\n",
|
||||
)
|
||||
await writeFile(
|
||||
path.join(root, "plugins", "compound-engineering", "skills", "ce-plan", "SKILL.md"),
|
||||
"# ce:plan\n",
|
||||
)
|
||||
await writeFile(
|
||||
path.join(root, "plugins", "compound-engineering", ".mcp.json"),
|
||||
JSON.stringify({ mcpServers: { context7: { command: "ctx7" } } }, null, 2),
|
||||
)
|
||||
await writeFile(
|
||||
path.join(root, "plugins", "compound-engineering", ".claude-plugin", "plugin.json"),
|
||||
JSON.stringify({ version: "2.42.0", description: "old" }, null, 2),
|
||||
)
|
||||
await writeFile(
|
||||
path.join(root, "plugins", "compound-engineering", ".cursor-plugin", "plugin.json"),
|
||||
JSON.stringify({ version: "2.33.0", description: "old" }, null, 2),
|
||||
)
|
||||
await writeFile(
|
||||
path.join(root, "plugins", "coding-tutor", ".claude-plugin", "plugin.json"),
|
||||
JSON.stringify({ version: "1.2.1" }, null, 2),
|
||||
)
|
||||
await writeFile(
|
||||
path.join(root, "plugins", "coding-tutor", ".cursor-plugin", "plugin.json"),
|
||||
JSON.stringify({ version: "1.2.1" }, null, 2),
|
||||
)
|
||||
await writeFile(
|
||||
path.join(root, ".claude-plugin", "marketplace.json"),
|
||||
JSON.stringify(
|
||||
{
|
||||
metadata: { version: "1.0.0", description: "marketplace" },
|
||||
plugins: [
|
||||
{ name: "compound-engineering", version: "2.41.0", description: "old" },
|
||||
{ name: "coding-tutor", version: "1.2.0", description: "old" },
|
||||
],
|
||||
},
|
||||
null,
|
||||
2,
|
||||
),
|
||||
)
|
||||
|
||||
return root
|
||||
}
|
||||
|
||||
describe("release metadata", () => {
|
||||
test("builds the current compound-engineering manifest description from repo counts", async () => {
|
||||
@@ -8,4 +89,13 @@ describe("release metadata", () => {
|
||||
"AI-powered development tools. 29 agents, 44 skills, 1 MCP server for code review, research, design, and workflow automation.",
|
||||
)
|
||||
})
|
||||
|
||||
test("detects cross-surface version drift even without explicit override versions", async () => {
|
||||
const root = await makeFixtureRoot()
|
||||
const result = await syncReleaseMetadata({ root, write: false })
|
||||
const changedPaths = result.updates.filter((update) => update.changed).map((update) => update.path)
|
||||
|
||||
expect(changedPaths).toContain(path.join(root, "plugins", "compound-engineering", ".cursor-plugin", "plugin.json"))
|
||||
expect(changedPaths).toContain(path.join(root, ".claude-plugin", "marketplace.json"))
|
||||
})
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user