windmill-labs/windmill · warning
No ${instanceConfigsPath} found
Error message
No ${instanceConfigsPath} found What it means
readLocalConfigs reads worker group / instance configs from the local YAML file at instanceConfigsPath (e.g. instance_configs.yaml). If yamlParseFile fails (file missing, unreadable, invalid YAML), the catch logs this warning and returns an empty array instead of throwing. Like the settings counterpart, it keeps preview/push flows usable on a checkout that has never pulled configs.
Source
Thrown at cli/src/core/settings.ts:683
} catch (err) {
log.error(`Failed to delete setting ${remoteSetting.name}: ${err}`);
}
}
}
log.info(colors.green("Settings pushed to instance"));
}
}
export async function readLocalConfigs(opts: InstanceSyncOptions) {
let localConfigs: Config[] = [];
await checkInstanceConfigPath(opts);
try {
localConfigs = (await yamlParseFile(instanceConfigsPath)) as Config[];
} catch {
log.warn(`No ${instanceConfigsPath} found`);
}
return localConfigs;
}
export async function pullInstanceConfigs(
opts: InstanceSyncOptions,
preview = false
) {
const remoteConfigs = await wmill.listWorkerGroups();
if (preview) {
const localConfigs: Config[] = await readLocalConfigs(opts);
return compareInstanceObjects(
remoteConfigs,
localConfigs,
"name",
"config"View on GitHub (pinned to e474e8803c)
Solutions
- Run `wmill configs pull` once to generate instance_configs.yaml from the remote instance.
- Check the file exists at the expected path and that any --instance-configs-folder option matches where the file lives.
- Validate and fix YAML syntax if the file exists but fails to parse.
- Fix read permissions on the file if it exists.
- Ignore the warning if an empty local config set is intentional.
Example fix
// before wmill configs push // Warning: No instance_configs.yaml found // after wmill configs pull wmill configs push
Defensive patterns
Strategy: validation
Validate before calling
import { existsSync } from "node:fs";
if (!existsSync("instance_configs.yaml")) {
console.log("no local instance configs; run `wmill configs pull` first");
} Type guard
function isConfigs(v: unknown): v is Config[] {
return Array.isArray(v) && v.every((c) => typeof c === "object" && c !== null && typeof (c as any).name === "string");
} Try / catch
try {
const configs = await readLocalConfigs(opts);
if (configs.length === 0) log.warn("local configs empty — run `wmill configs pull` first");
} catch (e) {
// warning is logged internally; treat empty result as 'never pulled'
} Prevention
- Run `wmill configs pull` before push/preview in a new checkout
- Keep instance_configs.yaml committed alongside settings
- Validate YAML syntax in CI
- Confirm --instance-configs-folder paths in deployment scripts
When it happens
Trigger: Calling readLocalConfigs (via localConfigs, pullInstanceConfigs --preview, or pushInstanceConfigs) when instanceConfigsPath does not exist, is unreadable, or contains invalid YAML.
Common situations: Running `wmill configs pull --preview` or `configs push` on a fresh clone before any `configs pull`; passing the wrong --instance-configs-folder option; configs file ignored by .gitignore; hand-edited YAML with a syntax error.
Related errors
- No ${instanceSettingsPath} found
- File not found: ${filePath}
- Cannot push flow ${remotePath}: missing inline script file(s
- wmill-lock.yaml is malformed (expected an object). Refusing
- Error parsing yaml ${path}
AI-assisted analysis of windmill-labs/windmill@e474e8803c (2026-09-03).
Data as JSON: /api/errors/0ff20ac064de4033.
Report an issue: GitHub.