diff --git a/app/Http/Livewire/Project/Application/Previews.php b/app/Http/Livewire/Project/Application/Previews.php index 32dc0219b..a5459a7bb 100644 --- a/app/Http/Livewire/Project/Application/Previews.php +++ b/app/Http/Livewire/Project/Application/Previews.php @@ -72,8 +72,7 @@ protected function setDeploymentUuid() public function stop(int $pull_request_id) { try { - $container_name = generateApplicationContainerName($this->application); - ray('Stopping container: ' . $container_name); + $container_name = generateApplicationContainerName($this->application, $pull_request_id); instant_remote_process(["docker rm -f $container_name"], $this->application->destination->server, throwError: false); ApplicationPreview::where('application_id', $this->application->id)->where('pull_request_id', $pull_request_id)->delete(); diff --git a/app/Jobs/ApplicationDeploymentJob.php b/app/Jobs/ApplicationDeploymentJob.php index eeabb185f..3ae8b4214 100644 --- a/app/Jobs/ApplicationDeploymentJob.php +++ b/app/Jobs/ApplicationDeploymentJob.php @@ -89,7 +89,7 @@ public function __construct(int $application_deployment_queue_id) $this->build_workdir = "{$this->workdir}" . rtrim($this->application->base_directory, '/'); $this->is_debug_enabled = $this->application->settings->is_debug_enabled; - $this->container_name = generateApplicationContainerName($this->application); + $this->container_name = generateApplicationContainerName($this->application, $this->pull_request_id); savePrivateKeyToFs($this->server); $this->saved_outputs = collect(); @@ -97,7 +97,9 @@ public function __construct(int $application_deployment_queue_id) if ($this->pull_request_id !== 0) { $this->preview = ApplicationPreview::findPreviewByApplicationAndPullId($this->application->id, $this->pull_request_id); if ($this->application->fqdn) { - $preview_fqdn = getFqdnWithoutPort(data_get($this->preview, 'fqdn')); + if (data_get($this->preview, 'fqdn')) { + $preview_fqdn = getFqdnWithoutPort(data_get($this->preview, 'fqdn')); + } $template = $this->application->preview_url_template; $url = Url::fromString($this->application->fqdn); $host = $url->getHost(); @@ -165,6 +167,7 @@ public function handle(): void "hidden" => true, ] ); + $this->next(ApplicationDeploymentStatus::FAILED->value); } } private function deploy_docker_compose() @@ -284,7 +287,7 @@ private function deploy() private function rolling_update() { - if (count($this->application->ports_mappings_array) > 0){ + if (count($this->application->ports_mappings_array) > 0) { $this->execute_remote_command( ["echo -n 'Application has ports mapped to the host system, rolling update is not supported. Stopping current container.'"], ); @@ -796,6 +799,5 @@ public function failed(Throwable $exception): void ["echo 'Oops something is not okay, are you okay? 😢'"], ["echo '{$exception->getMessage()}'"] ); - $this->next(ApplicationDeploymentStatus::FAILED->value); } } diff --git a/app/Jobs/ContainerStatusJob.php b/app/Jobs/ContainerStatusJob.php index 6d27555f1..f2abae3ca 100644 --- a/app/Jobs/ContainerStatusJob.php +++ b/app/Jobs/ContainerStatusJob.php @@ -108,9 +108,9 @@ public function handle(): void $labelId = data_get($labels, 'coolify.applicationId'); if ($labelId) { if (str_contains($labelId, '-pr-')) { - $previewId = (int) Str::after($labelId, '-pr-'); + $pullRequestId = data_get($labels, 'coolify.pullRequestId'); $applicationId = (int) Str::before($labelId, '-pr-'); - $preview = ApplicationPreview::where('application_id', $applicationId)->where('pull_request_id', $previewId)->first(); + $preview = ApplicationPreview::where('application_id', $applicationId)->where('pull_request_id', $pullRequestId)->first(); if ($preview) { $foundApplicationPreviews[] = $preview->id; $statusFromDb = $preview->status; diff --git a/bootstrap/helpers/docker.php b/bootstrap/helpers/docker.php index 6aa16d964..fdb682a72 100644 --- a/bootstrap/helpers/docker.php +++ b/bootstrap/helpers/docker.php @@ -104,11 +104,11 @@ function getContainerStatus(Server $server, string $container_id, bool $all_data return data_get($container[0], 'State.Status', 'exited'); } -function generateApplicationContainerName(Application $application) +function generateApplicationContainerName(Application $application, $pull_request_id = 0) { $now = now()->format('Hisu'); - if ($application->pull_request_id !== 0 && $application->pull_request_id !== null) { - return $application->uuid . '-pr-' . $application->pull_request_id; + if ($pull_request_id !== 0 && $pull_request_id !== null) { + return $application->uuid . '-pr-' . $pull_request_id; } else { return $application->uuid . '-' . $now; } @@ -207,10 +207,10 @@ function generateLabelsApplication(Application $application, ?ApplicationPreview { $pull_request_id = data_get($preview, 'pull_request_id', 0); - $container_name = generateApplicationContainerName($application); + $container_name = generateApplicationContainerName($application, $pull_request_id); $appId = $application->id; - if ($pull_request_id !== 0) { - $appId = $appId . '-pr-' . $application->pull_request_id; + if ($pull_request_id !== 0 && $pull_request_id !== null) { + $appId = $appId . '-pr-' . $pull_request_id; } $labels = collect([]); $labels = $labels->merge(defaultLabels($appId, $container_name, $pull_request_id)); diff --git a/resources/views/livewire/project/application/previews.blade.php b/resources/views/livewire/project/application/previews.blade.php index 1c455b983..5e5d4d024 100644 --- a/resources/views/livewire/project/application/previews.blade.php +++ b/resources/views/livewire/project/application/previews.blade.php @@ -54,11 +54,11 @@
PR #{{ data_get($preview, 'pull_request_id') }} | @if (Str::of(data_get($preview, 'status'))->startsWith('running')) - + @elseif(Str::of(data_get($preview, 'status'))->startsWith('restarting')) - + @else - + @endif @if (data_get($preview, 'status') !== 'exited') | Open Preview diff --git a/routes/webhooks.php b/routes/webhooks.php index d7b645fb3..2abba2c4d 100644 --- a/routes/webhooks.php +++ b/routes/webhooks.php @@ -172,9 +172,9 @@ $found = ApplicationPreview::where('application_id', $application->id)->where('pull_request_id', $pull_request_id)->first(); if ($found) { $found->delete(); - $container_name = generateApplicationContainerName($application); - ray('Stopping container: ' . $container_name); - remote_process(["docker rm -f $container_name"], $application->destination->server); + $container_name = generateApplicationContainerName($application,$pull_request_id); + // ray('Stopping container: ' . $container_name); + instant_remote_process(["docker rm -f $container_name"], $application->destination->server); return response('Preview Deployment closed.'); } return response('Nothing to do. No Preview Deployment found');