* feat: add sdk subcommand to run conformance against any SDK ref (#250) * Revise sdk runner: explicit --mode, KNOWN_SDKS-only config, v1/v2 entries Addresses review feedback on the sdk subcommand: - Require --mode (client|server) and remove "both". Each invocation now tests exactly one side with its own exit code; the old default ran client then server but combined exit codes with ||=, which skipped the server side entirely whenever the client run failed. - Resolve build/run config from KNOWN_SDKS + CLI flags only; drop the conformance.config.yaml loader (no SDK ships one yet). The Zod schema stays as the type for the built-in entries. - Split the typescript entry by major version: typescript-sdk (v2/main, pnpm install + build:all, expected-failures.yaml) and typescript-sdk-v1 (v1.x, npm ci + build, conformance-baseline.yml). An entry may set `repo` (real clone target for an alias) and `defaultRef` (branch used when no @ref is given). parseSdkSpec now leaves ref undefined when omitted so defaultRef can apply; a trailing @ is treated as no ref. - Key the clone cache by ref (<repo>/<ref>) so different refs of the same repo no longer share one checkout. - Bound the server readiness probe with a per-request AbortSignal timeout so a server that accepts the socket but never responds can't hang past the overall deadline. * fix(sdk-runner): resolve -o to absolute path; add --expected-failures override; replaceAll for safeName
25 lines
742 B
TypeScript
25 lines
742 B
TypeScript
import { z } from 'zod';
|
|
|
|
export const SdkConfigSchema = z.object({
|
|
// Clone this repo instead of the KNOWN_SDKS key — lets an alias entry
|
|
// (e.g. typescript-sdk-v1) point at the real repo (typescript-sdk).
|
|
repo: z.string().optional(),
|
|
// Ref to check out when the SDK is named with no @ref (the "default branch").
|
|
defaultRef: z.string().optional(),
|
|
build: z.string().optional(),
|
|
client: z
|
|
.object({
|
|
command: z.string()
|
|
})
|
|
.optional(),
|
|
server: z
|
|
.object({
|
|
command: z.string(),
|
|
url: z.string().url(),
|
|
readyTimeoutMs: z.number().int().positive().optional()
|
|
})
|
|
.optional(),
|
|
expectedFailures: z.string().optional()
|
|
});
|
|
|
|
export type SdkConfig = z.infer<typeof SdkConfigSchema>;
|