windmill-cli 1.669.1 → 1.671.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm/main.js +227 -29
- package/package.json +1 -1
package/esm/main.js
CHANGED
|
@@ -11812,7 +11812,7 @@ var init_OpenAPI = __esm(() => {
|
|
|
11812
11812
|
PASSWORD: undefined,
|
|
11813
11813
|
TOKEN: getEnv2("WM_TOKEN"),
|
|
11814
11814
|
USERNAME: undefined,
|
|
11815
|
-
VERSION: "1.
|
|
11815
|
+
VERSION: "1.671.0",
|
|
11816
11816
|
WITH_CREDENTIALS: true,
|
|
11817
11817
|
interceptors: {
|
|
11818
11818
|
request: new Interceptors,
|
|
@@ -61430,7 +61430,13 @@ async function generateFlowLockInternal(folder, dryRun, workspace, opts, justUpd
|
|
|
61430
61430
|
await replaceInlineScripts([flowValue.value.preprocessor_module], fileReader, exports_log, folder + SEP7, SEP7, locksToRemove);
|
|
61431
61431
|
}
|
|
61432
61432
|
const tempScriptRefs = tree?.getTempScriptRefs(folderNormalized);
|
|
61433
|
+
const savedNotes = flowValue.value.notes;
|
|
61434
|
+
const savedGroups = flowValue.value.groups;
|
|
61433
61435
|
flowValue.value = await updateFlow2(workspace, flowValue.value, remote_path, filteredDeps, tempScriptRefs);
|
|
61436
|
+
if (savedNotes !== undefined)
|
|
61437
|
+
flowValue.value.notes = savedNotes;
|
|
61438
|
+
if (savedGroups !== undefined)
|
|
61439
|
+
flowValue.value.groups = savedGroups;
|
|
61434
61440
|
const lockAssigner = newPathAssigner(opts.defaultTs ?? "bun", {
|
|
61435
61441
|
skipInlineScriptSuffix: getNonDottedPaths()
|
|
61436
61442
|
});
|
|
@@ -61444,7 +61450,7 @@ async function generateFlowLockInternal(folder, dryRun, workspace, opts, justUpd
|
|
|
61444
61450
|
inlineScripts.forEach((s) => {
|
|
61445
61451
|
writeIfChanged(process.cwd() + SEP7 + folder + SEP7 + s.path, s.content);
|
|
61446
61452
|
});
|
|
61447
|
-
writeIfChanged(process.cwd() + SEP7 + folder + SEP7 + "flow.yaml", import_yaml8.stringify(flowValue));
|
|
61453
|
+
writeIfChanged(process.cwd() + SEP7 + folder + SEP7 + "flow.yaml", import_yaml8.stringify(flowValue, yamlOptions));
|
|
61448
61454
|
}
|
|
61449
61455
|
const depsForHash = tree && !legacyBehaviour ? {} : filteredDeps;
|
|
61450
61456
|
const finalHashes = await generateFlowHash(depsForHash, folder, opts.defaultTs);
|
|
@@ -71172,28 +71178,89 @@ async function run3(opts, path19) {
|
|
|
71172
71178
|
path: path19,
|
|
71173
71179
|
requestBody: input
|
|
71174
71180
|
});
|
|
71181
|
+
const stepLabels = new Map;
|
|
71182
|
+
try {
|
|
71183
|
+
const initialJob = await getJob({
|
|
71184
|
+
workspace: workspace.workspaceId,
|
|
71185
|
+
id
|
|
71186
|
+
});
|
|
71187
|
+
const rawFlow = initialJob.raw_flow;
|
|
71188
|
+
if (rawFlow?.modules) {
|
|
71189
|
+
for (const mod of rawFlow.modules) {
|
|
71190
|
+
if (mod.id) {
|
|
71191
|
+
const label = mod.summary ? `${mod.id}: ${mod.summary}` : mod.id;
|
|
71192
|
+
stepLabels.set(mod.id, label);
|
|
71193
|
+
}
|
|
71194
|
+
}
|
|
71195
|
+
}
|
|
71196
|
+
} catch {}
|
|
71175
71197
|
let i = 0;
|
|
71198
|
+
let lastStatus = "";
|
|
71176
71199
|
while (true) {
|
|
71177
71200
|
const jobInfo = await getJob({
|
|
71178
71201
|
workspace: workspace.workspaceId,
|
|
71179
71202
|
id
|
|
71180
71203
|
});
|
|
71181
|
-
|
|
71204
|
+
const isCompleted = jobInfo.type === "CompletedJob";
|
|
71205
|
+
const flowStatus = jobInfo.flow_status;
|
|
71206
|
+
if (flowStatus.modules.length <= i) {
|
|
71182
71207
|
break;
|
|
71183
71208
|
}
|
|
71184
|
-
const module =
|
|
71185
|
-
if (module.
|
|
71186
|
-
if (!opts.silent) {
|
|
71187
|
-
|
|
71209
|
+
const module = flowStatus.modules[i];
|
|
71210
|
+
if (module.type === "Failure") {
|
|
71211
|
+
if (module.job && !opts.silent) {
|
|
71212
|
+
const label = stepLabels.get(module.id) ?? `Step ${i + 1}`;
|
|
71213
|
+
info("====== " + label + " ======");
|
|
71188
71214
|
await track_job(workspace.workspaceId, module.job);
|
|
71189
71215
|
}
|
|
71216
|
+
break;
|
|
71217
|
+
}
|
|
71218
|
+
if (module.job) {
|
|
71219
|
+
const label = stepLabels.get(module.id) ?? `Step ${i + 1}`;
|
|
71220
|
+
const isForLoop = module.flow_jobs !== undefined;
|
|
71221
|
+
if (isForLoop) {
|
|
71222
|
+
let trackedIterations = 0;
|
|
71223
|
+
let forLoopFailed = false;
|
|
71224
|
+
while (true) {
|
|
71225
|
+
const refreshed = await getJob({
|
|
71226
|
+
workspace: workspace.workspaceId,
|
|
71227
|
+
id
|
|
71228
|
+
});
|
|
71229
|
+
const refreshedModule = refreshed.flow_status.modules[i];
|
|
71230
|
+
const flowJobs = refreshedModule.flow_jobs ?? [];
|
|
71231
|
+
while (trackedIterations < flowJobs.length) {
|
|
71232
|
+
if (!opts.silent) {
|
|
71233
|
+
info(`====== ${label} (iteration ${trackedIterations}) ======`);
|
|
71234
|
+
await track_job(workspace.workspaceId, flowJobs[trackedIterations]);
|
|
71235
|
+
}
|
|
71236
|
+
trackedIterations++;
|
|
71237
|
+
}
|
|
71238
|
+
if (refreshedModule.type === "Success" || refreshedModule.type === "Failure") {
|
|
71239
|
+
forLoopFailed = refreshedModule.type === "Failure";
|
|
71240
|
+
break;
|
|
71241
|
+
}
|
|
71242
|
+
await new Promise((resolve8) => setTimeout(resolve8, 200));
|
|
71243
|
+
}
|
|
71244
|
+
if (forLoopFailed)
|
|
71245
|
+
break;
|
|
71246
|
+
} else {
|
|
71247
|
+
if (!opts.silent) {
|
|
71248
|
+
info("====== " + label + " ======");
|
|
71249
|
+
await track_job(workspace.workspaceId, module.job);
|
|
71250
|
+
}
|
|
71251
|
+
}
|
|
71190
71252
|
} else {
|
|
71191
|
-
|
|
71192
|
-
|
|
71253
|
+
const status = String(module.type);
|
|
71254
|
+
if (!opts.silent && status !== lastStatus) {
|
|
71255
|
+
info(colors.dim(status));
|
|
71256
|
+
lastStatus = status;
|
|
71193
71257
|
}
|
|
71194
71258
|
await new Promise((resolve8, _) => setTimeout(() => resolve8(undefined), 100));
|
|
71259
|
+
if (isCompleted)
|
|
71260
|
+
break;
|
|
71195
71261
|
continue;
|
|
71196
71262
|
}
|
|
71263
|
+
lastStatus = "";
|
|
71197
71264
|
i++;
|
|
71198
71265
|
}
|
|
71199
71266
|
const MAX_RETRIES = 600;
|
|
@@ -71205,7 +71272,11 @@ async function run3(opts, path19) {
|
|
|
71205
71272
|
id
|
|
71206
71273
|
});
|
|
71207
71274
|
if (!opts.silent) {
|
|
71208
|
-
|
|
71275
|
+
if (jobInfo.success === false) {
|
|
71276
|
+
info(colors.red.underline.bold("Flow failed"));
|
|
71277
|
+
} else {
|
|
71278
|
+
info(colors.green.underline.bold("Flow ran to completion"));
|
|
71279
|
+
}
|
|
71209
71280
|
info(`
|
|
71210
71281
|
`);
|
|
71211
71282
|
}
|
|
@@ -79427,7 +79498,7 @@ flow related commands
|
|
|
79427
79498
|
- \`flow new <flow_path:string>\` - create a new empty flow
|
|
79428
79499
|
- \`--summary <summary:string>\` - flow summary
|
|
79429
79500
|
- \`--description <description:string>\` - flow description
|
|
79430
|
-
- \`flow bootstrap <flow_path:string>\` - create a new empty flow (alias for new
|
|
79501
|
+
- \`flow bootstrap <flow_path:string>\` - create a new empty flow (alias for new)
|
|
79431
79502
|
- \`--summary <summary:string>\` - flow summary
|
|
79432
79503
|
- \`--description <description:string>\` - flow description
|
|
79433
79504
|
- \`flow history <path:string>\` - Show version history for a flow
|
|
@@ -79580,10 +79651,10 @@ Manage jobs (list, inspect, cancel)
|
|
|
79580
79651
|
**Subcommands:**
|
|
79581
79652
|
|
|
79582
79653
|
- \`job list\` - List recent jobs
|
|
79583
|
-
- \`job get <id:string>\` - Get job details
|
|
79654
|
+
- \`job get <id:string>\` - Get job details. For flows: shows step tree with sub-job IDs
|
|
79584
79655
|
- \`--json\` - Output as JSON (for piping to jq)
|
|
79585
|
-
- \`job result <id:string>\` - Get the result of a completed job (machine-friendly
|
|
79586
|
-
- \`job logs <id:string>\` - Get job logs
|
|
79656
|
+
- \`job result <id:string>\` - Get the result of a completed job (machine-friendly)
|
|
79657
|
+
- \`job logs <id:string>\` - Get job logs. For flows: aggregates all step logs
|
|
79587
79658
|
- \`job cancel <id:string>\` - Cancel a running or queued job
|
|
79588
79659
|
- \`--reason <reason:string>\` - Reason for cancellation
|
|
79589
79660
|
|
|
@@ -79690,11 +79761,11 @@ script related commands
|
|
|
79690
79761
|
- \`script list\` - list all scripts
|
|
79691
79762
|
- \`--show-archived\` - Show archived scripts instead of active ones
|
|
79692
79763
|
- \`--json\` - Output as JSON (for piping to jq)
|
|
79693
|
-
- \`script push <path:file>\` - push a local script spec. This overrides any remote versions. Use the script file (.ts, .js, .py, .sh
|
|
79764
|
+
- \`script push <path:file>\` - push a local script spec. This overrides any remote versions. Use the script file (.ts, .js, .py, .sh)
|
|
79694
79765
|
- \`--message <message:string>\` - Deployment message
|
|
79695
79766
|
- \`script get <path:file>\` - get a script's details
|
|
79696
79767
|
- \`--json\` - Output as JSON (for piping to jq)
|
|
79697
|
-
- \`script show <path:file>\` - show a script's content (alias for get
|
|
79768
|
+
- \`script show <path:file>\` - show a script's content (alias for get)
|
|
79698
79769
|
- \`script run <path:file>\` - run a script by path
|
|
79699
79770
|
- \`-d --data <data:file>\` - Inputs specified as a JSON string or a file using @<filename> or stdin using @-.
|
|
79700
79771
|
- \`-s --silent\` - Do not output anything other then the final output. Useful for scripting.
|
|
@@ -79704,10 +79775,10 @@ script related commands
|
|
|
79704
79775
|
- \`script new <path:file> <language:string>\` - create a new script
|
|
79705
79776
|
- \`--summary <summary:string>\` - script summary
|
|
79706
79777
|
- \`--description <description:string>\` - script description
|
|
79707
|
-
- \`script bootstrap <path:file> <language:string>\` - create a new script (alias for new
|
|
79778
|
+
- \`script bootstrap <path:file> <language:string>\` - create a new script (alias for new)
|
|
79708
79779
|
- \`--summary <summary:string>\` - script summary
|
|
79709
79780
|
- \`--description <description:string>\` - script description
|
|
79710
|
-
- \`script generate-metadata [script:file]\` - re-generate the metadata file updating the lock and the script schema (for flows, use \`wmill flow generate-locks\`
|
|
79781
|
+
- \`script generate-metadata [script:file]\` - re-generate the metadata file updating the lock and the script schema (for flows, use \`wmill flow generate-locks\`)
|
|
79711
79782
|
- \`--yes\` - Skip confirmation prompt
|
|
79712
79783
|
- \`--dry-run\` - Perform a dry run without making changes
|
|
79713
79784
|
- \`--lock-only\` - re-generate only the lock
|
|
@@ -80171,6 +80242,13 @@ properties:
|
|
|
80171
80242
|
key:
|
|
80172
80243
|
type: string
|
|
80173
80244
|
value: {}
|
|
80245
|
+
filter_logic:
|
|
80246
|
+
type: string
|
|
80247
|
+
enum:
|
|
80248
|
+
- and
|
|
80249
|
+
- or
|
|
80250
|
+
description: Logic to apply when evaluating filters. 'and' requires all filters
|
|
80251
|
+
to match, 'or' requires any filter to match.
|
|
80174
80252
|
auto_offset_reset:
|
|
80175
80253
|
type: string
|
|
80176
80254
|
enum:
|
|
@@ -80698,6 +80776,13 @@ properties:
|
|
|
80698
80776
|
value: {}
|
|
80699
80777
|
description: Array of key-value filters to match incoming messages (only matching
|
|
80700
80778
|
messages trigger the script)
|
|
80779
|
+
filter_logic:
|
|
80780
|
+
type: string
|
|
80781
|
+
enum:
|
|
80782
|
+
- and
|
|
80783
|
+
- or
|
|
80784
|
+
description: Logic to apply when evaluating filters. 'and' requires all filters
|
|
80785
|
+
to match, 'or' requires any filter to match.
|
|
80701
80786
|
initial_messages:
|
|
80702
80787
|
type: array
|
|
80703
80788
|
items:
|
|
@@ -81655,6 +81740,8 @@ async function list13(opts) {
|
|
|
81655
81740
|
let successFilter = opts.success;
|
|
81656
81741
|
if (opts.failed)
|
|
81657
81742
|
successFilter = false;
|
|
81743
|
+
const showSubJobs = opts.all || opts.parent;
|
|
81744
|
+
const defaultJobKinds = showSubJobs ? "script,flow,singlestepflow,flowscript,flowdependencies" : "script,flow,singlestepflow";
|
|
81658
81745
|
const limit = Math.min(opts.limit ?? 30, 100);
|
|
81659
81746
|
const allJobs = await listJobs({
|
|
81660
81747
|
workspace: workspace.workspaceId,
|
|
@@ -81663,9 +81750,11 @@ async function list13(opts) {
|
|
|
81663
81750
|
running: opts.running,
|
|
81664
81751
|
success: successFilter,
|
|
81665
81752
|
perPage: limit,
|
|
81666
|
-
jobKinds: opts.jobKinds ??
|
|
81753
|
+
jobKinds: opts.jobKinds ?? defaultJobKinds,
|
|
81667
81754
|
label: opts.label,
|
|
81668
|
-
hasNullParent:
|
|
81755
|
+
hasNullParent: showSubJobs ? undefined : true,
|
|
81756
|
+
parentJob: opts.parent,
|
|
81757
|
+
isFlowStep: opts.isFlowStep
|
|
81669
81758
|
});
|
|
81670
81759
|
const jobs = allJobs.slice(0, limit);
|
|
81671
81760
|
if (opts.json) {
|
|
@@ -81687,6 +81776,64 @@ async function list13(opts) {
|
|
|
81687
81776
|
Showing ${jobs.length} job(s). Use --limit to show more.`);
|
|
81688
81777
|
}
|
|
81689
81778
|
}
|
|
81779
|
+
function getModuleStatusIcon(type, success) {
|
|
81780
|
+
switch (type) {
|
|
81781
|
+
case "Success":
|
|
81782
|
+
return colors.green("✓");
|
|
81783
|
+
case "Failure":
|
|
81784
|
+
return colors.red("✗");
|
|
81785
|
+
case "InProgress":
|
|
81786
|
+
return colors.blue("▶");
|
|
81787
|
+
case "WaitingForPriorSteps":
|
|
81788
|
+
return colors.dim("○");
|
|
81789
|
+
case "WaitingForEvents":
|
|
81790
|
+
return colors.yellow("⏳");
|
|
81791
|
+
default:
|
|
81792
|
+
return colors.dim("·");
|
|
81793
|
+
}
|
|
81794
|
+
}
|
|
81795
|
+
function formatFlowSteps(flowStatus, rawFlow) {
|
|
81796
|
+
const modules = flowStatus?.modules ?? [];
|
|
81797
|
+
const rawModules = rawFlow?.modules ?? [];
|
|
81798
|
+
const summaryMap = new Map;
|
|
81799
|
+
for (const mod of rawModules) {
|
|
81800
|
+
if (mod.id && mod.summary) {
|
|
81801
|
+
summaryMap.set(mod.id, mod.summary);
|
|
81802
|
+
}
|
|
81803
|
+
}
|
|
81804
|
+
console.log(colors.bold(`
|
|
81805
|
+
Steps:`));
|
|
81806
|
+
for (const mod of modules) {
|
|
81807
|
+
const icon = getModuleStatusIcon(mod.type);
|
|
81808
|
+
const summary = summaryMap.get(mod.id) ?? "";
|
|
81809
|
+
const label = summary ? `${mod.id}: ${summary}` : mod.id;
|
|
81810
|
+
const jobId = mod.job ? colors.dim(mod.job) : "";
|
|
81811
|
+
const flowJobsDuration = mod.flow_jobs_duration;
|
|
81812
|
+
const flowJobs = mod.flow_jobs;
|
|
81813
|
+
if (flowJobs && flowJobs.length > 0) {
|
|
81814
|
+
const totalMs = flowJobsDuration?.duration_ms ? flowJobsDuration.duration_ms.reduce((a, b) => a + b, 0) : undefined;
|
|
81815
|
+
const durationStr = totalMs != null ? colors.dim(formatDuration(totalMs)) : "";
|
|
81816
|
+
console.log(` ${icon} ${label} ${durationStr}`);
|
|
81817
|
+
const flowJobsSuccess = mod.flow_jobs_success ?? [];
|
|
81818
|
+
const durationMs = flowJobsDuration?.duration_ms ?? [];
|
|
81819
|
+
for (let iter = 0;iter < flowJobs.length; iter++) {
|
|
81820
|
+
const iterSuccess = flowJobsSuccess[iter];
|
|
81821
|
+
const iterIcon = iterSuccess === true ? colors.green("✓") : iterSuccess === false ? colors.red("✗") : colors.dim("·");
|
|
81822
|
+
const iterDur = durationMs[iter] != null ? colors.dim(formatDuration(durationMs[iter])) : "";
|
|
81823
|
+
const iterJobId = colors.dim(flowJobs[iter]);
|
|
81824
|
+
console.log(` ${iterIcon} iteration ${iter} ${iterJobId} ${iterDur}`);
|
|
81825
|
+
}
|
|
81826
|
+
} else {
|
|
81827
|
+
const durationStr = mod.duration_ms != null ? colors.dim(formatDuration(mod.duration_ms)) : "";
|
|
81828
|
+
console.log(` ${icon} ${label} ${jobId} ${durationStr}`);
|
|
81829
|
+
}
|
|
81830
|
+
}
|
|
81831
|
+
const hasJobs = modules.some((m) => m.job);
|
|
81832
|
+
if (hasJobs) {
|
|
81833
|
+
console.log(colors.dim(`
|
|
81834
|
+
Use 'wmill job logs <job-id>' for step logs`));
|
|
81835
|
+
}
|
|
81836
|
+
}
|
|
81690
81837
|
async function get10(opts, id) {
|
|
81691
81838
|
if (opts.json)
|
|
81692
81839
|
setSilent(true);
|
|
@@ -81716,8 +81863,13 @@ async function get10(opts, id) {
|
|
|
81716
81863
|
if (j.schedule_path) {
|
|
81717
81864
|
console.log(colors.bold("Schedule:") + " " + j.schedule_path);
|
|
81718
81865
|
}
|
|
81866
|
+
const isFlow = j.job_kind === "flow" || j.job_kind === "flowpreview";
|
|
81867
|
+
if (isFlow && j.flow_status) {
|
|
81868
|
+
formatFlowSteps(j.flow_status, j.raw_flow);
|
|
81869
|
+
}
|
|
81719
81870
|
if (j.result !== undefined) {
|
|
81720
|
-
console.log(colors.bold(
|
|
81871
|
+
console.log(colors.bold(`
|
|
81872
|
+
Result:`));
|
|
81721
81873
|
console.log(JSON.stringify(j.result, null, 2));
|
|
81722
81874
|
}
|
|
81723
81875
|
}
|
|
@@ -81742,10 +81894,55 @@ async function logs(opts, id) {
|
|
|
81742
81894
|
workspace: workspace.workspaceId,
|
|
81743
81895
|
id
|
|
81744
81896
|
});
|
|
81745
|
-
const
|
|
81746
|
-
|
|
81747
|
-
|
|
81748
|
-
|
|
81897
|
+
const j = job;
|
|
81898
|
+
const jobKind = j.job_kind;
|
|
81899
|
+
if ((jobKind === "flow" || jobKind === "flowpreview") && j.flow_status?.modules) {
|
|
81900
|
+
const modules = j.flow_status.modules;
|
|
81901
|
+
const rawModules = j.raw_flow?.modules ?? [];
|
|
81902
|
+
const summaryMap = new Map;
|
|
81903
|
+
for (const mod of rawModules) {
|
|
81904
|
+
if (mod.id && mod.summary)
|
|
81905
|
+
summaryMap.set(mod.id, mod.summary);
|
|
81906
|
+
}
|
|
81907
|
+
const stripHint = (text) => text.replace(/^to remove ansi colors.*\n?/gm, "");
|
|
81908
|
+
let hasLogs = false;
|
|
81909
|
+
for (const mod of modules) {
|
|
81910
|
+
const summary = summaryMap.get(mod.id) ?? "";
|
|
81911
|
+
const label = summary ? `${mod.id}: ${summary}` : mod.id;
|
|
81912
|
+
const flowJobs = mod.flow_jobs;
|
|
81913
|
+
if (flowJobs && flowJobs.length > 0) {
|
|
81914
|
+
for (let iter = 0;iter < flowJobs.length; iter++) {
|
|
81915
|
+
try {
|
|
81916
|
+
const stepLogs = await getJobLogs({
|
|
81917
|
+
workspace: workspace.workspaceId,
|
|
81918
|
+
id: flowJobs[iter]
|
|
81919
|
+
});
|
|
81920
|
+
if (stepLogs) {
|
|
81921
|
+
console.log(colors.bold.cyan(`
|
|
81922
|
+
====== ${label} (iteration ${iter}) ======`));
|
|
81923
|
+
console.log(stripHint(stepLogs));
|
|
81924
|
+
hasLogs = true;
|
|
81925
|
+
}
|
|
81926
|
+
} catch {}
|
|
81927
|
+
}
|
|
81928
|
+
} else if (mod.job) {
|
|
81929
|
+
try {
|
|
81930
|
+
const stepLogs = await getJobLogs({
|
|
81931
|
+
workspace: workspace.workspaceId,
|
|
81932
|
+
id: mod.job
|
|
81933
|
+
});
|
|
81934
|
+
if (stepLogs) {
|
|
81935
|
+
console.log(colors.bold.cyan(`
|
|
81936
|
+
====== ${label} ======`));
|
|
81937
|
+
console.log(stripHint(stepLogs));
|
|
81938
|
+
hasLogs = true;
|
|
81939
|
+
}
|
|
81940
|
+
} catch {}
|
|
81941
|
+
}
|
|
81942
|
+
}
|
|
81943
|
+
if (!hasLogs) {
|
|
81944
|
+
info("No logs available for this flow's steps.");
|
|
81945
|
+
}
|
|
81749
81946
|
return;
|
|
81750
81947
|
}
|
|
81751
81948
|
} catch {}
|
|
@@ -81756,8 +81953,9 @@ async function logs(opts, id) {
|
|
|
81756
81953
|
if (jobLogs == null || jobLogs === "") {
|
|
81757
81954
|
info("No logs available for this job.");
|
|
81758
81955
|
} else {
|
|
81956
|
+
const stripped = jobLogs.replace(/^to remove ansi colors.*\n?/gm, "");
|
|
81759
81957
|
console.error("to remove ansi colors, use: | sed 's/\\x1B\\[[0-9;]\\{1,\\}[A-Za-z]//g'");
|
|
81760
|
-
console.log(
|
|
81958
|
+
console.log(stripped);
|
|
81761
81959
|
}
|
|
81762
81960
|
}
|
|
81763
81961
|
async function cancel(opts, id) {
|
|
@@ -81773,8 +81971,8 @@ async function cancel(opts, id) {
|
|
|
81773
81971
|
});
|
|
81774
81972
|
info(colors.green(`Job ${id} canceled.`));
|
|
81775
81973
|
}
|
|
81776
|
-
var listOptions = (cmd) => cmd.option("--json", "Output as JSON (for piping to jq)").option("--script-path <scriptPath:string>", "Filter by exact script/flow path").option("--created-by <createdBy:string>", "Filter by creator username").option("--running", "Show only running jobs").option("--failed", "Show only failed jobs").option("--success <success:boolean>", "Filter by success status (true/false)").option("--limit <limit:number>", "Number of jobs to return (default 30, max 100)").option("--job-kinds <jobKinds:string>", "Filter by job kinds (default: script,flow,singlestepflow)").option("--label <label:string>", "Filter by job label").option("--all", "Include sub-jobs (flow steps). By default only top-level jobs are shown");
|
|
81777
|
-
var command29 = listOptions(new Command().description("Manage jobs (list, inspect, cancel)")).action(list13).command("list", listOptions(new Command().description("List recent jobs"))).action(list13).command("get", "Get job details
|
|
81974
|
+
var listOptions = (cmd) => cmd.option("--json", "Output as JSON (for piping to jq)").option("--script-path <scriptPath:string>", "Filter by exact script/flow path").option("--created-by <createdBy:string>", "Filter by creator username").option("--running", "Show only running jobs").option("--failed", "Show only failed jobs").option("--success <success:boolean>", "Filter by success status (true/false)").option("--limit <limit:number>", "Number of jobs to return (default 30, max 100)").option("--job-kinds <jobKinds:string>", "Filter by job kinds (default: script,flow,singlestepflow)").option("--label <label:string>", "Filter by job label").option("--all", "Include sub-jobs (flow steps). By default only top-level jobs are shown").option("--parent <parent:string>", "Filter by parent job ID (show sub-jobs of a specific flow)").option("--is-flow-step", "Show only flow step jobs");
|
|
81975
|
+
var command29 = listOptions(new Command().description("Manage jobs (list, inspect, cancel)")).action(list13).command("list", listOptions(new Command().description("List recent jobs"))).action(list13).command("get", "Get job details. For flows: shows step tree with sub-job IDs").arguments("<id:string>").option("--json", "Output as JSON (for piping to jq)").action(get10).command("result", "Get the result of a completed job (machine-friendly)").arguments("<id:string>").action(result).command("logs", "Get job logs. For flows: aggregates all step logs").arguments("<id:string>").action(logs).command("cancel", "Cancel a running or queued job").arguments("<id:string>").option("--reason <reason:string>", "Reason for cancellation").action(cancel);
|
|
81778
81976
|
var job_default = command29;
|
|
81779
81977
|
|
|
81780
81978
|
// src/commands/group/group.ts
|
|
@@ -82342,7 +82540,7 @@ var config_default = command35;
|
|
|
82342
82540
|
|
|
82343
82541
|
// src/main.ts
|
|
82344
82542
|
await init_context();
|
|
82345
|
-
var VERSION = "1.
|
|
82543
|
+
var VERSION = "1.671.0";
|
|
82346
82544
|
var command36 = new Command().name("wmill").action(() => info(`Welcome to Windmill CLI ${VERSION}. Use -h for help.`)).description("Windmill CLI").globalOption("--workspace <workspace:string>", "Specify the target workspace. This overrides the default workspace.").globalOption("--debug --verbose", "Show debug/verbose logs").globalOption("--show-diffs", "Show diff informations when syncing (may show sensitive informations)").globalOption("--token <token:string>", "Specify an API token. This will override any stored token.").globalOption("--base-url <baseUrl:string>", "Specify the base URL of the API. If used, --token and --workspace are required and no local remote/workspace already set will be used.").globalOption("--config-dir <configDir:string>", "Specify a custom config directory. Overrides WMILL_CONFIG_DIR environment variable and default ~/.config location.").env("HEADERS <headers:string>", `Specify headers to use for all requests. e.g: "HEADERS='h1: v1, h2: v2'"`).version(VERSION).versionOption(false).command("init", init_default).command("app", app_default).command("flow", flow_default).command("script", script_default).command("workspace", workspace_default).command("resource", resource_default).command("resource-type", resource_type_default).command("user", user_default).command("variable", variable_default).command("hub", hub_default).command("folder", folder_default).command("schedule", schedule_default).command("trigger", trigger_default).command("dev", dev_default2).command("sync", sync_default).command("lint", lint_default).command("gitsync-settings", gitsync_settings_default).command("instance", instance_default).command("worker-groups", worker_groups_default).command("workers", workers_default).command("queues", queues_default).command("dependencies", dependencies_default).command("jobs", jobs_default).command("job", job_default).command("group", group_default).command("audit", audit_default).command("token", token_default).command("generate-metadata", generate_metadata_default).command("docs", docs_default).command("config", config_default).command("version --version", "Show version information").action(async (opts) => {
|
|
82347
82545
|
console.log("CLI version: " + VERSION);
|
|
82348
82546
|
try {
|