From bfbee4e78f806e2f07241a00f8f29cf5361234e3 Mon Sep 17 00:00:00 2001 From: Andras Bacsai Date: Sun, 1 Oct 2023 11:33:15 +0200 Subject: [PATCH 1/3] version+ --- config/sentry.php | 2 +- config/version.php | 2 +- versions.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/config/sentry.php b/config/sentry.php index b34772125..788868730 100644 --- a/config/sentry.php +++ b/config/sentry.php @@ -7,7 +7,7 @@ return [ // The release version of your application // Example with dynamic git hash: trim(exec('git --git-dir ' . base_path('.git') . ' log --pretty="%h" -n1 HEAD')) - 'release' => '4.0.0-beta.53', + 'release' => '4.0.0-beta.54', // When left empty or `null` the Laravel environment will be used 'environment' => config('app.env'), diff --git a/config/version.php b/config/version.php index c90e8cda6..209bb48f3 100644 --- a/config/version.php +++ b/config/version.php @@ -1,3 +1,3 @@ Date: Sun, 1 Oct 2023 12:02:44 +0200 Subject: [PATCH 2/3] fix: preview deployments name, status etc --- app/Http/Livewire/Project/Application/Previews.php | 3 +-- app/Jobs/ApplicationDeploymentJob.php | 10 ++++++---- app/Jobs/ContainerStatusJob.php | 4 ++-- bootstrap/helpers/docker.php | 12 ++++++------ .../livewire/project/application/previews.blade.php | 6 +++--- routes/webhooks.php | 6 +++--- 6 files changed, 21 insertions(+), 20 deletions(-) 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 @@ class Previews extends Component 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 @@ class ApplicationDeploymentJob implements ShouldQueue, ShouldBeEncrypted $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 @@ class ApplicationDeploymentJob implements ShouldQueue, ShouldBeEncrypted 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 @@ class ApplicationDeploymentJob implements ShouldQueue, ShouldBeEncrypted "hidden" => true, ] ); + $this->next(ApplicationDeploymentStatus::FAILED->value); } } private function deploy_docker_compose() @@ -284,7 +287,7 @@ class ApplicationDeploymentJob implements ShouldQueue, ShouldBeEncrypted 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 @@ COPY ./nginx.conf /etc/nginx/conf.d/default.conf"); ["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 @@ class ContainerStatusJob implements ShouldQueue, ShouldBeEncrypted $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 @@ Route::post('/source/github/events', function () { $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'); From e4296345b3f5604a14b8a25229761ebf807e8050 Mon Sep 17 00:00:00 2001 From: Andras Bacsai Date: Sun, 1 Oct 2023 12:29:50 +0200 Subject: [PATCH 3/3] fix: public repo branch selection fix: commit sha selection in source tabs --- .../Livewire/Project/New/PublicGitRepository.php | 12 +++++------- app/Jobs/ApplicationDeploymentJob.php | 4 ++-- 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/app/Http/Livewire/Project/New/PublicGitRepository.php b/app/Http/Livewire/Project/New/PublicGitRepository.php index 4aee4c3bf..837c32abe 100644 --- a/app/Http/Livewire/Project/New/PublicGitRepository.php +++ b/app/Http/Livewire/Project/New/PublicGitRepository.php @@ -26,6 +26,10 @@ class PublicGitRepository extends Component public string $git_branch = 'main'; public int $rate_limit_remaining = 0; public $rate_limit_reset = 0; + private object $repository_url_parsed; + public GithubApp|GitlabApp|null $git_source = null; + public string $git_host; + public string $git_repository; protected $rules = [ 'repository_url' => 'required|url', 'port' => 'required|numeric', @@ -38,10 +42,6 @@ class PublicGitRepository extends Component 'is_static' => 'static', 'publish_directory' => 'publish directory', ]; - private object $repository_url_parsed; - private GithubApp|GitlabApp|null $git_source = null; - private string $git_host; - private string $git_repository; public function mount() { @@ -76,6 +76,7 @@ class PublicGitRepository extends Component $this->get_branch(); $this->selected_branch = $this->git_branch; } catch (\Throwable $e) { + ray($e->getMessage()); if (!$this->branch_found && $this->git_branch == 'main') { try { $this->git_branch = 'master'; @@ -123,9 +124,6 @@ class PublicGitRepository extends Component $project_uuid = $this->parameters['project_uuid']; $environment_name = $this->parameters['environment_name']; - $this->get_git_source(); - $this->git_branch = $this->selected_branch ?? $this->git_branch; - $destination = StandaloneDocker::where('uuid', $destination_uuid)->first(); if (!$destination) { $destination = SwarmDocker::where('uuid', $destination_uuid)->first(); diff --git a/app/Jobs/ApplicationDeploymentJob.php b/app/Jobs/ApplicationDeploymentJob.php index 3ae8b4214..69d385445 100644 --- a/app/Jobs/ApplicationDeploymentJob.php +++ b/app/Jobs/ApplicationDeploymentJob.php @@ -167,7 +167,6 @@ class ApplicationDeploymentJob implements ShouldQueue, ShouldBeEncrypted "hidden" => true, ] ); - $this->next(ApplicationDeploymentStatus::FAILED->value); } } private function deploy_docker_compose() @@ -402,7 +401,7 @@ class ApplicationDeploymentJob implements ShouldQueue, ShouldBeEncrypted { $this->execute_remote_command( [ - "echo -n 'Importing {$this->application->git_repository}:{$this->application->git_branch} to {$this->workdir}. '" + "echo -n 'Importing {$this->application->git_repository}:{$this->application->git_branch} (commit sha {$this->application->git_commit_sha}) to {$this->workdir}. '" ], [ $this->importing_git_repository() @@ -799,5 +798,6 @@ COPY ./nginx.conf /etc/nginx/conf.d/default.conf"); ["echo 'Oops something is not okay, are you okay? 😢'"], ["echo '{$exception->getMessage()}'"] ); + $this->next(ApplicationDeploymentStatus::FAILED->value); } }