@galaxy-tool-util/cli 0.1.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/README.md +19 -0
- package/dist/bin/galaxy-tool-cache.d.ts +3 -0
- package/dist/bin/galaxy-tool-cache.d.ts.map +1 -0
- package/dist/bin/galaxy-tool-cache.js +50 -0
- package/dist/bin/galaxy-tool-cache.js.map +1 -0
- package/dist/bin/galaxy-workflow-validate.d.ts +3 -0
- package/dist/bin/galaxy-workflow-validate.d.ts.map +1 -0
- package/dist/bin/galaxy-workflow-validate.js +17 -0
- package/dist/bin/galaxy-workflow-validate.js.map +1 -0
- package/dist/commands/add.d.ts +7 -0
- package/dist/commands/add.d.ts.map +1 -0
- package/dist/commands/add.js +15 -0
- package/dist/commands/add.js.map +1 -0
- package/dist/commands/clear.d.ts +5 -0
- package/dist/commands/clear.d.ts.map +1 -0
- package/dist/commands/clear.js +16 -0
- package/dist/commands/clear.js.map +1 -0
- package/dist/commands/info.d.ts +6 -0
- package/dist/commands/info.d.ts.map +1 -0
- package/dist/commands/info.js +32 -0
- package/dist/commands/info.js.map +1 -0
- package/dist/commands/list.d.ts +6 -0
- package/dist/commands/list.d.ts.map +1 -0
- package/dist/commands/list.js +24 -0
- package/dist/commands/list.js.map +1 -0
- package/dist/commands/resolve-tool.d.ts +16 -0
- package/dist/commands/resolve-tool.d.ts.map +1 -0
- package/dist/commands/resolve-tool.js +17 -0
- package/dist/commands/resolve-tool.js.map +1 -0
- package/dist/commands/schema.d.ts +8 -0
- package/dist/commands/schema.d.ts.map +1 -0
- package/dist/commands/schema.js +55 -0
- package/dist/commands/schema.js.map +1 -0
- package/dist/commands/url-resolver.d.ts +23 -0
- package/dist/commands/url-resolver.d.ts.map +1 -0
- package/dist/commands/url-resolver.js +58 -0
- package/dist/commands/url-resolver.js.map +1 -0
- package/dist/commands/validate-workflow-json-schema.d.ts +16 -0
- package/dist/commands/validate-workflow-json-schema.d.ts.map +1 -0
- package/dist/commands/validate-workflow-json-schema.js +313 -0
- package/dist/commands/validate-workflow-json-schema.js.map +1 -0
- package/dist/commands/validate-workflow.d.ts +21 -0
- package/dist/commands/validate-workflow.d.ts.map +1 -0
- package/dist/commands/validate-workflow.js +257 -0
- package/dist/commands/validate-workflow.js.map +1 -0
- package/dist/index.d.ts +19 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +19 -0
- package/dist/index.js.map +1 -0
- package/package.json +51 -0
|
@@ -0,0 +1,313 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* JSON Schema-based workflow validation.
|
|
3
|
+
*
|
|
4
|
+
* Two-level validation using AJV Draft 2020-12:
|
|
5
|
+
* Level 1 (structural): validates workflow dict against generated JSON Schema
|
|
6
|
+
* Level 2 (per-step tool state): validates each step's state against tool-specific JSON Schema
|
|
7
|
+
*
|
|
8
|
+
* Mirrors Galaxy's validation_json_schema.py.
|
|
9
|
+
*/
|
|
10
|
+
import { ToolCache } from "@galaxy-tool-util/core";
|
|
11
|
+
import { createFieldModel, GalaxyWorkflowSchema, NativeGalaxyWorkflowSchema, expandedNative, expandedFormat2, injectConnectionsIntoState, scanForReplacements, } from "@galaxy-tool-util/schema";
|
|
12
|
+
import * as JSONSchema from "effect/JSONSchema";
|
|
13
|
+
import Ajv2020 from "ajv/dist/2020.js";
|
|
14
|
+
import { readFileSync, existsSync } from "node:fs";
|
|
15
|
+
import { join } from "node:path";
|
|
16
|
+
import { isResolveError, loadCachedTool } from "./resolve-tool.js";
|
|
17
|
+
const Ajv = Ajv2020.default ?? Ajv2020;
|
|
18
|
+
const ajv = new Ajv({ allErrors: true, strict: false });
|
|
19
|
+
// --- structural schema cache (generated once) ---
|
|
20
|
+
let _nativeStructValidator;
|
|
21
|
+
let _format2StructValidator;
|
|
22
|
+
function nativeStructuralValidator() {
|
|
23
|
+
if (!_nativeStructValidator) {
|
|
24
|
+
const schema = JSONSchema.make(NativeGalaxyWorkflowSchema, { target: "jsonSchema2020-12" });
|
|
25
|
+
_nativeStructValidator = ajv.compile(schema);
|
|
26
|
+
}
|
|
27
|
+
return _nativeStructValidator;
|
|
28
|
+
}
|
|
29
|
+
function format2StructuralValidator() {
|
|
30
|
+
if (!_format2StructValidator) {
|
|
31
|
+
const schema = JSONSchema.make(GalaxyWorkflowSchema, { target: "jsonSchema2020-12" });
|
|
32
|
+
_format2StructValidator = ajv.compile(schema);
|
|
33
|
+
}
|
|
34
|
+
return _format2StructValidator;
|
|
35
|
+
}
|
|
36
|
+
// --- tool state validator cache ---
|
|
37
|
+
const _toolStateCache = new Map();
|
|
38
|
+
// Recursively strip additionalProperties from a JSON Schema to match
|
|
39
|
+
// the Effect decode behavior of onExcessProperty: "ignore".
|
|
40
|
+
// Until we implement stale key cleaning (jmchilton/galaxy-tool-util-ts#5),
|
|
41
|
+
// real workflows have extra keys that would fail strict validation.
|
|
42
|
+
function stripAdditionalProperties(schema) {
|
|
43
|
+
if (schema === null || typeof schema !== "object")
|
|
44
|
+
return schema;
|
|
45
|
+
if (Array.isArray(schema))
|
|
46
|
+
return schema.map(stripAdditionalProperties);
|
|
47
|
+
const obj = schema;
|
|
48
|
+
const result = {};
|
|
49
|
+
for (const [key, value] of Object.entries(obj)) {
|
|
50
|
+
if (key === "additionalProperties")
|
|
51
|
+
continue;
|
|
52
|
+
result[key] = stripAdditionalProperties(value);
|
|
53
|
+
}
|
|
54
|
+
return result;
|
|
55
|
+
}
|
|
56
|
+
function toolStateCacheKey(toolId, toolVersion, representation) {
|
|
57
|
+
return `${toolId}@${toolVersion ?? ""}@${representation}`;
|
|
58
|
+
}
|
|
59
|
+
function buildToolStateValidator(bundle, representation) {
|
|
60
|
+
const effectSchema = createFieldModel(bundle, representation);
|
|
61
|
+
if (!effectSchema)
|
|
62
|
+
return null;
|
|
63
|
+
try {
|
|
64
|
+
const jsonSchema = JSONSchema.make(effectSchema, { target: "jsonSchema2020-12" });
|
|
65
|
+
const relaxed = stripAdditionalProperties(jsonSchema);
|
|
66
|
+
return ajv.compile(relaxed);
|
|
67
|
+
}
|
|
68
|
+
catch {
|
|
69
|
+
return null;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
function loadToolStateValidatorFromDir(toolId, toolVersion, schemaDir) {
|
|
73
|
+
const safeId = toolId.replace(/\//g, "~");
|
|
74
|
+
const version = toolVersion ?? "_default_";
|
|
75
|
+
const toolDir = join(schemaDir, safeId);
|
|
76
|
+
let schemaPath = join(toolDir, `${version}.json`);
|
|
77
|
+
if (!existsSync(schemaPath)) {
|
|
78
|
+
schemaPath = join(toolDir, "_default_.json");
|
|
79
|
+
}
|
|
80
|
+
if (!existsSync(schemaPath))
|
|
81
|
+
return null;
|
|
82
|
+
try {
|
|
83
|
+
const raw = JSON.parse(readFileSync(schemaPath, "utf-8"));
|
|
84
|
+
return ajv.compile(raw);
|
|
85
|
+
}
|
|
86
|
+
catch {
|
|
87
|
+
return null;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
function getOrBuildValidator(toolId, toolVersion, bundle, representation, toolSchemaDir) {
|
|
91
|
+
const key = toolStateCacheKey(toolId, toolVersion, representation);
|
|
92
|
+
if (_toolStateCache.has(key))
|
|
93
|
+
return _toolStateCache.get(key);
|
|
94
|
+
let validator = null;
|
|
95
|
+
if (toolSchemaDir) {
|
|
96
|
+
validator = loadToolStateValidatorFromDir(toolId, toolVersion, toolSchemaDir);
|
|
97
|
+
}
|
|
98
|
+
if (!validator) {
|
|
99
|
+
validator = buildToolStateValidator(bundle, representation);
|
|
100
|
+
}
|
|
101
|
+
_toolStateCache.set(key, validator);
|
|
102
|
+
return validator;
|
|
103
|
+
}
|
|
104
|
+
// --- AJV error formatting ---
|
|
105
|
+
function formatAjvErrors(validate) {
|
|
106
|
+
if (!validate.errors)
|
|
107
|
+
return [];
|
|
108
|
+
return validate.errors.map((e) => {
|
|
109
|
+
const path = e.instancePath ? e.instancePath.replace(/\//g, ".").slice(1) : "(root)";
|
|
110
|
+
return `${path}: ${e.message ?? "unknown error"}`;
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
// --- main entry point ---
|
|
114
|
+
export async function runValidateWorkflowJsonSchema(data, format, opts, expansionOpts) {
|
|
115
|
+
// --- structural validation ---
|
|
116
|
+
const validationData = { ...data };
|
|
117
|
+
if (format === "native" && !("class" in validationData)) {
|
|
118
|
+
validationData.class = "NativeGalaxyWorkflow";
|
|
119
|
+
}
|
|
120
|
+
else if (format === "format2" && !("class" in validationData)) {
|
|
121
|
+
validationData.class = "GalaxyWorkflow";
|
|
122
|
+
}
|
|
123
|
+
const structValidator = format === "native"
|
|
124
|
+
? nativeStructuralValidator()
|
|
125
|
+
: format2StructuralValidator();
|
|
126
|
+
const structOk = structValidator(validationData);
|
|
127
|
+
if (!structOk) {
|
|
128
|
+
console.error(`\nStructural validation errors (json-schema):`);
|
|
129
|
+
for (const line of formatAjvErrors(structValidator)) {
|
|
130
|
+
console.error(` ${line}`);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
else {
|
|
134
|
+
console.log(`Structural validation (json-schema): OK`);
|
|
135
|
+
}
|
|
136
|
+
// --- tool state validation ---
|
|
137
|
+
if (opts.toolState === false) {
|
|
138
|
+
process.exitCode = structOk ? 0 : 1;
|
|
139
|
+
return;
|
|
140
|
+
}
|
|
141
|
+
if (!structOk) {
|
|
142
|
+
process.exitCode = 1;
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
const cache = new ToolCache({ cacheDir: opts.cacheDir });
|
|
146
|
+
await cache.index.load();
|
|
147
|
+
let results;
|
|
148
|
+
if (format === "native") {
|
|
149
|
+
results = await validateNativeStepsJsonSchema(data, cache, opts.toolSchemaDir, "", expansionOpts);
|
|
150
|
+
}
|
|
151
|
+
else {
|
|
152
|
+
results = await validateFormat2StepsJsonSchema(data, cache, opts.toolSchemaDir, "", expansionOpts);
|
|
153
|
+
}
|
|
154
|
+
if (results.length === 0) {
|
|
155
|
+
console.log("No tool steps to validate state for.");
|
|
156
|
+
process.exitCode = 0;
|
|
157
|
+
return;
|
|
158
|
+
}
|
|
159
|
+
let stateOk = true;
|
|
160
|
+
let validated = 0;
|
|
161
|
+
let skipped = 0;
|
|
162
|
+
for (const r of results) {
|
|
163
|
+
if (r.status === "skip") {
|
|
164
|
+
skipped++;
|
|
165
|
+
console.warn(` [${r.stepLabel}] skipped — ${r.errors[0] ?? "unknown"}`);
|
|
166
|
+
}
|
|
167
|
+
else if (r.status === "fail") {
|
|
168
|
+
validated++;
|
|
169
|
+
stateOk = false;
|
|
170
|
+
console.error(` [${r.stepLabel}] tool_state errors (${r.toolId}):`);
|
|
171
|
+
for (const line of r.errors) {
|
|
172
|
+
console.error(` ${line}`);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
else {
|
|
176
|
+
validated++;
|
|
177
|
+
console.log(` [${r.stepLabel}] tool_state: OK`);
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
console.log(`\nTool state (json-schema): ${validated} validated, ${skipped} skipped`);
|
|
181
|
+
process.exitCode = stateOk ? 0 : 1;
|
|
182
|
+
}
|
|
183
|
+
// --- Native validation (json-schema) ---
|
|
184
|
+
export async function validateNativeStepsJsonSchema(data, cache, toolSchemaDir, prefix = "", expansionOpts) {
|
|
185
|
+
const expanded = await expandedNative(data, expansionOpts);
|
|
186
|
+
return _validateNativeWorkflowJsonSchema(expanded, cache, toolSchemaDir, prefix);
|
|
187
|
+
}
|
|
188
|
+
async function _validateNativeWorkflowJsonSchema(wf, cache, toolSchemaDir, prefix) {
|
|
189
|
+
const results = [];
|
|
190
|
+
for (const [key, step] of Object.entries(wf.steps)) {
|
|
191
|
+
const stepLabel = prefix ? `${prefix}${key}` : key;
|
|
192
|
+
if (step.type === "subworkflow" && step.subworkflow) {
|
|
193
|
+
const subResults = await _validateNativeWorkflowJsonSchema(step.subworkflow, cache, toolSchemaDir, `${stepLabel}.`);
|
|
194
|
+
results.push(...subResults);
|
|
195
|
+
continue;
|
|
196
|
+
}
|
|
197
|
+
const toolId = step.tool_id;
|
|
198
|
+
if (!toolId)
|
|
199
|
+
continue;
|
|
200
|
+
const toolVersion = step.tool_version ?? null;
|
|
201
|
+
const result = await _validateNativeStepJsonSchema(step, stepLabel, toolId, toolVersion, cache, toolSchemaDir);
|
|
202
|
+
results.push(result);
|
|
203
|
+
}
|
|
204
|
+
return results;
|
|
205
|
+
}
|
|
206
|
+
async function _validateNativeStepJsonSchema(step, stepLabel, toolId, toolVersion, cache, toolSchemaDir) {
|
|
207
|
+
const resolved = await loadCachedTool(cache, toolId, toolVersion);
|
|
208
|
+
if (isResolveError(resolved)) {
|
|
209
|
+
const reason = resolved.kind === "no_version"
|
|
210
|
+
? `no version for ${toolId}`
|
|
211
|
+
: `${toolId} not in cache`;
|
|
212
|
+
return { stepLabel, toolId, toolVersion, status: "skip", errors: [reason] };
|
|
213
|
+
}
|
|
214
|
+
const bundle = {
|
|
215
|
+
parameters: resolved.tool.inputs,
|
|
216
|
+
};
|
|
217
|
+
const replacementScan = scanForReplacements(bundle.parameters, step.tool_state);
|
|
218
|
+
if (replacementScan === "yes") {
|
|
219
|
+
return { stepLabel, toolId, toolVersion, status: "skip", errors: ["replacement parameters detected"] };
|
|
220
|
+
}
|
|
221
|
+
const state = structuredClone(step.tool_state);
|
|
222
|
+
const connections = {};
|
|
223
|
+
for (const [k, v] of Object.entries(step.input_connections)) {
|
|
224
|
+
connections[k] = v;
|
|
225
|
+
}
|
|
226
|
+
injectConnectionsIntoState(bundle.parameters, state, connections);
|
|
227
|
+
const validate = getOrBuildValidator(toolId, toolVersion, bundle, "workflow_step_native", toolSchemaDir);
|
|
228
|
+
if (!validate) {
|
|
229
|
+
return { stepLabel, toolId, toolVersion, status: "skip", errors: ["unsupported parameter types"] };
|
|
230
|
+
}
|
|
231
|
+
const valid = validate(state);
|
|
232
|
+
if (!valid) {
|
|
233
|
+
return { stepLabel, toolId, toolVersion, status: "fail", errors: formatAjvErrors(validate) };
|
|
234
|
+
}
|
|
235
|
+
return { stepLabel, toolId, toolVersion, status: "ok", errors: [] };
|
|
236
|
+
}
|
|
237
|
+
// --- Format2 validation (json-schema) ---
|
|
238
|
+
export async function validateFormat2StepsJsonSchema(data, cache, toolSchemaDir, prefix = "", expansionOpts) {
|
|
239
|
+
const expanded = await expandedFormat2(data, expansionOpts);
|
|
240
|
+
return _validateFormat2WorkflowJsonSchema(expanded, cache, toolSchemaDir, prefix);
|
|
241
|
+
}
|
|
242
|
+
async function _validateFormat2WorkflowJsonSchema(wf, cache, toolSchemaDir, prefix) {
|
|
243
|
+
const results = [];
|
|
244
|
+
for (let i = 0; i < wf.steps.length; i++) {
|
|
245
|
+
const step = wf.steps[i];
|
|
246
|
+
const stepLabel = prefix ? `${prefix}${i}` : String(i);
|
|
247
|
+
if (step.run && typeof step.run === "object") {
|
|
248
|
+
const subResults = await _validateFormat2WorkflowJsonSchema(step.run, cache, toolSchemaDir, `${stepLabel}.`);
|
|
249
|
+
results.push(...subResults);
|
|
250
|
+
continue;
|
|
251
|
+
}
|
|
252
|
+
const toolId = step.tool_id;
|
|
253
|
+
if (!toolId)
|
|
254
|
+
continue;
|
|
255
|
+
const toolVersion = step.tool_version ?? null;
|
|
256
|
+
const result = await _validateFormat2StepJsonSchema(step, stepLabel, toolId, toolVersion, cache, toolSchemaDir);
|
|
257
|
+
results.push(result);
|
|
258
|
+
}
|
|
259
|
+
return results;
|
|
260
|
+
}
|
|
261
|
+
async function _validateFormat2StepJsonSchema(step, stepLabel, toolId, toolVersion, cache, toolSchemaDir) {
|
|
262
|
+
const resolved = await loadCachedTool(cache, toolId, toolVersion);
|
|
263
|
+
if (isResolveError(resolved)) {
|
|
264
|
+
const reason = resolved.kind === "no_version"
|
|
265
|
+
? `no version for ${toolId}`
|
|
266
|
+
: `${toolId} not in cache`;
|
|
267
|
+
return { stepLabel, toolId, toolVersion, status: "skip", errors: [reason] };
|
|
268
|
+
}
|
|
269
|
+
const bundle = {
|
|
270
|
+
parameters: resolved.tool.inputs,
|
|
271
|
+
};
|
|
272
|
+
const rawState = step.state ?? step.tool_state ?? {};
|
|
273
|
+
const state = rawState;
|
|
274
|
+
// Level 1: base validation against workflow_step
|
|
275
|
+
const baseValidate = getOrBuildValidator(toolId, toolVersion, bundle, "workflow_step", toolSchemaDir);
|
|
276
|
+
if (!baseValidate) {
|
|
277
|
+
return { stepLabel, toolId, toolVersion, status: "skip", errors: ["unsupported parameter types"] };
|
|
278
|
+
}
|
|
279
|
+
const baseValid = baseValidate(state);
|
|
280
|
+
if (!baseValid) {
|
|
281
|
+
return { stepLabel, toolId, toolVersion, status: "fail", errors: formatAjvErrors(baseValidate) };
|
|
282
|
+
}
|
|
283
|
+
// Build connections dict from step.in
|
|
284
|
+
const connections = {};
|
|
285
|
+
for (const stepInput of step.in) {
|
|
286
|
+
if (stepInput.id && stepInput.source) {
|
|
287
|
+
const src = stepInput.source;
|
|
288
|
+
connections[stepInput.id] = Array.isArray(src) ? src : [src];
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
// Level 2: linked validation with connections injected
|
|
292
|
+
if (Object.keys(connections).length > 0) {
|
|
293
|
+
const linkedState = structuredClone(state);
|
|
294
|
+
const remaining = injectConnectionsIntoState(bundle.parameters, linkedState, connections);
|
|
295
|
+
const unmatchedKeys = Object.keys(remaining);
|
|
296
|
+
if (unmatchedKeys.length > 0) {
|
|
297
|
+
return {
|
|
298
|
+
stepLabel, toolId, toolVersion, status: "fail",
|
|
299
|
+
errors: unmatchedKeys.map((k) => `No parameter definition matching connection key "${k}"`),
|
|
300
|
+
};
|
|
301
|
+
}
|
|
302
|
+
const linkedValidate = getOrBuildValidator(toolId, toolVersion, bundle, "workflow_step_linked", toolSchemaDir);
|
|
303
|
+
if (!linkedValidate) {
|
|
304
|
+
return { stepLabel, toolId, toolVersion, status: "skip", errors: ["unsupported parameter types"] };
|
|
305
|
+
}
|
|
306
|
+
const linkedValid = linkedValidate(linkedState);
|
|
307
|
+
if (!linkedValid) {
|
|
308
|
+
return { stepLabel, toolId, toolVersion, status: "fail", errors: formatAjvErrors(linkedValidate) };
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
return { stepLabel, toolId, toolVersion, status: "ok", errors: [] };
|
|
312
|
+
}
|
|
313
|
+
//# sourceMappingURL=validate-workflow-json-schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate-workflow-json-schema.js","sourceRoot":"","sources":["../../src/commands/validate-workflow-json-schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { ToolCache } from "@galaxy-tool-util/core";
|
|
2
|
+
import { type ExpansionOptions } from "@galaxy-tool-util/schema";
|
|
3
|
+
export type { WorkflowFormat } from "@galaxy-tool-util/schema";
|
|
4
|
+
export type ValidationMode = "effect" | "json-schema";
|
|
5
|
+
export interface ValidateWorkflowOptions {
|
|
6
|
+
format?: string;
|
|
7
|
+
toolState?: boolean;
|
|
8
|
+
cacheDir?: string;
|
|
9
|
+
mode?: ValidationMode;
|
|
10
|
+
toolSchemaDir?: string;
|
|
11
|
+
}
|
|
12
|
+
export interface StepValidationResult {
|
|
13
|
+
stepLabel: string;
|
|
14
|
+
toolId: string;
|
|
15
|
+
toolVersion: string | null;
|
|
16
|
+
status: "ok" | "fail" | "skip";
|
|
17
|
+
errors: string[];
|
|
18
|
+
}
|
|
19
|
+
export declare function runValidateWorkflow(filePath: string, opts: ValidateWorkflowOptions): Promise<void>;
|
|
20
|
+
export declare function validateNativeSteps(data: Record<string, unknown>, cache: ToolCache, prefix?: string, expansionOpts?: ExpansionOptions): Promise<StepValidationResult[]>;
|
|
21
|
+
//# sourceMappingURL=validate-workflow.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate-workflow.d.ts","sourceRoot":"","sources":["../../src/commands/validate-workflow.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAeL,KAAK,gBAAgB,EAEtB,MAAM,0BAA0B,CAAC;AASlC,YAAY,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE/D,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,aAAa,CAAC;AAEtD,MAAM,WAAW,uBAAuB;IACtC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAOD,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,MAAM,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,CAAC;IAC/B,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,wBAAsB,mBAAmB,CACvC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,uBAAuB,GAC5B,OAAO,CAAC,IAAI,CAAC,CAwGf;AAID,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,KAAK,EAAE,SAAS,EAChB,MAAM,SAAK,EACX,aAAa,CAAC,EAAE,gBAAgB,GAC/B,OAAO,CAAC,oBAAoB,EAAE,CAAC,CAGjC"}
|
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
import { ToolCache } from "@galaxy-tool-util/core";
|
|
2
|
+
import { createFieldModel, detectFormat, GalaxyWorkflowSchema, NativeGalaxyWorkflowSchema, expandedNative, expandedFormat2, injectConnectionsIntoState, stripConnectedValues, scanForReplacements, } from "@galaxy-tool-util/schema";
|
|
3
|
+
import * as ParseResult from "effect/ParseResult";
|
|
4
|
+
import * as S from "effect/Schema";
|
|
5
|
+
import { readFile } from "node:fs/promises";
|
|
6
|
+
import { dirname } from "node:path";
|
|
7
|
+
import * as YAML from "yaml";
|
|
8
|
+
import { isResolveError, loadCachedTool } from "./resolve-tool.js";
|
|
9
|
+
import { createDefaultResolver } from "./url-resolver.js";
|
|
10
|
+
function formatIssues(error) {
|
|
11
|
+
const issues = ParseResult.ArrayFormatter.formatErrorSync(error);
|
|
12
|
+
return issues.map((i) => `${i.path.join(".")}: ${i.message}`);
|
|
13
|
+
}
|
|
14
|
+
export async function runValidateWorkflow(filePath, opts) {
|
|
15
|
+
const raw = await readFile(filePath, "utf-8");
|
|
16
|
+
let data;
|
|
17
|
+
try {
|
|
18
|
+
if (filePath.endsWith(".ga") || filePath.endsWith(".json")) {
|
|
19
|
+
data = JSON.parse(raw);
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
data = YAML.parse(raw);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
catch (e) {
|
|
26
|
+
const msg = e instanceof Error ? e.message : String(e);
|
|
27
|
+
console.error(`Failed to parse ${filePath}: ${msg}`);
|
|
28
|
+
process.exitCode = 1;
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
const format = opts.format === "native" || opts.format === "format2"
|
|
32
|
+
? opts.format
|
|
33
|
+
: detectFormat(data);
|
|
34
|
+
const mode = opts.mode === "json-schema" ? "json-schema" : "effect";
|
|
35
|
+
console.log(`Detected format: ${format}, mode: ${mode}`);
|
|
36
|
+
// Build expansion options for resolving external subworkflow references
|
|
37
|
+
const workflowDirectory = dirname(filePath);
|
|
38
|
+
const expansionOpts = {
|
|
39
|
+
resolver: createDefaultResolver({ workflowDirectory }),
|
|
40
|
+
};
|
|
41
|
+
if (mode === "json-schema") {
|
|
42
|
+
const { runValidateWorkflowJsonSchema } = await import("./validate-workflow-json-schema.js");
|
|
43
|
+
return runValidateWorkflowJsonSchema(data, format, opts, expansionOpts);
|
|
44
|
+
}
|
|
45
|
+
// --- structural validation (effect mode) ---
|
|
46
|
+
const validationData = { ...data };
|
|
47
|
+
if (format === "native" && !("class" in validationData)) {
|
|
48
|
+
validationData.class = "NativeGalaxyWorkflow";
|
|
49
|
+
}
|
|
50
|
+
else if (format === "format2" && !("class" in validationData)) {
|
|
51
|
+
validationData.class = "GalaxyWorkflow";
|
|
52
|
+
}
|
|
53
|
+
const schema = format === "native" ? NativeGalaxyWorkflowSchema : GalaxyWorkflowSchema;
|
|
54
|
+
const decode = S.decodeUnknownEither(schema, { onExcessProperty: "ignore" });
|
|
55
|
+
const structResult = decode(validationData);
|
|
56
|
+
let structOk = true;
|
|
57
|
+
if (structResult._tag === "Left") {
|
|
58
|
+
structOk = false;
|
|
59
|
+
console.error(`\nStructural validation errors:`);
|
|
60
|
+
for (const line of formatIssues(structResult.left)) {
|
|
61
|
+
console.error(` ${line}`);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
console.log(`Structural validation: OK`);
|
|
66
|
+
}
|
|
67
|
+
// --- tool state validation (effect mode) ---
|
|
68
|
+
if (opts.toolState === false) {
|
|
69
|
+
process.exitCode = structOk ? 0 : 1;
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
const cache = new ToolCache({ cacheDir: opts.cacheDir });
|
|
73
|
+
await cache.index.load();
|
|
74
|
+
let results;
|
|
75
|
+
if (format === "native") {
|
|
76
|
+
results = await validateNativeSteps(data, cache, "", expansionOpts);
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
results = await validateFormat2Steps(data, cache, "", expansionOpts);
|
|
80
|
+
}
|
|
81
|
+
if (results.length === 0) {
|
|
82
|
+
console.log("No tool steps to validate state for.");
|
|
83
|
+
process.exitCode = structOk ? 0 : 1;
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
let stateOk = true;
|
|
87
|
+
let validated = 0;
|
|
88
|
+
let skipped = 0;
|
|
89
|
+
for (const r of results) {
|
|
90
|
+
if (r.status === "skip") {
|
|
91
|
+
skipped++;
|
|
92
|
+
console.warn(` [${r.stepLabel}] skipped — ${r.errors[0] ?? "unknown"}`);
|
|
93
|
+
}
|
|
94
|
+
else if (r.status === "fail") {
|
|
95
|
+
validated++;
|
|
96
|
+
stateOk = false;
|
|
97
|
+
console.error(` [${r.stepLabel}] tool_state errors (${r.toolId}):`);
|
|
98
|
+
for (const line of r.errors) {
|
|
99
|
+
console.error(` ${line}`);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
validated++;
|
|
104
|
+
console.log(` [${r.stepLabel}] tool_state: OK`);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
console.log(`\nTool state: ${validated} validated, ${skipped} skipped`);
|
|
108
|
+
process.exitCode = structOk && stateOk ? 0 : 1;
|
|
109
|
+
}
|
|
110
|
+
// --- Native validation ---
|
|
111
|
+
export async function validateNativeSteps(data, cache, prefix = "", expansionOpts) {
|
|
112
|
+
const expanded = await expandedNative(data, expansionOpts);
|
|
113
|
+
return _validateNativeWorkflow(expanded, cache, prefix);
|
|
114
|
+
}
|
|
115
|
+
async function _validateNativeWorkflow(wf, cache, prefix) {
|
|
116
|
+
const results = [];
|
|
117
|
+
for (const [key, step] of Object.entries(wf.steps)) {
|
|
118
|
+
const stepLabel = prefix ? `${prefix}${key}` : key;
|
|
119
|
+
// Recurse into subworkflows
|
|
120
|
+
if (step.type === "subworkflow" && step.subworkflow) {
|
|
121
|
+
const subResults = await _validateNativeWorkflow(step.subworkflow, cache, `${stepLabel}.`);
|
|
122
|
+
results.push(...subResults);
|
|
123
|
+
continue;
|
|
124
|
+
}
|
|
125
|
+
const toolId = step.tool_id;
|
|
126
|
+
if (!toolId)
|
|
127
|
+
continue;
|
|
128
|
+
const toolVersion = step.tool_version ?? null;
|
|
129
|
+
const result = await _validateNativeStep(step, stepLabel, toolId, toolVersion, cache);
|
|
130
|
+
results.push(result);
|
|
131
|
+
}
|
|
132
|
+
return results;
|
|
133
|
+
}
|
|
134
|
+
async function _validateNativeStep(step, stepLabel, toolId, toolVersion, cache) {
|
|
135
|
+
const resolved = await loadCachedTool(cache, toolId, toolVersion);
|
|
136
|
+
if (isResolveError(resolved)) {
|
|
137
|
+
const reason = resolved.kind === "no_version"
|
|
138
|
+
? `no version for ${toolId}`
|
|
139
|
+
: `${toolId} not in cache`;
|
|
140
|
+
return { stepLabel, toolId, toolVersion, status: "skip", errors: [reason] };
|
|
141
|
+
}
|
|
142
|
+
const bundle = {
|
|
143
|
+
parameters: resolved.tool.inputs,
|
|
144
|
+
};
|
|
145
|
+
// Skip validation if replacement parameters (${...}) are present in typed fields
|
|
146
|
+
const replacementScan = scanForReplacements(bundle.parameters, step.tool_state);
|
|
147
|
+
if (replacementScan === "yes") {
|
|
148
|
+
return { stepLabel, toolId, toolVersion, status: "skip", errors: ["replacement parameters detected"] };
|
|
149
|
+
}
|
|
150
|
+
// Deep copy state and inject connection markers
|
|
151
|
+
const state = structuredClone(step.tool_state);
|
|
152
|
+
const connections = {};
|
|
153
|
+
for (const [key, val] of Object.entries(step.input_connections)) {
|
|
154
|
+
connections[key] = val;
|
|
155
|
+
}
|
|
156
|
+
injectConnectionsIntoState(bundle.parameters, state, connections);
|
|
157
|
+
// Validate against workflow_step_native schema
|
|
158
|
+
const fieldModel = createFieldModel(bundle, "workflow_step_native");
|
|
159
|
+
if (!fieldModel) {
|
|
160
|
+
return { stepLabel, toolId, toolVersion, status: "skip", errors: ["unsupported parameter types"] };
|
|
161
|
+
}
|
|
162
|
+
const validate = S.decodeUnknownEither(fieldModel, {
|
|
163
|
+
onExcessProperty: "ignore",
|
|
164
|
+
});
|
|
165
|
+
const result = validate(state);
|
|
166
|
+
if (result._tag === "Left") {
|
|
167
|
+
return { stepLabel, toolId, toolVersion, status: "fail", errors: formatIssues(result.left) };
|
|
168
|
+
}
|
|
169
|
+
return { stepLabel, toolId, toolVersion, status: "ok", errors: [] };
|
|
170
|
+
}
|
|
171
|
+
// --- Format2 validation ---
|
|
172
|
+
async function validateFormat2Steps(data, cache, prefix = "", expansionOpts) {
|
|
173
|
+
const expanded = await expandedFormat2(data, expansionOpts);
|
|
174
|
+
return _validateFormat2Workflow(expanded, cache, prefix);
|
|
175
|
+
}
|
|
176
|
+
async function _validateFormat2Workflow(wf, cache, prefix) {
|
|
177
|
+
const results = [];
|
|
178
|
+
for (let i = 0; i < wf.steps.length; i++) {
|
|
179
|
+
const step = wf.steps[i];
|
|
180
|
+
const stepLabel = prefix ? `${prefix}${i}` : String(i);
|
|
181
|
+
// Recurse into inline subworkflows
|
|
182
|
+
if (step.run && typeof step.run === "object") {
|
|
183
|
+
const subResults = await _validateFormat2Workflow(step.run, cache, `${stepLabel}.`);
|
|
184
|
+
results.push(...subResults);
|
|
185
|
+
continue;
|
|
186
|
+
}
|
|
187
|
+
const toolId = step.tool_id;
|
|
188
|
+
if (!toolId)
|
|
189
|
+
continue;
|
|
190
|
+
const toolVersion = step.tool_version ?? null;
|
|
191
|
+
const result = await _validateFormat2Step(step, stepLabel, toolId, toolVersion, cache);
|
|
192
|
+
results.push(result);
|
|
193
|
+
}
|
|
194
|
+
return results;
|
|
195
|
+
}
|
|
196
|
+
async function _validateFormat2Step(step, stepLabel, toolId, toolVersion, cache) {
|
|
197
|
+
const resolved = await loadCachedTool(cache, toolId, toolVersion);
|
|
198
|
+
if (isResolveError(resolved)) {
|
|
199
|
+
const reason = resolved.kind === "no_version"
|
|
200
|
+
? `no version for ${toolId}`
|
|
201
|
+
: `${toolId} not in cache`;
|
|
202
|
+
return { stepLabel, toolId, toolVersion, status: "skip", errors: [reason] };
|
|
203
|
+
}
|
|
204
|
+
const bundle = {
|
|
205
|
+
parameters: resolved.tool.inputs,
|
|
206
|
+
};
|
|
207
|
+
// Get state from step.state or step.tool_state.
|
|
208
|
+
// Deep-copy and strip ConnectedValue markers left by $link normalization —
|
|
209
|
+
// these are captured in step.in and will be injected during linked validation.
|
|
210
|
+
const state = structuredClone((step.state ?? step.tool_state ?? {}));
|
|
211
|
+
stripConnectedValues(bundle.parameters, state);
|
|
212
|
+
// Level 1: Validate base state against workflow_step
|
|
213
|
+
const baseModel = createFieldModel(bundle, "workflow_step");
|
|
214
|
+
if (!baseModel) {
|
|
215
|
+
return { stepLabel, toolId, toolVersion, status: "skip", errors: ["unsupported parameter types"] };
|
|
216
|
+
}
|
|
217
|
+
const baseValidate = S.decodeUnknownEither(baseModel, {
|
|
218
|
+
onExcessProperty: "ignore",
|
|
219
|
+
});
|
|
220
|
+
const baseResult = baseValidate(state);
|
|
221
|
+
if (baseResult._tag === "Left") {
|
|
222
|
+
return { stepLabel, toolId, toolVersion, status: "fail", errors: formatIssues(baseResult.left) };
|
|
223
|
+
}
|
|
224
|
+
// Build connections dict from step.in entries
|
|
225
|
+
const connections = {};
|
|
226
|
+
for (const stepInput of step.in) {
|
|
227
|
+
if (stepInput.id && stepInput.source) {
|
|
228
|
+
const src = stepInput.source;
|
|
229
|
+
connections[stepInput.id] = Array.isArray(src) ? src : [src];
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
// Level 2: Validate with connections injected against workflow_step_linked
|
|
233
|
+
if (Object.keys(connections).length > 0) {
|
|
234
|
+
const linkedState = structuredClone(state);
|
|
235
|
+
const remaining = injectConnectionsIntoState(bundle.parameters, linkedState, connections);
|
|
236
|
+
const unmatchedKeys = Object.keys(remaining);
|
|
237
|
+
if (unmatchedKeys.length > 0) {
|
|
238
|
+
return {
|
|
239
|
+
stepLabel, toolId, toolVersion, status: "fail",
|
|
240
|
+
errors: unmatchedKeys.map((k) => `No parameter definition matching connection key "${k}"`),
|
|
241
|
+
};
|
|
242
|
+
}
|
|
243
|
+
const linkedModel = createFieldModel(bundle, "workflow_step_linked");
|
|
244
|
+
if (!linkedModel) {
|
|
245
|
+
return { stepLabel, toolId, toolVersion, status: "skip", errors: ["unsupported parameter types"] };
|
|
246
|
+
}
|
|
247
|
+
const linkedValidate = S.decodeUnknownEither(linkedModel, {
|
|
248
|
+
onExcessProperty: "ignore",
|
|
249
|
+
});
|
|
250
|
+
const linkedResult = linkedValidate(linkedState);
|
|
251
|
+
if (linkedResult._tag === "Left") {
|
|
252
|
+
return { stepLabel, toolId, toolVersion, status: "fail", errors: formatIssues(linkedResult.left) };
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
return { stepLabel, toolId, toolVersion, status: "ok", errors: [] };
|
|
256
|
+
}
|
|
257
|
+
//# sourceMappingURL=validate-workflow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate-workflow.js","sourceRoot":"","sources":["../../src/commands/validate-workflow.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module @galaxy-tool-util/cli
|
|
3
|
+
*
|
|
4
|
+
* CLI command implementations for `galaxy-tool-cache`.
|
|
5
|
+
* Each function corresponds to a CLI subcommand and can also be called programmatically.
|
|
6
|
+
*/
|
|
7
|
+
/** Fetch a tool from ToolShed/Galaxy and save to the local cache. */
|
|
8
|
+
export { runAdd } from "./commands/add.js";
|
|
9
|
+
/** List all tools in the local cache. */
|
|
10
|
+
export { runList } from "./commands/list.js";
|
|
11
|
+
/** Display metadata for a cached tool. */
|
|
12
|
+
export { runInfo } from "./commands/info.js";
|
|
13
|
+
/** Clear cached tools, optionally filtered by ID prefix. */
|
|
14
|
+
export { runClear } from "./commands/clear.js";
|
|
15
|
+
/** Export a JSON Schema for a cached tool's parameters at a given state representation. */
|
|
16
|
+
export { runSchema } from "./commands/schema.js";
|
|
17
|
+
/** Validate a Galaxy workflow file (structure + optional tool state). */
|
|
18
|
+
export { runValidateWorkflow } from "./commands/validate-workflow.js";
|
|
19
|
+
//# sourceMappingURL=index.d.ts.map
|