windmill-labs/windmill · error · Error
No resource metadata file found for fileset resource: ${chan
Error message
No resource metadata file found for fileset resource: ${change.path} What it means
During `wmill sync push`, when a change is a child file of a fileset resource, the CLI must sync the parent resource metadata file that carries the whole fileset. If syncing that parent reports status "parent-missing", the CLI throws this error: the child change cannot be pushed on its own because no resource metadata file exists for it (locally or remotely).
Source
Thrown at cli/src/commands/sync/sync.ts:5798
log.info(
`Editing ${getTypeStrFromPath(change.path)} ${change.path}`,
);
}
}
// Fileset routing must precede the single-file check (as it does
// in the added/deleted branches): a fileset accepts arbitrary
// child names, so a child like `<res>.fileset/q.resource.file.sql`
// matches both predicates and belongs to its fileset parent.
if (isFilesetResource(change.path)) {
const result = await pushFilesetParentResource(
change.path,
workspace.workspaceId,
alreadySynced,
cachedWsNameForPush,
specificItems,
);
if (result.status === "parent-missing") {
throw new Error(
`No resource metadata file found for fileset resource: ${change.path}`,
);
}
// Pushed or already-synced: the parent resource carries the
// whole fileset, so this child's content is on the remote.
if (stateTarget) {
await writeFile(stateTarget, change.after, "utf-8");
}
continue;
}
if (isFileResource(change.path)) {
const resourceFilePath = await findResourceFile(change.path);
if (!alreadySynced.includes(resourceFilePath)) {
alreadySynced.push(resourceFilePath);
const newObj = parseFromPath(
resourceFilePath,
await readTextFile(resourceFilePath),View on GitHub (pinned to e474e8803c)
Solutions
- Restore or re-generate the parent resource metadata file for that fileset (re-run `wmill sync pull` for that path)
- Ensure the whole fileset directory, including its metadata file, is committed to git
- Exclude the orphaned child file if it is not wanted, then push
- Create the parent resource via the UI/CLI first, then sync pull to regenerate metadata
Example fix
// before: pushing orphaned child filesets/myapp/index.html (parent myapp.resource.json deleted) // after: regenerate parent then push wmill sync pull --include-skip > /dev/null && wmill sync push
Defensive patterns
Strategy: validation
Validate before calling
import fs from "fs";
import path from "path";
function hasParentMetadata(childPath: string): boolean {
const dir = path.dirname(childPath);
return fs.readdirSync(dir).some(f => f.endsWith(".resource.json") || f.endsWith(".resource.yaml"));
} Try / catch
try {
await wmill.sync.push(opts);
} catch (e) {
if (String(e.message).startsWith("No resource metadata file found")) {
await wmill.sync.pull({ includeSiblings: true }); // regenerate parent
}
} Prevention
- Never commit only fileset children — include parent metadata files
- Re-run `wmill sync pull` after manual directory surgery
- Grep the repo for fileset dirs lacking a metadata file in CI
When it happens
Trigger: `wmill sync push` encounters a change.path pointing at a file inside a fileset (e.g. an app sub-file), and the parent resource metadata (the `.resource.json`-style manifest for the fileset) is absent, so the sync helper returns parent-missing.
Common situations: Hand-deleting or renaming the parent metadata file in the sync folder, pulling a partial workspace, or git commits that excluded the parent file while keeping children.
Related errors
- No resource metadata file found for fileset resource: ${chan
- Not a fileset resource path: ${changePath}
- Cannot regenerate lock for flow ${remote_path}: missing inli
- Workspace folder not found, are you in the right directory?
- Resource ${remotePath} uses '!inline_fileset ${dirPath}', bu
AI-assisted analysis of windmill-labs/windmill@e474e8803c (2026-09-03).
Data as JSON: /api/errors/d6ae5301517aef0d.
Report an issue: GitHub.