From 02f950edc7ee6ce01cd62b1638d0bea99f314250 Mon Sep 17 00:00:00 2001 From: Vahor Date: Wed, 4 Sep 2024 19:38:13 +0200 Subject: [PATCH 1/2] fix: pull coolify image only when the app needs to be updated --- app/Actions/Server/UpdateCoolify.php | 3 ++- app/Console/Kernel.php | 4 ++-- ...b.php => FetchLatestCoolifyVersionJob.php} | 19 +------------------ 3 files changed, 5 insertions(+), 21 deletions(-) rename app/Jobs/{PullCoolifyImageJob.php => FetchLatestCoolifyVersionJob.php} (55%) diff --git a/app/Actions/Server/UpdateCoolify.php b/app/Actions/Server/UpdateCoolify.php index 09d6471e8..5648de796 100644 --- a/app/Actions/Server/UpdateCoolify.php +++ b/app/Actions/Server/UpdateCoolify.php @@ -62,10 +62,11 @@ class UpdateCoolify return; } + instant_remote_process(["docker pull -q ghcr.io/coollabsio/coolify:{$this->latestVersion}"], $this->server, false); + remote_process([ 'curl -fsSL https://cdn.coollabs.io/coolify/upgrade.sh -o /data/coolify/source/upgrade.sh', "bash /data/coolify/source/upgrade.sh $this->latestVersion", ], $this->server); - } } diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php index c2c787be4..2af771d3e 100644 --- a/app/Console/Kernel.php +++ b/app/Console/Kernel.php @@ -6,7 +6,7 @@ use App\Jobs\CheckForUpdatesJob; use App\Jobs\CleanupInstanceStuffsJob; use App\Jobs\DatabaseBackupJob; use App\Jobs\DockerCleanupJob; -use App\Jobs\PullCoolifyImageJob; +use App\Jobs\FetchLatestCoolifyVersionJob; use App\Jobs\PullHelperImageJob; use App\Jobs\PullSentinelImageJob; use App\Jobs\PullTemplatesFromCDN; @@ -44,7 +44,7 @@ class Kernel extends ConsoleKernel // Instance Jobs $schedule->command('horizon:snapshot')->everyFiveMinutes(); $schedule->command('cleanup:unreachable-servers')->daily()->onOneServer(); - $schedule->job(new PullCoolifyImageJob)->cron($settings->update_check_frequency)->timezone($settings->instance_timezone)->onOneServer(); + $schedule->job(new FetchLatestCoolifyVersionJob)->cron($settings->update_check_frequency)->timezone($settings->instance_timezone)->onOneServer(); $schedule->job(new PullTemplatesFromCDN)->cron($settings->update_check_frequency)->timezone($settings->instance_timezone)->onOneServer(); $schedule->job(new CleanupInstanceStuffsJob)->everyTwoMinutes()->onOneServer(); $this->schedule_updates($schedule); diff --git a/app/Jobs/PullCoolifyImageJob.php b/app/Jobs/FetchLatestCoolifyVersionJob.php similarity index 55% rename from app/Jobs/PullCoolifyImageJob.php rename to app/Jobs/FetchLatestCoolifyVersionJob.php index f0912493f..20cc1c7c7 100644 --- a/app/Jobs/PullCoolifyImageJob.php +++ b/app/Jobs/FetchLatestCoolifyVersionJob.php @@ -2,8 +2,6 @@ namespace App\Jobs; -use App\Models\InstanceSettings; -use App\Models\Server; use Illuminate\Bus\Queueable; use Illuminate\Contracts\Queue\ShouldBeEncrypted; use Illuminate\Contracts\Queue\ShouldQueue; @@ -13,7 +11,7 @@ use Illuminate\Queue\SerializesModels; use Illuminate\Support\Facades\File; use Illuminate\Support\Facades\Http; -class PullCoolifyImageJob implements ShouldBeEncrypted, ShouldQueue +class FetchLatestCoolifyVersionJob implements ShouldBeEncrypted, ShouldQueue { use Dispatchable, InteractsWithQueue, Queueable, SerializesModels; @@ -23,26 +21,11 @@ class PullCoolifyImageJob implements ShouldBeEncrypted, ShouldQueue if (isDev() || isCloud()) { return; } - $settings = InstanceSettings::get(); - $server = Server::findOrFail(0); $response = Http::retry(3, 1000)->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)); } - $latest_version = get_latest_version_of_coolify(); - instant_remote_process(["docker pull -q ghcr.io/coollabsio/coolify:{$latest_version}"], $server, false); - - $current_version = config('version'); - if (! $settings->is_auto_update_enabled) { - return; - } - if ($latest_version === $current_version) { - return; - } - if (version_compare($latest_version, $current_version, '<')) { - return; - } } catch (\Throwable $e) { throw $e; } From 0dad77af3307d95798aebd4a8de462c3f2619d08 Mon Sep 17 00:00:00 2001 From: Vahor Date: Wed, 4 Sep 2024 21:09:40 +0200 Subject: [PATCH 2/2] save versions.json during CheckForUpdatesJob --- app/Console/Kernel.php | 2 -- app/Jobs/CheckForUpdatesJob.php | 3 +++ app/Jobs/FetchLatestCoolifyVersionJob.php | 33 ----------------------- 3 files changed, 3 insertions(+), 35 deletions(-) delete mode 100644 app/Jobs/FetchLatestCoolifyVersionJob.php diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php index 2af771d3e..b20e518b3 100644 --- a/app/Console/Kernel.php +++ b/app/Console/Kernel.php @@ -6,7 +6,6 @@ use App\Jobs\CheckForUpdatesJob; use App\Jobs\CleanupInstanceStuffsJob; use App\Jobs\DatabaseBackupJob; use App\Jobs\DockerCleanupJob; -use App\Jobs\FetchLatestCoolifyVersionJob; use App\Jobs\PullHelperImageJob; use App\Jobs\PullSentinelImageJob; use App\Jobs\PullTemplatesFromCDN; @@ -44,7 +43,6 @@ class Kernel extends ConsoleKernel // Instance Jobs $schedule->command('horizon:snapshot')->everyFiveMinutes(); $schedule->command('cleanup:unreachable-servers')->daily()->onOneServer(); - $schedule->job(new FetchLatestCoolifyVersionJob)->cron($settings->update_check_frequency)->timezone($settings->instance_timezone)->onOneServer(); $schedule->job(new PullTemplatesFromCDN)->cron($settings->update_check_frequency)->timezone($settings->instance_timezone)->onOneServer(); $schedule->job(new CleanupInstanceStuffsJob)->everyTwoMinutes()->onOneServer(); $this->schedule_updates($schedule); diff --git a/app/Jobs/CheckForUpdatesJob.php b/app/Jobs/CheckForUpdatesJob.php index 86b66fbfb..ddc264839 100644 --- a/app/Jobs/CheckForUpdatesJob.php +++ b/app/Jobs/CheckForUpdatesJob.php @@ -10,6 +10,7 @@ use Illuminate\Foundation\Bus\Dispatchable; use Illuminate\Queue\InteractsWithQueue; use Illuminate\Queue\SerializesModels; use Illuminate\Support\Facades\Http; +use Illuminate\Support\Facades\File; class CheckForUpdatesJob implements ShouldBeEncrypted, ShouldQueue { @@ -25,12 +26,14 @@ class CheckForUpdatesJob implements ShouldBeEncrypted, ShouldQueue $response = Http::retry(3, 1000)->get('https://cdn.coollabs.io/coolify/versions.json'); if ($response->successful()) { $versions = $response->json(); + $latest_version = data_get($versions, 'coolify.v4.version'); $current_version = config('version'); if (version_compare($latest_version, $current_version, '>')) { // New version available $settings->update(['new_version_available' => true]); + File::put(base_path('versions.json'), json_encode($versions, JSON_PRETTY_PRINT)); } else { $settings->update(['new_version_available' => false]); } diff --git a/app/Jobs/FetchLatestCoolifyVersionJob.php b/app/Jobs/FetchLatestCoolifyVersionJob.php deleted file mode 100644 index 20cc1c7c7..000000000 --- a/app/Jobs/FetchLatestCoolifyVersionJob.php +++ /dev/null @@ -1,33 +0,0 @@ -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)); - } - } catch (\Throwable $e) { - throw $e; - } - } -}