{"record":{"id":"9427cd76311d7020","repo":"Dokploy/dokploy","slug":"automatic-deployments-are-disabled-for-this-compos","errorCode":null,"errorMessage":"Automatic deployments are disabled for this compose","messagePattern":"Automatic deployments are disabled for this compose","errorType":"http","errorClass":null,"httpStatus":400,"severity":"warning","filePath":"apps/dokploy/pages/api/deploy/compose/[refreshToken].ts","lineNumber":45,"sourceCode":"\t\t}\n\t\tconst composeResult = await db.query.compose.findFirst({\n\t\t\twhere: eq(compose.refreshToken, refreshToken as string),\n\t\t\twith: {\n\t\t\t\tenvironment: {\n\t\t\t\t\twith: {\n\t\t\t\t\t\tproject: true,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tbitbucket: true,\n\t\t\t},\n\t\t});\n\n\t\tif (!composeResult) {\n\t\t\tres.status(404).json({ message: \"Compose Not Found\" });\n\t\t\treturn;\n\t\t}\n\t\tif (!composeResult?.autoDeploy) {\n\t\t\tres.status(400).json({\n\t\t\t\tmessage: \"Automatic deployments are disabled for this compose\",\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\tconst deploymentTitle = extractCommitMessage(req.headers, req.body);\n\t\tconst deploymentHash = extractHash(req.headers, req.body);\n\t\tconst sourceType = composeResult.sourceType;\n\n\t\tif (sourceType === \"github\") {\n\t\t\tconst branchName = extractBranchName(req.headers, req.body);\n\t\t\tconst normalizedCommits = req.body?.commits?.flatMap((commit: any) => [\n\t\t\t\t...(commit.added || []),\n\t\t\t\t...(commit.modified || []),\n\t\t\t\t...(commit.removed || []),\n\t\t\t]);\n\n\t\t\tconst shouldDeployPaths = shouldDeploy(","sourceCodeStart":27,"sourceCodeEnd":63,"githubUrl":"https://github.com/Dokploy/dokploy/blob/546686ea3587f12ec5652217dedd9f7960fb6d15/apps/dokploy/pages/api/deploy/compose/[refreshToken].ts#L27-L63","documentation":"The compose was found by refresh token but autoDeploy is false, so the compose deploy webhook responds 400 'Automatic deployments are disabled for this compose'.","triggerScenarios":"Hitting the compose deploy webhook while the compose's automatic deploy toggle is off.","commonSituations":"Auto-deploy disabled intentionally (manual-only deploys) but external webhook still configured; compose recreated with defaults after config loss.","solutions":["Enable automatic deployment in the compose settings","Or remove the external webhook/CI trigger","Retest after toggling"],"exampleFix":null,"handlingStrategy":"validation","validationCode":"const compose = await db.query.compose.findFirst({ where: eq(compose.refreshToken, token) });\nif (!compose?.autoDeploy) throw new Error('Enable compose auto-deploy');","typeGuard":null,"tryCatchPattern":"if (res.status === 400 && body.message.includes('disabled')) { await enableComposeAutoDeploy(id); retry(); }","preventionTips":["Verify the toggle before configuring external triggers"],"tags":["webhook","compose","auto-deploy","disabled"],"backgroundTag":"feature-flag-disabled","analyzedSha":"546686ea3587f12ec5652217dedd9f7960fb6d15","analyzedAt":"2026-08-27T05:18:58.095Z","schemaVersion":2},"datasetVersion":"2026-08-27T08:17:20.692Z"}