diff --git a/services/nginx/app/classes/coolify_manager.php b/services/nginx/app/classes/coolify_manager.php index 608b0cb1..f174ac1f 100644 --- a/services/nginx/app/classes/coolify_manager.php +++ b/services/nginx/app/classes/coolify_manager.php @@ -1926,13 +1926,14 @@ class coolify_manager ], $actorUserId); } - $deployment = $releaseManager->startDeployment([ + $sourceCommitSha = trim((string)($sourceTarget['latest_deployment_commit_sha'] ?? '')); + $deploymentInput = [ 'target_id' => (int)($deploymentTarget['id'] ?? 0), 'channel_id' => (int)$sourceTarget['channel_id'], 'app' => $app, 'repository' => (string)($sourceTarget['repository'] ?? ''), 'branch' => (string)($sourceTarget['branch'] ?? 'master'), - 'commit_mode' => 'latest', + 'commit_mode' => $sourceCommitSha === '' ? 'latest' : 'specific', 'version_label' => $this->gatewayRouteProvisionVersionLabel($sourceTarget), 'deployed_url' => $sourcePublicUrl, 'metadata' => [ @@ -1942,7 +1943,11 @@ class coolify_manager 'server_uuid' => $serverUuid, 'app' => $app, ], - ], $actorUserId); + ]; + if ($sourceCommitSha !== '') { + $deploymentInput['commit_sha'] = $sourceCommitSha; + } + $deployment = $releaseManager->startDeployment($deploymentInput, $actorUserId); if ((string)($deployment['status'] ?? '') !== 'deployed') { $errors[] = array_replace($action, [ diff --git a/services/nginx/app/tests/Unit/Coolify/CoolifyManagerTest.php b/services/nginx/app/tests/Unit/Coolify/CoolifyManagerTest.php index 0e2b52e5..6dbeb714 100644 --- a/services/nginx/app/tests/Unit/Coolify/CoolifyManagerTest.php +++ b/services/nginx/app/tests/Unit/Coolify/CoolifyManagerTest.php @@ -668,6 +668,8 @@ it('defines Coolify schema, route permissions, and replication integration hooks expect($manager)->toContain('gateway_route_autoprovision'); expect($manager)->toContain('upsertDeploymentTarget'); expect($manager)->toContain('startDeployment'); + expect($manager)->toContain("'commit_mode' => \$sourceCommitSha === '' ? 'latest' : 'specific'"); + expect($manager)->toContain("\$deploymentInput['commit_sha'] = \$sourceCommitSha;"); expect($manager)->toContain('verifyGatewayRoutes'); expect($manager)->toContain('bootstrapGatewayCertificates'); expect($manager)->toContain('setLoadBalancerIpTargets');