fix(ci): retry published package verification

This commit is contained in:
morluto 2026-07-18 14:40:42 +08:00
parent e564eac631
commit c379455da7
2 changed files with 39 additions and 12 deletions

View File

@ -49,13 +49,16 @@ jobs:
run: | run: |
version="$(node --input-type=module -e 'import packageJson from "./package.json" with { type: "json" }; process.stdout.write(packageJson.version)')" version="$(node --input-type=module -e 'import packageJson from "./package.json" with { type: "json" }; process.stdout.write(packageJson.version)')"
for attempt in 1 2 3 4 5 6; do for attempt in 1 2 3 4 5 6; do
if npm view "rea-agents@${version}" version --json >/dev/null 2>&1; then if npm view "rea-agents@${version}" version --json >/dev/null 2>&1 \
npx --yes --package "rea-agents@${version}" rea --help && npm exec --yes --package="rea-agents@${version}" -- rea --help \
npx --yes --package "rea-agents@${version}" rea --llms && npm exec --yes --package="rea-agents@${version}" -- rea --llms \
npm run verify:published -- "${version}" && npm run verify:published -- "${version}"; then
exit 0 exit 0
fi fi
if [ "${attempt}" -lt 6 ]; then sleep 10; fi if [ "${attempt}" -lt 6 ]; then
echo "Published package verification attempt ${attempt} failed; retrying in 10 seconds" >&2
sleep 10
fi
done done
echo "Published rea-agents@${version} was not available from npm" >&2 echo "Published rea-agents@${version} failed registry and CLI verification" >&2
exit 1 exit 1

View File

@ -10,23 +10,47 @@ if (!/^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?$/u.test(version ?? ""))
const serverEnvironment = { ...process.env }; const serverEnvironment = { ...process.env };
delete serverEnvironment.HOPPER_TARGET_PATH; delete serverEnvironment.HOPPER_TARGET_PATH;
const transport = new StdioClientTransport({ const transport = new StdioClientTransport({
command: "npx", command: "npm",
args: ["--yes", "--package", `rea-agents@${version}`, "rea", "mcp"], args: [
"exec",
"--yes",
`--package=rea-agents@${version}`,
"--",
"rea",
"mcp",
],
env: serverEnvironment, env: serverEnvironment,
stderr: "pipe", stderr: "pipe",
}); });
const client = new Client({ name: "published-package-canary", version: "1" }); const client = new Client({
name: "published-package-canary",
version: "1",
});
let stderr = ""; let stderr = "";
transport.stderr?.on("data", (chunk) => { transport.stderr?.on("data", (chunk) => {
if (stderr.length < 16_384) stderr += chunk.toString("utf8"); if (stderr.length < 16_384) stderr += chunk.toString("utf8");
}); });
let publishedToolCount = 0;
try { try {
await client.connect(transport); await client.connect(transport);
const tools = await client.listTools(); const tools = await client.listTools();
if (tools.tools.length !== CATALOG_IDENTITY.counts.mcp_tools) const toolNames = tools.tools.map(({ name }) => name);
const canonicalToolNames = new Set(
CATALOG_IDENTITY.tools.map(({ name }) => name),
);
const unknownToolNames = toolNames.filter(
(name) => !canonicalToolNames.has(name),
);
publishedToolCount = toolNames.length;
if (
publishedToolCount === 0 ||
new Set(toolNames).size !== publishedToolCount ||
unknownToolNames.length > 0
)
throw new Error( throw new Error(
`Published MCP exposed ${String(tools.tools.length)} tools`, `Published MCP exposed an invalid capability-scoped tool projection (${String(publishedToolCount)} tools, unknown: ${unknownToolNames.join(", ") || "none"})`,
); );
const status = await client.callTool({ const status = await client.callTool({
name: "binary_session", name: "binary_session",
@ -42,5 +66,5 @@ try {
} }
process.stdout.write( process.stdout.write(
`${JSON.stringify({ package: "rea-agents", version, mcpTools: CATALOG_IDENTITY.counts.mcp_tools })}\n`, `${JSON.stringify({ package: "rea-agents", version, mcpTools: publishedToolCount, canonicalMcpTools: CATALOG_IDENTITY.counts.mcp_tools })}\n`,
); );