windmill-labs/windmill · error · Error
${flag} '${tok}' matched no script in f/${f}.
Error message
${flag} '${tok}' matched no script in f/${f}. What it means
No-match guard in resolveScriptTokenOrThrow: the token given to --upload or --arg resolved to no script node in the workspace graph under folder f (checked both as full id and as basename match). The input at fault is the script token as typed — wrong name, wrong folder, or a script that isn't part of the pipeline graph the command loaded.
Source
Thrown at cli/src/commands/pipeline/pipeline.ts:642
// endpoint can't emit, so input-only entrypoints are cut here as they are
// under `--local` (else they'd auto-run empty).
await enrichDeployedNonAutorunTriggers(workspace.workspaceId, graph);
}
// Resolve a `--upload`/`--arg` script token to its graph node, with an
// actionable error when the short name is ambiguous or matches nothing.
const resolveScriptTokenOrThrow = (tok: string, flag: string): string => {
const id = resolveToken(graph, tok);
if (!id || !id.startsWith("script:")) {
const matches = graph.runnables.filter(
(r) => r.usage_kind === "script" && (r.path.split("/").pop() ?? r.path) === tok,
);
if (matches.length > 1) {
throw new Error(
`${flag} '${tok}' matches multiple scripts (${matches.map((r) => r.path).sort().join(", ")}) — use the full path.`,
);
}
throw new Error(`${flag} '${tok}' matched no script in f/${f}.`);
}
return id;
};
// `--upload <script>[:<param>]=<file|s3://key>` binds an object to a
// data_upload/webhook entry point so it becomes a runnable start (and its
// downstream is no longer cut) — the arg is injected at execution. Repeatable
// per script (accumulated) so a multi-S3Object entry can bind each param.
const boundBindingsByPath = new Map<string, UploadBinding[]>();
const boundNodeIds = new Set<string>();
for (const spec of opts.upload ?? []) {
const binding = parseUploadBinding(spec);
const id = resolveScriptTokenOrThrow(binding.scriptTok, "--upload");
const p = scriptPathOf(id);
(boundBindingsByPath.get(p) ?? boundBindingsByPath.set(p, []).get(p)!).push(binding);
boundNodeIds.add(id);
}
View on GitHub (pinned to e474e8803c)
Solutions
- Check the script's path with wmill flow ls / in the UI and pass the full path
- Verify you're targeting the right folder (the graph is scoped to f/{f})
- If the script should participate, ensure it's part of the pipeline (e.g. marked // pipeline) so it appears in the graph
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at cli/src/commands/pipeline/pipeline.ts:642 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of windmill-labs/windmill@e474e8803c (2026-09-03).
Data as JSON: /api/errors/f9bfc0f7c7487291.
Report an issue: GitHub.