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.
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 directory(ies) using format, but wmill.yaml expects…
- is workspace-specific on the remote but not flagged in…
- ⚠️ --branch/--env is deprecated. Use --workspace instead.
- Cannot infer script language from extension
- Could not auto-fill missing lockfile entries
AI-assisted analysis of windmill-labs/windmill@e474e8803c (2026-09-03).
Data as JSON: /api/errors/72f05742dc439f12.
Report an issue: GitHub.
Appendix: 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)