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

  1. Run `wmill configs pull` once to generate instance_configs.yaml from the remote instance.
  2. Check the file exists at the expected path and that any --instance-configs-folder option matches where the file lives.
  3. Validate and fix YAML syntax if the file exists but fails to parse.
  4. Fix read permissions on the file if it exists.
  5. 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

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


AI-assisted analysis of windmill-labs/windmill@e474e8803c (2026-09-03). Data as JSON: /api/errors/0ff20ac064de4033. Report an issue: GitHub.