{"record":{"id":"0ff20ac064de4033","repo":"windmill-labs/windmill","slug":"no-instanceconfigspath-found","errorCode":null,"errorMessage":"No ${instanceConfigsPath} found","messagePattern":"No (.+?) found","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"cli/src/core/settings.ts","lineNumber":683,"sourceCode":"        } catch (err) {\n          log.error(`Failed to delete setting ${remoteSetting.name}: ${err}`);\n        }\n      }\n    }\n\n    log.info(colors.green(\"Settings pushed to instance\"));\n  }\n}\n\nexport async function readLocalConfigs(opts: InstanceSyncOptions) {\n  let localConfigs: Config[] = [];\n\n  await checkInstanceConfigPath(opts);\n\n  try {\n    localConfigs = (await yamlParseFile(instanceConfigsPath)) as Config[];\n  } catch {\n    log.warn(`No ${instanceConfigsPath} found`);\n  }\n  return localConfigs;\n}\n\nexport async function pullInstanceConfigs(\n  opts: InstanceSyncOptions,\n  preview = false\n) {\n  const remoteConfigs = await wmill.listWorkerGroups();\n\n  if (preview) {\n    const localConfigs: Config[] = await readLocalConfigs(opts);\n\n    return compareInstanceObjects(\n      remoteConfigs,\n      localConfigs,\n      \"name\",\n      \"config\"","sourceCodeStart":665,"sourceCodeEnd":701,"githubUrl":"https://github.com/windmill-labs/windmill/blob/e474e8803ce2ff5c2df09a58dab51d45f5c922ca/cli/src/core/settings.ts#L665-L701","documentation":"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.","triggerScenarios":"Calling readLocalConfigs (via localConfigs, pullInstanceConfigs --preview, or pushInstanceConfigs) when instanceConfigsPath does not exist, is unreadable, or contains invalid YAML.","commonSituations":"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.","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."],"exampleFix":"// before\nwmill configs push\n// Warning: No instance_configs.yaml found\n\n// after\nwmill configs pull\nwmill configs push","handlingStrategy":"validation","validationCode":"import { existsSync } from \"node:fs\";\nif (!existsSync(\"instance_configs.yaml\")) {\n  console.log(\"no local instance configs; run `wmill configs pull` first\");\n}","typeGuard":"function isConfigs(v: unknown): v is Config[] {\n  return Array.isArray(v) && v.every((c) => typeof c === \"object\" && c !== null && typeof (c as any).name === \"string\");\n}","tryCatchPattern":"try {\n  const configs = await readLocalConfigs(opts);\n  if (configs.length === 0) log.warn(\"local configs empty — run `wmill configs pull` first\");\n} catch (e) {\n  // warning is logged internally; treat empty result as 'never pulled'\n}","preventionTips":["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"],"tags":["cli","file-not-found","yaml","worker-configs"],"backgroundTag":"missing-config-file","analyzedSha":"e474e8803ce2ff5c2df09a58dab51d45f5c922ca","analyzedAt":"2026-09-03T12:38:19.024Z","contentChangedAt":"2026-09-03T12:38:19.024Z","schemaVersion":2},"datasetVersion":"2026-09-08T15:18:49.778Z"}