affaan-m/ECC · error

Install config not found

Error message

Install config not found: ${resolvedPath}

What it means

loadInstallConfig() resolves the requested install config path and checks it with fs.existsSync() before reading. When no file exists at the resolved path it throws this error naming the fully resolved path. It is the installer's guard against running an install from a missing or misconfigured config file.

Solutions

  1. Check the resolved path printed in the error and verify the file exists there (ls <resolvedPath>); create or restore it if missing.
  2. Fix the config path you passed (--config / loadInstallConfig argument) — correct typos and use an absolute path when unsure of cwd.
  3. If the config should come from the repo, pull/checkout the latest changes so the default config file is present.
  4. Run the installer from the repository root so relative config paths resolve as documented.

Example fix

// before
loadInstallConfig('instal-config.json')
// after
loadInstallConfig(path.join(repoRoot, 'manifests', 'install-config.json'))
Defensive patterns

Strategy: validation

Validate before calling

const fs = require('fs');
const resolved = require('path').resolve(configPath);
if (!fs.existsSync(resolved)) {
  throw new Error(`Install config not found before call: ${resolved}`);
}
loadInstallConfig(resolved);

Type guard

function configExists(p) { return typeof p === 'string' && fs.existsSync(p) && fs.statSync(p).isFile(); }

Try / catch

try {
  const config = loadInstallConfig(configPath);
} catch (err) {
  if (err.message.startsWith('Install config not found')) {
    console.error(`Config missing at ${configPath}; create it or pass --config <path>`);
    process.exitCode = 1;
  } else throw err;
}

Prevention

When it happens

Trigger: Calling loadInstallConfig('path/to/config.json') where the file does not exist on disk; running the installer with a --config flag pointing to a typoed, deleted, or never-created config path; passing a path relative to the wrong working directory so resolveInstallConfigPath lands on a nonexistent absolute path.

Common situations: Fresh clone without the expected config checked in; developer deletes or renames a custom install config but old scripts/aliases still reference it; running the installer from a different cwd than intended so relative config paths resolve elsewhere; typos like instal-config.json.

Understand the failure class

Background: "Config file not found": what it means and how to fix it in docker-sync, Maven, Vagrant, Turborepo and other tools — this error's family across 60 libraries.

Related errors


AI-assisted analysis of affaan-m/ECC@8321021c54 (2026-09-16). Data as JSON: /api/errors/88536448aedbb051. Report an issue: GitHub.

Appendix: source

Thrown at scripts/lib/install/config.js:62

  }

  const cwd = options.cwd || process.cwd();
  return path.isAbsolute(configPath)
    ? configPath
    : path.normalize(path.join(cwd, configPath));
}

function findDefaultInstallConfigPath(options = {}) {
  const cwd = options.cwd || process.cwd();
  const candidatePath = path.join(cwd, DEFAULT_INSTALL_CONFIG);
  return fs.existsSync(candidatePath) ? candidatePath : null;
}

function loadInstallConfig(configPath, options = {}) {
  const resolvedPath = resolveInstallConfigPath(configPath, options);

  if (!fs.existsSync(resolvedPath)) {
    throw new Error(`Install config not found: ${resolvedPath}`);
  }

  const raw = readJson(resolvedPath, path.basename(resolvedPath));
  const validator = getValidator();

  if (!validator(raw)) {
    throw new Error(
      `Invalid install config ${resolvedPath}: ${formatValidationErrors(validator.errors)}`
    );
  }

  return {
    path: resolvedPath,
    version: raw.version,
    target: raw.target || null,
    profileId: raw.profile || null,
    moduleIds: dedupeStrings(raw.modules),
    includeComponentIds: dedupeStrings(raw.include),

View on GitHub (pinned to 8321021c54)