diff --git a/app/Livewire/Project/Application/General.php b/app/Livewire/Project/Application/General.php index 66c59cff5..718312d2d 100644 --- a/app/Livewire/Project/Application/General.php +++ b/app/Livewire/Project/Application/General.php @@ -31,7 +31,7 @@ class General extends Component public ?string $initialDockerComposeLocation = null; public ?string $initialDockerComposePrLocation = null; - public $parsedServices = []; + public null|Collection $parsedServices; public $parsedServiceDomains = []; protected $listeners = [ @@ -118,6 +118,10 @@ public function mount() { try { $this->parsedServices = $this->application->parseCompose(); + if (is_null($this->parsedServices) || empty($this->parsedServices)) { + $this->dispatch('error', "Failed to parse your docker-compose file. Please check the syntax and try again."); + return; + } } catch (\Throwable $e) { $this->dispatch('error', $e->getMessage()); } @@ -160,6 +164,10 @@ public function loadComposeFile($isInit = false) return; } ['parsedServices' => $this->parsedServices, 'initialDockerComposeLocation' => $this->initialDockerComposeLocation, 'initialDockerComposePrLocation' => $this->initialDockerComposePrLocation] = $this->application->loadComposeFile($isInit); + if (is_null($this->parsedServices)) { + $this->dispatch('error', "Failed to parse your docker-compose file. Please check the syntax and try again."); + return; + } $compose = $this->application->parseCompose(); $services = data_get($compose, 'services'); if ($services) { diff --git a/app/Models/Application.php b/app/Models/Application.php index 3d0b92aaf..07c45b83c 100644 --- a/app/Models/Application.php +++ b/app/Models/Application.php @@ -879,7 +879,7 @@ function loadComposeFile($isInit = false) if (!$composeFileContent) { $this->docker_compose_location = $initialDockerComposeLocation; $this->save(); - throw new \RuntimeException("Docker Compose file not found at: $workdir$composeFile"); + throw new \RuntimeException("Docker Compose file not found at: $workdir$composeFile

Check if you used the right extension (.yaml or .yml) in the compose file name."); } else { $this->docker_compose_raw = $composeFileContent; $this->save(); diff --git a/bootstrap/helpers/shared.php b/bootstrap/helpers/shared.php index 7a960066c..de3d50d1a 100644 --- a/bootstrap/helpers/shared.php +++ b/bootstrap/helpers/shared.php @@ -1232,13 +1232,13 @@ function parseDockerComposeFile(Service|Application $resource, bool $isNew = fal try { $yaml = Yaml::parse($resource->docker_compose_pr_raw); } catch (\Exception $e) { - throw new \Exception($e->getMessage()); + return; } } else { try { $yaml = Yaml::parse($resource->docker_compose_raw); } catch (\Exception $e) { - throw new \Exception($e->getMessage()); + return; } } $server = $resource->destination->server; diff --git a/resources/views/livewire/project/application/general.blade.php b/resources/views/livewire/project/application/general.blade.php index b9a971124..df7ba526c 100644 --- a/resources/views/livewire/project/application/general.blade.php +++ b/resources/views/livewire/project/application/general.blade.php @@ -38,7 +38,11 @@ @endif @if ($application->build_pack === 'dockercompose') - @if (count($parsedServices) > 0 && !$application->settings->is_raw_compose_deployment_enabled) + + @if ( + !is_null($parsedServices) && + count($parsedServices) > 0 && + !$application->settings->is_raw_compose_deployment_enabled)

Domains

@foreach (data_get($parsedServices, 'services') as $serviceName => $service) @if (!isDatabaseImage(data_get($service, 'image')))