fix(ci): retry published package verification
This commit is contained in:
parent
e564eac631
commit
c379455da7
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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`,
|
||||||
);
|
);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue