callme-cli
Advanced tools
| import { type ScenarioReportView, type ScenarioRunStatus } from "./remote.js"; | ||
| import type { ResolvedScenarioRunConfig } from "./config.js"; | ||
| export declare const isTerminalStatus: (status: ScenarioRunStatus) => boolean; | ||
| export declare const isFailureStatus: (status: ScenarioRunStatus) => boolean; | ||
| export interface ScenarioRunResult { | ||
| reportId: string; | ||
| scenarioName: string; | ||
| report: ScenarioReportView | null; | ||
| timedOut: boolean; | ||
| } | ||
| export interface ScenarioExecutionOptions { | ||
| wait: boolean; | ||
| timeoutMs: number; | ||
| maxRuntimeMs?: number; | ||
| onTrigger?: (info: { | ||
| reportId: string; | ||
| scenarioName: string; | ||
| }) => void; | ||
| onPoll?: (report: ScenarioReportView) => void; | ||
| } | ||
| export declare const runScenarioRemotely: (config: ResolvedScenarioRunConfig, options: ScenarioExecutionOptions) => Promise<ScenarioRunResult>; | ||
| export declare const parsePositiveIntOrNull: (raw: string | undefined, label: string) => number | null; | ||
| export declare const resolveTimeoutMs: (raw: string | undefined) => number; | ||
| //# sourceMappingURL=scenario-execution.d.ts.map |
| {"version":3,"file":"scenario-execution.d.ts","sourceRoot":"","sources":["../src/scenario-execution.ts"],"names":[],"mappings":"AAaA,OAAO,EAGL,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACvB,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAY7D,eAAO,MAAM,gBAAgB,GAAI,QAAQ,iBAAiB,KAAG,OAChC,CAAC;AAE9B,eAAO,MAAM,eAAe,GAAI,QAAQ,iBAAiB,KAAG,OAGtC,CAAC;AAEvB,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IAGrB,MAAM,EAAE,kBAAkB,GAAG,IAAI,CAAC;IAElC,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,OAAO,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IACvE,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,kBAAkB,KAAK,IAAI,CAAC;CAC/C;AAKD,eAAO,MAAM,mBAAmB,GAC9B,QAAQ,yBAAyB,EACjC,SAAS,wBAAwB,KAChC,OAAO,CAAC,iBAAiB,CA2D3B,CAAC;AAEF,eAAO,MAAM,sBAAsB,GACjC,KAAK,MAAM,GAAG,SAAS,EACvB,OAAO,MAAM,KACZ,MAAM,GAAG,IAOX,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,KAAK,MAAM,GAAG,SAAS,KAAG,MAG1D,CAAC"} |
| // Scenario run orchestration for `callme scenario run`. | ||
| // | ||
| // Unlike collection runs (executed locally by callman-core), scenarios | ||
| // run server-side on the worker — the CLI's job is: | ||
| // 1. POST /api/pipeline/scenarios/:id/run → returns reportId. | ||
| // 2. (optional) Poll GET /api/pipeline/scenarios/reports/:id every | ||
| // ~2s until the status is terminal, or until --timeout. | ||
| // | ||
| // CLI-side --timeout ≠ server-side cancel. When the CLI gives up | ||
| // waiting, the server-side run keeps going; the report eventually | ||
| // reaches a terminal state regardless. | ||
| import { CliError } from "./errors.js"; | ||
| import { fetchScenarioReport, triggerScenarioRun, } from "./remote.js"; | ||
| const POLL_INTERVAL_MS = 2_000; | ||
| const DEFAULT_TIMEOUT_MS = 30 * 60 * 1000; // 30 min | ||
| const TERMINAL_STATES = new Set([ | ||
| "success", | ||
| "failed", | ||
| "completed_with_failures", | ||
| "stopped", | ||
| ]); | ||
| export const isTerminalStatus = (status) => TERMINAL_STATES.has(status); | ||
| export const isFailureStatus = (status) => status === "failed" || | ||
| status === "completed_with_failures" || | ||
| status === "stopped"; | ||
| const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms)); | ||
| export const runScenarioRemotely = async (config, options) => { | ||
| const triggered = await triggerScenarioRun(config, { | ||
| scenarioId: config.scenarioId, | ||
| environmentId: config.environmentId ?? undefined, | ||
| maxRuntimeMs: options.maxRuntimeMs, | ||
| }); | ||
| options.onTrigger?.({ | ||
| reportId: triggered.reportId, | ||
| scenarioName: triggered.scenarioName, | ||
| }); | ||
| if (!options.wait) { | ||
| return { | ||
| reportId: triggered.reportId, | ||
| scenarioName: triggered.scenarioName, | ||
| report: null, | ||
| timedOut: false, | ||
| }; | ||
| } | ||
| const deadline = Date.now() + Math.max(POLL_INTERVAL_MS, options.timeoutMs); | ||
| let lastReport = null; | ||
| while (Date.now() < deadline) { | ||
| let report; | ||
| try { | ||
| report = await fetchScenarioReport(config, triggered.reportId); | ||
| } | ||
| catch (error) { | ||
| // Transient backend failures shouldn't kill the loop instantly; | ||
| // give it one retry tick. A second failure surfaces as fatal. | ||
| if (lastReport) { | ||
| throw error; | ||
| } | ||
| await sleep(POLL_INTERVAL_MS); | ||
| continue; | ||
| } | ||
| lastReport = report; | ||
| options.onPoll?.(report); | ||
| if (isTerminalStatus(report.status)) { | ||
| return { | ||
| reportId: triggered.reportId, | ||
| scenarioName: triggered.scenarioName, | ||
| report, | ||
| timedOut: false, | ||
| }; | ||
| } | ||
| await sleep(POLL_INTERVAL_MS); | ||
| } | ||
| return { | ||
| reportId: triggered.reportId, | ||
| scenarioName: triggered.scenarioName, | ||
| report: lastReport, | ||
| timedOut: true, | ||
| }; | ||
| }; | ||
| export const parsePositiveIntOrNull = (raw, label) => { | ||
| if (raw === undefined) | ||
| return null; | ||
| const value = Number(raw); | ||
| if (!Number.isFinite(value) || !Number.isInteger(value) || value <= 0) { | ||
| throw new CliError(`${label} must be a positive integer (got "${raw}")`); | ||
| } | ||
| return value; | ||
| }; | ||
| export const resolveTimeoutMs = (raw) => { | ||
| const parsed = parsePositiveIntOrNull(raw, "--timeout"); | ||
| return parsed ?? DEFAULT_TIMEOUT_MS; | ||
| }; | ||
| //# sourceMappingURL=scenario-execution.js.map |
| {"version":3,"file":"scenario-execution.js","sourceRoot":"","sources":["../src/scenario-execution.ts"],"names":[],"mappings":"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"} |
+9
-0
@@ -13,2 +13,11 @@ export declare const DEFAULT_CLOUD_API_URL = "https://api.callman.io"; | ||
| export declare const resolveRemoteConfig: (flags: RawRemoteFlags, env?: NodeJS.ProcessEnv) => ResolvedRemoteConfig; | ||
| export interface ResolvedScenarioRunConfig extends ResolvedRemoteConfig { | ||
| scenarioId: string; | ||
| environmentId: string | null; | ||
| } | ||
| export interface RawScenarioFlags extends RawRemoteFlags { | ||
| scenarioId?: string; | ||
| environmentId?: string; | ||
| } | ||
| export declare const resolveScenarioRunConfig: (flags: RawScenarioFlags, env?: NodeJS.ProcessEnv) => ResolvedScenarioRunConfig; | ||
| //# sourceMappingURL=config.d.ts.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAYA,eAAO,MAAM,qBAAqB,2BAA2B,CAAC;AAE9D,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAgBD,eAAO,MAAM,mBAAmB,GAC9B,OAAO,cAAc,EACrB,MAAK,MAAM,CAAC,UAAwB,KACnC,oBA2BF,CAAC"} | ||
| {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAYA,eAAO,MAAM,qBAAqB,2BAA2B,CAAC;AAE9D,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAgBD,eAAO,MAAM,mBAAmB,GAC9B,OAAO,cAAc,EACrB,MAAK,MAAM,CAAC,UAAwB,KACnC,oBA2BF,CAAC;AAKF,MAAM,WAAW,yBAA0B,SAAQ,oBAAoB;IACrE,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED,MAAM,WAAW,gBAAiB,SAAQ,cAAc;IACtD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,eAAO,MAAM,wBAAwB,GACnC,OAAO,gBAAgB,EACvB,MAAK,MAAM,CAAC,UAAwB,KACnC,yBAoBF,CAAC"} |
+13
-0
@@ -42,2 +42,15 @@ // Configuration resolution for the remote (ID-based) run mode. | ||
| }; | ||
| export const resolveScenarioRunConfig = (flags, env = process.env) => { | ||
| const remote = resolveRemoteConfig(flags, env); | ||
| const scenarioId = pickFirst(flags.scenarioId, env.CALLME_SCENARIO_ID); | ||
| if (!scenarioId) { | ||
| throw new CliError("scenario-id is required (set --scenario-id or CALLME_SCENARIO_ID)."); | ||
| } | ||
| const environmentId = pickFirst(flags.environmentId, env.CALLME_SCENARIO_ENV_ID); | ||
| return { | ||
| ...remote, | ||
| scenarioId, | ||
| environmentId, | ||
| }; | ||
| }; | ||
| //# sourceMappingURL=config.js.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,EAAE;AACF,2BAA2B;AAC3B,oCAAoC;AACpC,yCAAyC;AACzC,oEAAoE;AACpE,EAAE;AACF,qEAAqE;AACrE,oDAAoD;AAEpD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,MAAM,CAAC,MAAM,qBAAqB,GAAG,wBAAwB,CAAC;AAc9D,MAAM,SAAS,GAAG,CAChB,GAAG,UAAyC,EAC7B,EAAE;IACjB,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YAC7D,OAAO,SAAS,CAAC,IAAI,EAAE,CAAC;QAC1B,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF,MAAM,kBAAkB,GAAG,CAAC,GAAW,EAAU,EAAE,CACjD,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;AAE7C,MAAM,CAAC,MAAM,mBAAmB,GAAG,CACjC,KAAqB,EACrB,MAAyB,OAAO,CAAC,GAAG,EACd,EAAE;IACxB,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,CAAC,cAAc,EAAE,qBAAqB,CAAC,CAAC;IAClF,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,QAAQ,CAAC,uDAAuD,CAAC,CAAC;IAC9E,CAAC;IAED,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,YAAY,CAAC,CAAC;IACvD,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,QAAQ,CAChB,oEAAoE;YAClE,kEAAkE,CACrE,CAAC;IACJ,CAAC;IAED,MAAM,WAAW,GAAG,SAAS,CAAC,KAAK,CAAC,SAAS,EAAE,GAAG,CAAC,mBAAmB,CAAC,CAAC;IACxE,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,MAAM,IAAI,QAAQ,CAChB,mFAAmF;YACjF,2EAA2E,CAC9E,CAAC;IACJ,CAAC;IAED,OAAO;QACL,MAAM,EAAE,kBAAkB,CAAC,MAAM,CAAC;QAClC,KAAK;QACL,WAAW;KACZ,CAAC;AACJ,CAAC,CAAC"} | ||
| {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,EAAE;AACF,2BAA2B;AAC3B,oCAAoC;AACpC,yCAAyC;AACzC,oEAAoE;AACpE,EAAE;AACF,qEAAqE;AACrE,oDAAoD;AAEpD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,MAAM,CAAC,MAAM,qBAAqB,GAAG,wBAAwB,CAAC;AAc9D,MAAM,SAAS,GAAG,CAChB,GAAG,UAAyC,EAC7B,EAAE;IACjB,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YAC7D,OAAO,SAAS,CAAC,IAAI,EAAE,CAAC;QAC1B,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF,MAAM,kBAAkB,GAAG,CAAC,GAAW,EAAU,EAAE,CACjD,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;AAE7C,MAAM,CAAC,MAAM,mBAAmB,GAAG,CACjC,KAAqB,EACrB,MAAyB,OAAO,CAAC,GAAG,EACd,EAAE;IACxB,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,CAAC,cAAc,EAAE,qBAAqB,CAAC,CAAC;IAClF,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,QAAQ,CAAC,uDAAuD,CAAC,CAAC;IAC9E,CAAC;IAED,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,YAAY,CAAC,CAAC;IACvD,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,QAAQ,CAChB,oEAAoE;YAClE,kEAAkE,CACrE,CAAC;IACJ,CAAC;IAED,MAAM,WAAW,GAAG,SAAS,CAAC,KAAK,CAAC,SAAS,EAAE,GAAG,CAAC,mBAAmB,CAAC,CAAC;IACxE,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,MAAM,IAAI,QAAQ,CAChB,mFAAmF;YACjF,2EAA2E,CAC9E,CAAC;IACJ,CAAC;IAED,OAAO;QACL,MAAM,EAAE,kBAAkB,CAAC,MAAM,CAAC;QAClC,KAAK;QACL,WAAW;KACZ,CAAC;AACJ,CAAC,CAAC;AAeF,MAAM,CAAC,MAAM,wBAAwB,GAAG,CACtC,KAAuB,EACvB,MAAyB,OAAO,CAAC,GAAG,EACT,EAAE;IAC7B,MAAM,MAAM,GAAG,mBAAmB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAE/C,MAAM,UAAU,GAAG,SAAS,CAAC,KAAK,CAAC,UAAU,EAAE,GAAG,CAAC,kBAAkB,CAAC,CAAC;IACvE,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,IAAI,QAAQ,CAChB,oEAAoE,CACrE,CAAC;IACJ,CAAC;IAED,MAAM,aAAa,GAAG,SAAS,CAC7B,KAAK,CAAC,aAAa,EACnB,GAAG,CAAC,sBAAsB,CAC3B,CAAC;IAEF,OAAO;QACL,GAAG,MAAM;QACT,UAAU;QACV,aAAa;KACd,CAAC;AACJ,CAAC,CAAC"} |
+116
-1
@@ -5,3 +5,3 @@ #!/usr/bin/env node | ||
| import ora from "ora"; | ||
| import { resolveRemoteConfig } from "./config.js"; | ||
| import { resolveRemoteConfig, resolveScenarioRunConfig } from "./config.js"; | ||
| import { CliError, getErrorMessage } from "./errors.js"; | ||
@@ -13,2 +13,3 @@ import { executeCollection } from "./execution.js"; | ||
| import { writeReport } from "./reports.js"; | ||
| import { isFailureStatus, parsePositiveIntOrNull, resolveTimeoutMs, runScenarioRemotely, } from "./scenario-execution.js"; | ||
| import { hasRunFailures } from "./summary.js"; | ||
@@ -191,3 +192,117 @@ const EXIT_SUCCESS = 0; | ||
| }); | ||
| const formatScenarioDuration = (ms) => { | ||
| if (ms < 1_000) | ||
| return `${ms}ms`; | ||
| const seconds = ms / 1000; | ||
| if (seconds < 60) | ||
| return `${seconds.toFixed(1)}s`; | ||
| const minutes = Math.floor(seconds / 60); | ||
| const rem = Math.round(seconds - minutes * 60); | ||
| return `${minutes}m ${rem}s`; | ||
| }; | ||
| const runScenarioCommand = async (options) => { | ||
| const silent = options.silent === true; | ||
| const wait = options.wait !== false; // default true; commander turns --no-wait into wait=false | ||
| if (options.bail === true && !silent) { | ||
| console.log(chalk.dim("Note: --bail is a no-op for scenario runs (scenarios are a single graph; per-node onFailure policies are configured in the scenario itself).")); | ||
| } | ||
| if (options.report === "html" && !silent) { | ||
| console.log(chalk.yellow("HTML reports are not supported for scenarios yet — falling back to JSON if --output is set.")); | ||
| } | ||
| const config = resolveScenarioRunConfig({ | ||
| apiUrl: options.apiUrl, | ||
| token: options.token, | ||
| workspace: options.workspace, | ||
| scenarioId: options.scenarioId, | ||
| environmentId: options.environmentId, | ||
| }); | ||
| const timeoutMs = resolveTimeoutMs(options.timeout); | ||
| const maxRuntimeMs = parsePositiveIntOrNull(options.maxRuntime, "--max-runtime") ?? undefined; | ||
| const spinner = !silent && wait ? ora("Waiting for scenario run to finish...") : null; | ||
| let lastStatus = null; | ||
| const result = await runScenarioRemotely(config, { | ||
| wait, | ||
| timeoutMs, | ||
| maxRuntimeMs, | ||
| onTrigger: ({ reportId, scenarioName }) => { | ||
| if (!silent) { | ||
| console.log(chalk.cyan(`Triggered scenario "${scenarioName}" — report ${reportId}`)); | ||
| } | ||
| spinner?.start(); | ||
| }, | ||
| onPoll: (report) => { | ||
| if (spinner && report.status !== lastStatus) { | ||
| spinner.text = `Scenario "${report.scenarioName}" — status: ${report.status}`; | ||
| lastStatus = report.status; | ||
| } | ||
| }, | ||
| }); | ||
| spinner?.stop(); | ||
| if (!wait) { | ||
| if (!silent) { | ||
| console.log(chalk.green(`Scenario queued (fire-and-forget). Report id: ${result.reportId}`)); | ||
| } | ||
| return EXIT_SUCCESS; | ||
| } | ||
| if (result.timedOut) { | ||
| console.error(chalk.red(`Timed out after ${formatScenarioDuration(timeoutMs)} waiting for scenario run ${result.reportId}. The run continues server-side; check the desktop app for the final report.`)); | ||
| return EXIT_FATAL; | ||
| } | ||
| const report = result.report; | ||
| const failed = isFailureStatus(report.status); | ||
| const failNote = report.summary.failedNode ?? "(no specific node)"; | ||
| if (!silent) { | ||
| console.log(""); | ||
| console.log(chalk.bold(`Scenario "${report.scenarioName}" — ${report.status} in ${formatScenarioDuration(report.durationMs)}`)); | ||
| console.log(` Nodes: ${report.summary.successfulNodes}/${report.summary.totalNodes} successful, ${report.summary.failedNodes} failed, ${report.summary.skippedNodes} skipped`); | ||
| console.log(` Tests: ${report.summary.passedTests} passed, ${report.summary.failedTests} failed`); | ||
| if (failed) { | ||
| console.log(chalk.red(` Failed at: ${failNote}`)); | ||
| } | ||
| } | ||
| if (options.report === "json" && options.output) { | ||
| const fs = await import("node:fs/promises"); | ||
| await fs.writeFile(options.output, JSON.stringify(report, null, 2), "utf8"); | ||
| if (!silent) { | ||
| console.log(chalk.green(`Report written: ${options.output}`)); | ||
| } | ||
| } | ||
| if (options.fail === false) { | ||
| return EXIT_SUCCESS; | ||
| } | ||
| return failed ? EXIT_RUN_FAILURE : EXIT_SUCCESS; | ||
| }; | ||
| const scenarioCommand = program | ||
| .command("scenario") | ||
| .description("commands for server-side scenario runs"); | ||
| scenarioCommand | ||
| .command("run") | ||
| .option("--scenario-id <id>", "scenario id (or CALLME_SCENARIO_ID env var)") | ||
| .option("--environment-id <id>", "scenario environment id (or CALLME_SCENARIO_ENV_ID env var); falls back to the scenario's first environment") | ||
| .option("--workspace <id>", "workspace id (or CALLME_WORKSPACE_ID env var)") | ||
| .option("--token <token>", "Personal Access Token (or CALLME_TOKEN env var)") | ||
| .option("--api-url <url>", "backend base URL (default https://api.callman.io, or CALLME_API_URL)") | ||
| .option("--no-wait", "trigger the run and exit immediately (fire-and-forget)") | ||
| .option("--timeout <ms>", "max ms to wait for the run to reach a terminal state (default 1800000 = 30 min)") | ||
| .option("--max-runtime <ms>", "advisory server-side runtime cap, forwarded to the worker") | ||
| .option("--report <json|html>", "report type (only `json` supported)") | ||
| .option("--output <file>", "report output file (with --report)") | ||
| .option("--no-fail", "return exit code 0 even when the scenario fails") | ||
| .option("--bail", "no-op for scenario runs (kept for parity with `callme run`)") | ||
| .option("--verbose", "print extra status details while polling") | ||
| .option("--silent", "suppress all non-error output") | ||
| .description("trigger a scenario run server-side and (by default) wait for it to finish") | ||
| .action(async (options) => { | ||
| try { | ||
| process.exitCode = await runScenarioCommand(options); | ||
| } | ||
| catch (error) { | ||
| const message = error instanceof CliError | ||
| ? error.message | ||
| : `Unexpected error: ${getErrorMessage(error)}`; | ||
| console.error(chalk.red(`Fatal: ${message}`)); | ||
| process.exitCode = EXIT_FATAL; | ||
| } | ||
| }); | ||
| await program.parseAsync(process.argv); | ||
| //# sourceMappingURL=index.js.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"} |
+39
-0
@@ -15,2 +15,41 @@ import type { ResolvedRemoteConfig } from "./config.js"; | ||
| }) => Promise<RemoteBundle>; | ||
| export type ScenarioRunStatus = "queued" | "running" | "success" | "failed" | "completed_with_failures" | "stopped"; | ||
| export interface ScenarioTriggerResult { | ||
| reportId: string; | ||
| status: "queued"; | ||
| scenarioId: string; | ||
| scenarioName: string; | ||
| environmentId: string | null; | ||
| } | ||
| export interface ScenarioReportSummary { | ||
| totalNodes: number; | ||
| successfulNodes: number; | ||
| failedNodes: number; | ||
| skippedNodes: number; | ||
| retriedNodes: number; | ||
| totalTests: number; | ||
| passedTests: number; | ||
| failedTests: number; | ||
| finalNode: string | null; | ||
| failedNode: string | null; | ||
| } | ||
| export interface ScenarioReportView { | ||
| reportId: string; | ||
| scenarioId: string; | ||
| scenarioName: string; | ||
| scenarioVersion: number; | ||
| status: ScenarioRunStatus; | ||
| triggerType: string; | ||
| environmentId: string | null; | ||
| startedAt: string; | ||
| endedAt: string; | ||
| durationMs: number; | ||
| summary: ScenarioReportSummary; | ||
| } | ||
| export declare const triggerScenarioRun: (config: ResolvedRemoteConfig, input: { | ||
| scenarioId: string; | ||
| environmentId?: string; | ||
| maxRuntimeMs?: number; | ||
| }) => Promise<ScenarioTriggerResult>; | ||
| export declare const fetchScenarioReport: (config: ResolvedRemoteConfig, reportId: string) => Promise<ScenarioReportView>; | ||
| //# sourceMappingURL=remote.d.ts.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"remote.d.ts","sourceRoot":"","sources":["../src/remote.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAExD,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,YAAY;IAI3B,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,WAAW,EAAE,iBAAiB,CAAC;CAChC;AAyBD,eAAO,MAAM,mBAAmB,GAC9B,QAAQ,oBAAoB,EAC5B,KAAK;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE,KACnD,OAAO,CAAC,YAAY,CAiDtB,CAAC"} | ||
| {"version":3,"file":"remote.d.ts","sourceRoot":"","sources":["../src/remote.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAExD,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,YAAY;IAI3B,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,WAAW,EAAE,iBAAiB,CAAC;CAChC;AAyBD,eAAO,MAAM,mBAAmB,GAC9B,QAAQ,oBAAoB,EAC5B,KAAK;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE,KACnD,OAAO,CAAC,YAAY,CAiDtB,CAAC;AAOF,MAAM,MAAM,iBAAiB,GACzB,QAAQ,GACR,SAAS,GACT,SAAS,GACT,QAAQ,GACR,yBAAyB,GACzB,SAAS,CAAC;AAEd,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,QAAQ,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED,MAAM,WAAW,qBAAqB;IACpC,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,iBAAiB,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,qBAAqB,CAAC;CAChC;AA+DD,eAAO,MAAM,kBAAkB,GAC7B,QAAQ,oBAAoB,EAC5B,OAAO;IACL,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,KACA,OAAO,CAAC,qBAAqB,CAW/B,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAC9B,QAAQ,oBAAoB,EAC5B,UAAU,MAAM,KACf,OAAO,CAAC,kBAAkB,CAM1B,CAAC"} |
+50
-0
@@ -68,2 +68,52 @@ // Fetch a (collection + environment) bundle from the backend so the | ||
| }; | ||
| const buildScenarioRunUrl = (apiUrl, scenarioId) => new URL(`/api/pipeline/scenarios/${encodeURIComponent(scenarioId)}/run`, apiUrl).toString(); | ||
| const buildScenarioReportUrl = (apiUrl, reportId) => new URL(`/api/pipeline/scenarios/reports/${encodeURIComponent(reportId)}`, apiUrl).toString(); | ||
| const callPipelineApi = async (url, config, init, errorPrefix) => { | ||
| let response; | ||
| try { | ||
| response = await fetch(url, { | ||
| method: init.method, | ||
| headers: { | ||
| Authorization: `Bearer ${config.token}`, | ||
| "x-workspace-id": config.workspaceId, | ||
| Accept: "application/json", | ||
| ...(init.body !== undefined | ||
| ? { "Content-Type": "application/json" } | ||
| : {}), | ||
| }, | ||
| body: init.body !== undefined ? JSON.stringify(init.body) : undefined, | ||
| }); | ||
| } | ||
| catch (error) { | ||
| throw new CliError(`Could not reach ${config.apiUrl}: ${getErrorMessage(error)}`, error); | ||
| } | ||
| let parsed = null; | ||
| try { | ||
| parsed = await response.json(); | ||
| } | ||
| catch { | ||
| // Non-JSON — leave parsed as null. | ||
| } | ||
| if (!response.ok) { | ||
| const envelope = isEnvelope(parsed) ? parsed : null; | ||
| const detail = extractMessage(envelope, response.status); | ||
| // The backend distinguishes "scope missing" with a recognisable | ||
| // message that the user can act on. Echo it verbatim so CI logs | ||
| // are self-explanatory. | ||
| throw new CliError(`${errorPrefix}: ${response.status} — ${detail}`); | ||
| } | ||
| if (!isEnvelope(parsed) || !parsed.success || !parsed.data) { | ||
| throw new CliError(`${errorPrefix}: unexpected response shape`); | ||
| } | ||
| return parsed.data; | ||
| }; | ||
| export const triggerScenarioRun = async (config, input) => { | ||
| const body = {}; | ||
| if (input.environmentId) | ||
| body.environmentId = input.environmentId; | ||
| if (input.maxRuntimeMs) | ||
| body.maxRuntimeMs = input.maxRuntimeMs; | ||
| return callPipelineApi(buildScenarioRunUrl(config.apiUrl, input.scenarioId), config, { method: "POST", body }, "Scenario trigger failed"); | ||
| }; | ||
| export const fetchScenarioReport = async (config, reportId) => callPipelineApi(buildScenarioReportUrl(config.apiUrl, reportId), config, { method: "GET" }, "Scenario report fetch failed"); | ||
| //# sourceMappingURL=remote.js.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"remote.js","sourceRoot":"","sources":["../src/remote.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"remote.js","sourceRoot":"","sources":["../src/remote.ts"],"names":[],"mappings":"AAAA,oEAAoE;AACpE,mEAAmE;AACnE,EAAE;AACF,oEAAoE;AACpE,oEAAoE;AACpE,mEAAmE;AACnE,oBAAoB;AACpB,EAAE;AACF,+DAA+D;AAE/D,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAwBxD,MAAM,UAAU,GAAG,CAAC,KAAc,EAAqC,EAAE,CACvE,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,SAAS,IAAI,KAAK,CAAC;AAEpE,MAAM,cAAc,GAAG,CAAC,MAAc,EAAE,GAAoD,EAAU,EAAE;IACtG,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,sBAAsB,EAAE,MAAM,CAAC,CAAC;IACpD,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,cAAc,EAAE,GAAG,CAAC,YAAY,CAAC,CAAC;IACvD,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,eAAe,EAAE,GAAG,CAAC,aAAa,CAAC,CAAC;IACzD,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC;AACxB,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,CAAC,QAAyC,EAAE,MAAc,EAAU,EAAE;IAC3F,IAAI,QAAQ,EAAE,OAAO;QAAE,OAAO,QAAQ,CAAC,OAAO,CAAC;IAC/C,IAAI,OAAO,QAAQ,EAAE,KAAK,KAAK,QAAQ;QAAE,OAAO,QAAQ,CAAC,KAAK,CAAC;IAC/D,OAAO,QAAQ,MAAM,EAAE,CAAC;AAC1B,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,EACtC,MAA4B,EAC5B,GAAoD,EAC7B,EAAE;IACzB,MAAM,GAAG,GAAG,cAAc,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAE/C,IAAI,QAAkB,CAAC;IACvB,IAAI,CAAC;QACH,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAC1B,MAAM,EAAE,KAAK;YACb,OAAO,EAAE;gBACP,aAAa,EAAE,UAAU,MAAM,CAAC,KAAK,EAAE;gBACvC,gBAAgB,EAAE,MAAM,CAAC,WAAW;gBACpC,MAAM,EAAE,kBAAkB;aAC3B;SACF,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,QAAQ,CAChB,mBAAmB,MAAM,CAAC,MAAM,KAAK,eAAe,CAAC,KAAK,CAAC,EAAE,EAC7D,KAAK,CACN,CAAC;IACJ,CAAC;IAED,IAAI,MAAM,GAAY,IAAI,CAAC;IAC3B,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IACjC,CAAC;IAAC,MAAM,CAAC;QACP,uEAAuE;IACzE,CAAC;IAED,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;QACpD,MAAM,MAAM,GAAG,cAAc,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;QACzD,MAAM,IAAI,QAAQ,CAAC,wBAAwB,QAAQ,CAAC,MAAM,MAAM,MAAM,EAAE,CAAC,CAAC;IAC5E,CAAC;IAED,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QAC3D,MAAM,IAAI,QAAQ,CAAC,oDAAoD,CAAC,CAAC;IAC3E,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,CAAC,IAAoB,CAAC;IACzC,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QAC9C,MAAM,IAAI,QAAQ,CAAC,mCAAmC,CAAC,CAAC;IAC1D,CAAC;IACD,IAAI,OAAO,IAAI,CAAC,UAAU,KAAK,QAAQ,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,EAAE,CAAC;QACpE,MAAM,IAAI,QAAQ,CAAC,8CAA8C,CAAC,CAAC;IACrE,CAAC;IACD,IAAI,OAAO,IAAI,CAAC,WAAW,KAAK,QAAQ,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI,EAAE,CAAC;QACtE,MAAM,IAAI,QAAQ,CAAC,+CAA+C,CAAC,CAAC;IACtE,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAkDF,MAAM,mBAAmB,GAAG,CAAC,MAAc,EAAE,UAAkB,EAAU,EAAE,CACzE,IAAI,GAAG,CACL,2BAA2B,kBAAkB,CAAC,UAAU,CAAC,MAAM,EAC/D,MAAM,CACP,CAAC,QAAQ,EAAE,CAAC;AAEf,MAAM,sBAAsB,GAAG,CAAC,MAAc,EAAE,QAAgB,EAAU,EAAE,CAC1E,IAAI,GAAG,CACL,mCAAmC,kBAAkB,CAAC,QAAQ,CAAC,EAAE,EACjE,MAAM,CACP,CAAC,QAAQ,EAAE,CAAC;AAEf,MAAM,eAAe,GAAG,KAAK,EAC3B,GAAW,EACX,MAA4B,EAC5B,IAAgD,EAChD,WAAmB,EACP,EAAE;IACd,IAAI,QAAkB,CAAC;IACvB,IAAI,CAAC;QACH,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAC1B,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,OAAO,EAAE;gBACP,aAAa,EAAE,UAAU,MAAM,CAAC,KAAK,EAAE;gBACvC,gBAAgB,EAAE,MAAM,CAAC,WAAW;gBACpC,MAAM,EAAE,kBAAkB;gBAC1B,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS;oBACzB,CAAC,CAAC,EAAE,cAAc,EAAE,kBAAkB,EAAE;oBACxC,CAAC,CAAC,EAAE,CAAC;aACR;YACD,IAAI,EAAE,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;SACtE,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,QAAQ,CAChB,mBAAmB,MAAM,CAAC,MAAM,KAAK,eAAe,CAAC,KAAK,CAAC,EAAE,EAC7D,KAAK,CACN,CAAC;IACJ,CAAC;IAED,IAAI,MAAM,GAAY,IAAI,CAAC;IAC3B,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IACjC,CAAC;IAAC,MAAM,CAAC;QACP,mCAAmC;IACrC,CAAC;IAED,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;QACpD,MAAM,MAAM,GAAG,cAAc,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;QACzD,gEAAgE;QAChE,gEAAgE;QAChE,wBAAwB;QACxB,MAAM,IAAI,QAAQ,CAAC,GAAG,WAAW,KAAK,QAAQ,CAAC,MAAM,MAAM,MAAM,EAAE,CAAC,CAAC;IACvE,CAAC;IAED,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QAC3D,MAAM,IAAI,QAAQ,CAAC,GAAG,WAAW,6BAA6B,CAAC,CAAC;IAClE,CAAC;IACD,OAAO,MAAM,CAAC,IAAS,CAAC;AAC1B,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,EACrC,MAA4B,EAC5B,KAIC,EAC+B,EAAE;IAClC,MAAM,IAAI,GAA4B,EAAE,CAAC;IACzC,IAAI,KAAK,CAAC,aAAa;QAAE,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,aAAa,CAAC;IAClE,IAAI,KAAK,CAAC,YAAY;QAAE,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC;IAE/D,OAAO,eAAe,CACpB,mBAAmB,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,UAAU,CAAC,EACpD,MAAM,EACN,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,EACxB,yBAAyB,CAC1B,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,EACtC,MAA4B,EAC5B,QAAgB,EACa,EAAE,CAC/B,eAAe,CACb,sBAAsB,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,EAC/C,MAAM,EACN,EAAE,MAAM,EAAE,KAAK,EAAE,EACjB,8BAA8B,CAC/B,CAAC"} |
+16
-0
@@ -57,3 +57,19 @@ import type { ExecutionResult, RunCollectionResult, TestResult } from "callman-core"; | ||
| } | ||
| export interface ScenarioRunOptions { | ||
| scenarioId?: string; | ||
| environmentId?: string; | ||
| workspace?: string; | ||
| token?: string; | ||
| apiUrl?: string; | ||
| wait?: boolean; | ||
| timeout?: string; | ||
| maxRuntime?: string; | ||
| fail?: boolean; | ||
| bail?: boolean; | ||
| silent?: boolean; | ||
| verbose?: boolean; | ||
| report?: string; | ||
| output?: string; | ||
| } | ||
| export type { ExecutionResult, RunCollectionResult, TestResult, }; | ||
| //# sourceMappingURL=types.d.ts.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,mBAAmB,EACnB,UAAU,EACX,MAAM,cAAc,CAAC;AAEtB,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,CAAC,EAAE;QACf,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,KAAK,CAAC,EAAE,OAAO,CAAC;KACjB,CAAC;IACF,QAAQ,EAAE,WAAW,EAAE,CAAC;CACzB;AAED,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,MAAM,CAAC;AAEzC,MAAM,WAAW,UAAU;IACzB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,YAAY,GAAG;QACvB,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;IACF,WAAW,EAAE,YAAY,CAAC;IAC1B,cAAc,EAAE,YAAY,CAAC;CAC9B;AAED,MAAM,WAAW,aAAa;IAC5B,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,mBAAmB,CAAC,SAAS,CAAC,CAAC;IACxC,OAAO,EAAE,eAAe,EAAE,CAAC;CAC5B;AAED,YAAY,EACV,eAAe,EACf,mBAAmB,EACnB,UAAU,GACX,CAAC"} | ||
| {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"} |
+4
-1
| { | ||
| "name": "callme-cli", | ||
| "version": "1.3.4", | ||
| "version": "1.4.0", | ||
| "description": "Professional command-line runner for API collections exported from the Callman desktop app. Runs requests, scripts, and contract checks via callman-core; emits HTML/JSON reports; CI-friendly exit codes.", | ||
@@ -54,1 +54,4 @@ "keywords": [ | ||
| } | ||
+65
-0
@@ -167,2 +167,67 @@ # Callme CLI | ||
| ## Scenario Runs (Server-Side) | ||
| `callme scenario run` triggers a Callman **scenario** on the backend | ||
| worker and (by default) polls until it finishes. Unlike `callme run`, | ||
| the scenario does not execute locally — the worker has the DB / Kafka | ||
| / Redis pools the scenario nodes need. | ||
| ```bash | ||
| # Trigger + wait (default). Exit code reflects the run result. | ||
| callme scenario run \ | ||
| --scenario-id <scenarioId> \ | ||
| --environment-id <scenarioEnvId> \ | ||
| --workspace <workspaceId> \ | ||
| --token <cm_pat_...> | ||
| # Fire-and-forget — return as soon as the run is queued. | ||
| callme scenario run --scenario-id <id> --no-wait \ | ||
| --workspace <id> --token <cm_pat_...> | ||
| # Save a JSON report when finished. | ||
| callme scenario run --scenario-id <id> \ | ||
| --workspace <id> --token <cm_pat_...> \ | ||
| --report json --output ./scenario.json | ||
| npm run start -- scenario run \ | ||
| --api-url http://localhost:4000 \ | ||
| --token cm_pat_J_acaYXOAxs1jSIMBL-R34p522QiHj5RQBJlXyQDcIQ \ | ||
| --workspace 69ee34951f9f4d2754369276 \ | ||
| --scenario-id 69f8f261f7f688ff34f50a79 \ | ||
| --environment-id e76e66f1-3000-475c-a8d8-344886e7c829 \ | ||
| --report json --output ./scenario-report.json \ | ||
| --timeout 4000 | ||
| ``` | ||
| ### PAT scope | ||
| Scenario triggers require the PAT to carry the `pipeline:trigger` | ||
| scope. Generate a new token from the desktop app (Workspace | ||
| Settings → CI Tokens → "New CI Token" → check **Trigger**). Tokens | ||
| created before this scope existed will get `403` with the message | ||
| `Token is missing the 'pipeline:trigger' scope`. | ||
| ### Flag semantics | ||
| | Flag | Behaviour | | ||
| |---|---| | ||
| | `--scenario-id <id>` | Required. Or set `CALLME_SCENARIO_ID`. | | ||
| | `--environment-id <id>` | Optional. Names the scenario's inline environment to use (NOT a Mongo `_id`). Or set `CALLME_SCENARIO_ENV_ID`. Falls back to the first environment when omitted. | | ||
| | `--no-wait` | Trigger and exit immediately with `0`. The run keeps going server-side. | | ||
| | `--timeout <ms>` | How long the CLI is willing to wait for a terminal state. Default: `1800000` (30 min). Hitting it exits `2` (fatal); the server-side run **continues**, it is not cancelled. | | ||
| | `--max-runtime <ms>` | Advisory cap forwarded to the worker. | | ||
| | `--no-fail` | Force exit `0` on `failed` / `completed_with_failures` / `stopped`. | | ||
| | `--bail` | Parsed but no-op for scenarios. Logged in non-silent mode. Kept for parity with `callme run`. | | ||
| | `--report json --output <file>` | Dumps the slim report shape to disk. HTML reports are not yet supported for scenarios. | | ||
| ### Exit codes | ||
| | State | `--no-fail` off (default) | `--no-fail` on | | ||
| |---|---|---| | ||
| | `success` | `0` | `0` | | ||
| | `failed`, `completed_with_failures`, `stopped` | `1` | `0` | | ||
| | Timeout / network / auth error | `2` | `2` | | ||
| | `--no-wait` trigger succeeded | `0` | `0` | | ||
| ## Command Reference | ||
@@ -169,0 +234,0 @@ |
158346
24.29%46
9.52%1829
24.25%1071
6.46%5
25%2
100%