{"record":{"id":"22fbc9fce30a36b8","repo":"windmill-labs/windmill","slug":"could-not-extract-app-name-from-path-p","errorCode":null,"errorMessage":"Could not extract app name from path: ${p}","messagePattern":"Could not extract app name from path: (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"cli/src/types.ts","lineNumber":229,"sourceCode":"  plainSecrets: boolean,\n  alreadySynced: string[],\n  opts: PushObjOptions = {},\n) {\n  const {\n    message,\n    originalLocalPath,\n    permissionedAsContext,\n    wsSpecific,\n    keyPushOpts,\n    defaultTs,\n    enabledOwnedByParent,\n  } = opts;\n  const typeEnding = getTypeStrFromPath(p);\n\n  if (typeEnding === \"app\") {\n    const appName = extractResourceName(p, \"app\");\n    if (!appName) {\n      throw new Error(`Could not extract app name from path: ${p}`);\n    }\n    await pushApp(workspace, appName, buildFolderPath(appName, \"app\"), message, permissionedAsContext);\n  } else if (typeEnding === \"raw_app\") {\n    const rawAppName = extractResourceName(p, \"raw_app\");\n    if (!rawAppName) {\n      throw new Error(`Could not extract raw app name from path: ${p}`);\n    }\n    await pushRawApp(workspace, rawAppName, buildFolderPath(rawAppName, \"raw_app\"), message, defaultTs);\n  } else if (typeEnding === \"folder\") {\n    await pushFolder(workspace, p, befObj, newObj);\n  } else if (typeEnding === \"variable\") {\n    await pushVariable(workspace, p, befObj, newObj, plainSecrets, wsSpecific);\n  } else if (typeEnding === \"flow\") {\n    const flowName = extractResourceName(p, \"flow\");\n    if (!flowName) {\n      throw new Error(`Could not extract flow name from path: ${p}`);\n    }\n    await pushFlow(workspace, flowName, buildFolderPath(flowName, \"flow\"), message, permissionedAsContext);","sourceCodeStart":211,"sourceCodeEnd":247,"githubUrl":"https://github.com/windmill-labs/windmill/blob/e474e8803ce2ff5c2df09a58dab51d45f5c922ca/cli/src/types.ts#L211-L247","documentation":"pushObj routes a sync item by its path suffix; for an app item the extractResourceName call returned nothing, meaning the path does not contain a usable <name>.app segment, so the app cannot be addressed on the remote.","triggerScenarios":"Thrown at cli/src/types.ts:229 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Rename the file so the path ends with <appname>.app.yaml (or the folder form <appname>/app).","Check for missing or malformed type suffixes in the path."],"exampleFix":null,"handlingStrategy":"type-guard","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"e474e8803ce2ff5c2df09a58dab51d45f5c922ca","analyzedAt":"2026-09-03T12:38:19.024Z","contentChangedAt":"2026-09-03T12:38:19.024Z","schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}