windmill-labs/windmill · error · Error
.wmillignore is not supported anymore, switch to wmill.yaml
Error message
.wmillignore is not supported anymore, switch to wmill.yaml
What it means
The legacy .wmillignore file is no longer honored by wmill sync. To prevent silently ignoring different files than the user expects, sync throws immediately when a .wmillignore file exists, telling you to migrate to wmill.yaml.
Source
Thrown at cli/src/commands/sync/sync.ts:3105
) {
whitelist = {
approve(file: string): boolean {
return (
(!wmillconf.includes ||
wmillconf.includes?.some((i) => minimatch(file, i))) &&
(!wmillconf?.excludes ||
wmillconf.excludes!.every((i) => !minimatch(file, i))) &&
(!wmillconf.extraIncludes ||
wmillconf.extraIncludes.length === 0 ||
wmillconf.extraIncludes.some((i) => minimatch(file, i)))
);
},
};
}
try {
await stat(".wmillignore");
throw Error(".wmillignore is not supported anymore, switch to wmill.yaml");
} catch {
//expected
}
// new Gitignore.default({ initialRules: ignoreContent.split("\n")}).ignoreContent).compile();
return (p: string, isDirectory: boolean) => {
// Without the option, `locks/` is not Windmill's: a repo that keeps its own
// lockfiles there would otherwise see them pulled into the diff and deleted
// as absent from a remote that never serializes shared locks.
if (
!wmillconf.dedupeLockfiles &&
(p === SHARED_LOCK_DIR || p.startsWith(SHARED_LOCK_DIR + SEP))
) {
return true;
}
const ext = wmillconf.json ? ".json" : ".yaml";
if (!isDirectory && p.endsWith(".resource-type" + ext)) {View on GitHub (pinned to e474e8803c)
Solutions
- Delete .wmillignore from the sync folder
- Re-express the ignore rules in wmill.yaml (the current configuration file)
- Re-run the sync command after migrating
Example fix
// before .wmillignore: node_modules/ // after (wmill.yaml) include: - "**" exclude: - node_modules/**
Defensive patterns
Strategy: validation
Validate before calling
try { await Deno.stat('.wmillignore'); throw new Error('Migrate .wmillignore to wmill.yaml before running sync'); } catch (e) { if (!(e instanceof Error) || !e.message.startsWith('Migrate')) { /* file absent — ok */ } } Type guard
async function hasLegacyIgnore(dir = '.'): Promise<boolean> { try { await Deno.stat(`${dir}/.wmillignore`); return true; } catch { return false; } } Try / catch
try { await syncPush(); } catch (e) { if (String(e.message).includes('.wmillignore')) { console.error('Delete .wmillignore and move its rules into wmill.yaml, then retry.'); } else throw e; } Prevention
- Remove .wmillignore when upgrading the CLI
- Keep ignore/exclude rules only in wmill.yaml
- Add a repo check that fails CI if .wmillignore exists
When it happens
Trigger: Running any wmill sync command (push/pull) from a folder containing a .wmillignore file; the stat('.wmillignore') check succeeds and the error is thrown.
Common situations: Upgrading the CLI from an older version where .wmillignore worked; a repo cloned from an old template containing .wmillignore.
Related errors
- Found ${wrongFormatPaths.length} directory(ies) using ${foun
- ${item.item_kind} ${item.path} is workspace-specific on the
- Workspace folder not found, are you in the right directory?
- Not a fileset resource path: ${changePath}
- No resource metadata file found for fileset resource: ${chan
AI-assisted analysis of windmill-labs/windmill@e474e8803c (2026-09-03).
Data as JSON: /api/errors/72f05742dc439f12.
Report an issue: GitHub.