windmill-labs/windmill · error

Could not extract flow name from path: ${p}

Error message

Could not extract flow name from path: ${p}

What it means

Thrown by pushObj when the sync path is recognized as an app (typeEnding app) but extractResourceName cannot recover the app's name from the file path. Generic guard against malformed paths: the input at fault is the local path `p`, which ends in .app but lacks a parseable name segment, so pushApp cannot determine the remote app to update.

Source

Thrown at cli/src/types.ts:245

    const appName = extractResourceName(p, "app");
    if (!appName) {
      throw new Error(`Could not extract app name from path: ${p}`);
    }
    await pushApp(workspace, appName, buildFolderPath(appName, "app"), message, permissionedAsContext);
  } else if (typeEnding === "raw_app") {
    const rawAppName = extractResourceName(p, "raw_app");
    if (!rawAppName) {
      throw new Error(`Could not extract raw app name from path: ${p}`);
    }
    await pushRawApp(workspace, rawAppName, buildFolderPath(rawAppName, "raw_app"), message, defaultTs);
  } else if (typeEnding === "folder") {
    await pushFolder(workspace, p, befObj, newObj);
  } else if (typeEnding === "variable") {
    await pushVariable(workspace, p, befObj, newObj, plainSecrets, wsSpecific);
  } else if (typeEnding === "flow") {
    const flowName = extractResourceName(p, "flow");
    if (!flowName) {
      throw new Error(`Could not extract flow name from path: ${p}`);
    }
    await pushFlow(workspace, flowName, buildFolderPath(flowName, "flow"), message, permissionedAsContext);
  } else if (typeEnding === "resource") {
    if (!alreadySynced.includes(p)) {
      alreadySynced.push(p);
      await pushResource(workspace, p, befObj, newObj, originalLocalPath || p, wsSpecific, true);
    }
  } else if (typeEnding === "resource-type") {
    await pushResourceType(workspace, p, befObj, newObj);
  } else if (typeEnding === "schedule") {
    await pushSchedule(workspace, p, befObj, newObj, permissionedAsContext, enabledOwnedByParent);
  } else if (typeEnding === "http_trigger") {
    await pushTrigger("http", workspace, p, befObj, newObj, permissionedAsContext);
  } else if (typeEnding === "websocket_trigger") {
    await pushTrigger("websocket", workspace, p, befObj, newObj, permissionedAsContext);
  } else if (typeEnding === "kafka_trigger") {
    await pushTrigger("kafka", workspace, p, befObj, newObj, permissionedAsContext);
  } else if (typeEnding === "nats_trigger") {

View on GitHub (pinned to e474e8803c)

Solutions

  1. Name the file <flowname>.flow.yaml (or use the <flowname>/flow folder layout).
  2. Check the path suffix for typos.
Defensive patterns

Strategy: type-guard

When it happens

Trigger: Thrown at cli/src/types.ts:245 when the library encounters an invalid state.

Common situations: See trigger scenarios.


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