diff --git a/app/Console/Commands/ServicesGenerate.php b/app/Console/Commands/ServicesGenerate.php index 7619a1d85..d96d4743c 100644 --- a/app/Console/Commands/ServicesGenerate.php +++ b/app/Console/Commands/ServicesGenerate.php @@ -40,7 +40,7 @@ public function handle() $serviceTemplatesJson[$name] = $parsed; } } - $serviceTemplatesJson = json_encode($serviceTemplatesJson, JSON_PRETTY_PRINT); + $serviceTemplatesJson = json_encode($serviceTemplatesJson); file_put_contents(base_path('templates/service-templates.json'), $serviceTemplatesJson); } diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php index 23289f90e..2c49a3096 100644 --- a/app/Console/Kernel.php +++ b/app/Console/Kernel.php @@ -10,6 +10,7 @@ use App\Jobs\ContainerStatusJob; use App\Jobs\PullHelperImageJob; use App\Jobs\PullSentinelImageJob; +use App\Jobs\PullTemplatesAndVersions; use App\Jobs\ServerStatusJob; use App\Models\InstanceSettings; use App\Models\ScheduledDatabaseBackup; @@ -29,6 +30,7 @@ protected function schedule(Schedule $schedule): void // Instance Jobs $schedule->command('horizon:snapshot')->everyMinute(); $schedule->job(new CleanupInstanceStuffsJob)->everyMinute()->onOneServer(); + $schedule->job(new PullTemplatesAndVersions)->everyTenMinutes()->onOneServer(); // $schedule->job(new CheckResaleLicenseJob)->hourly()->onOneServer(); // Server Jobs $this->check_scheduled_backups($schedule); @@ -41,7 +43,7 @@ protected function schedule(Schedule $schedule): void // Instance Jobs $schedule->command('horizon:snapshot')->everyFiveMinutes(); $schedule->command('cleanup:unreachable-servers')->daily(); - + $schedule->job(new PullTemplatesAndVersions)->everyTenMinutes()->onOneServer(); $schedule->job(new CleanupInstanceStuffsJob)->everyTwoMinutes()->onOneServer(); // $schedule->job(new CheckResaleLicenseJob)->hourly()->onOneServer(); diff --git a/app/Jobs/PullTemplatesAndVersions.php b/app/Jobs/PullTemplatesAndVersions.php new file mode 100644 index 000000000..f9e79cdc3 --- /dev/null +++ b/app/Jobs/PullTemplatesAndVersions.php @@ -0,0 +1,55 @@ +get('https://cdn.coollabs.io/coolify/versions.json'); + if ($response->successful()) { + $versions = $response->json(); + File::put(base_path('versions.json'), json_encode($versions, JSON_PRETTY_PRINT)); + } else { + send_internal_notification('PullTemplatesAndVersions failed with: ' . $response->status() . ' ' . $response->body()); + } + } + } catch (\Throwable $e) { + send_internal_notification('PullTemplatesAndVersions failed with: ' . $e->getMessage()); + ray($e->getMessage()); + } + try { + ray('PullTemplatesAndVersions service-templates'); + $response = Http::retry(3, 1000)->get(config('constants.services.official')); + if ($response->successful()) { + $services = $response->json(); + File::put(base_path('templates/service-templates.json'), json_encode($services)); + } else { + send_internal_notification('PullTemplatesAndVersions failed with: ' . $response->status() . ' ' . $response->body()); + } + } catch (\Throwable $e) { + send_internal_notification('PullTemplatesAndVersions failed with: ' . $e->getMessage()); + ray($e->getMessage()); + } + } +} diff --git a/app/Livewire/Dev/Compose.php b/app/Livewire/Dev/Compose.php index ec2c4f54d..8c361ba2a 100644 --- a/app/Livewire/Dev/Compose.php +++ b/app/Livewire/Dev/Compose.php @@ -10,7 +10,7 @@ class Compose extends Component public string $base64 = ''; public $services; public function mount() { - $this->services = getServiceTemplates(); + $this->services = get_service_templates(); } public function setService(string $selected) { $this->base64 = data_get($this->services, $selected . '.compose'); diff --git a/app/Livewire/Project/New/Select.php b/app/Livewire/Project/New/Select.php index d4deebeb4..849150222 100644 --- a/app/Livewire/Project/New/Select.php +++ b/app/Livewire/Project/New/Select.php @@ -91,7 +91,7 @@ public function loadServices(bool $force = false) }); } else { $this->search = null; - $this->allServices = getServiceTemplates(); + $this->allServices = get_service_templates(); $this->services = $this->allServices->filter(function ($service, $key) { return str_contains(strtolower($key), strtolower($this->search)); }); diff --git a/app/Livewire/Project/Resource/Create.php b/app/Livewire/Project/Resource/Create.php index 8ea77950e..48c5b107d 100644 --- a/app/Livewire/Project/Resource/Create.php +++ b/app/Livewire/Project/Resource/Create.php @@ -25,7 +25,7 @@ public function mount() return redirect()->route('dashboard'); } if (isset($type) && isset($destination_uuid) && isset($server_id)) { - $services = getServiceTemplates(); + $services = get_service_templates(); if (in_array($type, DATABASE_TYPES)) { if ($type->value() === "postgresql") { diff --git a/app/Models/Service.php b/app/Models/Service.php index 4c20b71de..252f56608 100644 --- a/app/Models/Service.php +++ b/app/Models/Service.php @@ -667,7 +667,7 @@ public function failedTaskLink($task_uuid) } public function documentation() { - $services = getServiceTemplates(); + $services = get_service_templates(); $service = data_get($services, str($this->name)->beforeLast('-')->value, []); return data_get($service, 'documentation', config('constants.docs.base_url')); } diff --git a/bootstrap/helpers/shared.php b/bootstrap/helpers/shared.php index 6453108eb..c75224e79 100644 --- a/bootstrap/helpers/shared.php +++ b/bootstrap/helpers/shared.php @@ -165,9 +165,12 @@ function get_latest_sentinel_version(): string function get_latest_version_of_coolify(): string { try { - $response = Http::get('https://cdn.coollabs.io/coolify/versions.json'); - $versions = $response->json(); + $versions = File::get(base_path('versions.json')); + $versions = json_decode($versions, true); return data_get($versions, 'coolify.v4.version'); + // $response = Http::get('https://cdn.coollabs.io/coolify/versions.json'); + // $versions = $response->json(); + // return data_get($versions, 'coolify.v4.version'); } catch (\Throwable $e) { //throw $e; ray($e->getMessage()); @@ -462,24 +465,25 @@ function sslip(Server $server) return "http://{$server->ip}.sslip.io"; } -function getServiceTemplates() +function get_service_templates() { - if (isDev()) { - $services = File::get(base_path('templates/service-templates.json')); - $services = collect(json_decode($services))->sortKeys(); - } else { - try { - $response = Http::retry(3, 50)->get(config('constants.services.official')); - if ($response->failed()) { - return collect([]); - } - $services = $response->json(); - $services = collect($services)->sortKeys(); - } catch (\Throwable $e) { - $services = collect([]); - } - } - return $services; + // if (isDev()) { + // $services = File::get(base_path('templates/service-templates.json')); + // $services = collect(json_decode($services))->sortKeys(); + // } else { + // try { + // $response = Http::retry(3, 50)->get(config('constants.services.official')); + // if ($response->failed()) { + // return collect([]); + // } + // $services = $response->json(); + // $services = collect($services)->sortKeys(); + // } catch (\Throwable $e) { + // $services = collect([]); + // } + // } + $services = File::get(base_path('templates/service-templates.json')); + return collect(json_decode($services))->sortKeys(); } function getResourceByUuid(string $uuid, ?int $teamId = null) @@ -649,7 +653,7 @@ function parseDockerComposeFile(Service|Application $resource, bool $isNew = fal } catch (\Exception $e) { throw new \Exception($e->getMessage()); } - $allServices = getServiceTemplates(); + $allServices = get_service_templates(); $topLevelVolumes = collect(data_get($yaml, 'volumes', [])); $topLevelNetworks = collect(data_get($yaml, 'networks', [])); $services = data_get($yaml, 'services'); diff --git a/config/constants.php b/config/constants.php index 53f43ae5a..51bc63b7b 100644 --- a/config/constants.php +++ b/config/constants.php @@ -21,8 +21,8 @@ ], 'services' => [ // Temporary disabled until cache is implemented - // 'official' => 'https://cdn.coollabs.io/coolify/service-templates.json', - 'official' => 'https://raw.githubusercontent.com/coollabsio/coolify/main/templates/service-templates.json', + 'official' => 'https://cdn.coollabs.io/coolify/service-templates.json', + // 'official' => 'https://raw.githubusercontent.com/coollabsio/coolify/main/templates/service-templates.json', ], 'limits' => [ 'trial_period' => 0, diff --git a/resources/views/components/navbar.blade.php b/resources/views/components/navbar.blade.php index 924625424..fbb5291fb 100644 --- a/resources/views/components/navbar.blade.php +++ b/resources/views/components/navbar.blade.php @@ -307,7 +307,6 @@ class="{{ request()->is('settings*') ? 'menu-item-active menu-item' : 'menu-item @if (isCloud() && isInstanceAdmin())
  • - @@ -320,9 +319,11 @@ class="{{ request()->is('settings*') ? 'menu-item-active menu-item' : 'menu-item @endif
    @if (isInstanceAdmin() && !isCloud()) -
  • - -
  • + @persist('upgrade') +
  • + +
  • + @endpersist @endif