From e00ccf65cf3ee153b5f5fefcb69c29820bbbdb6b Mon Sep 17 00:00:00 2001 From: Andras Bacsai Date: Mon, 22 May 2023 12:00:59 +0200 Subject: [PATCH] auto updates --- app/Console/Kernel.php | 7 +- .../Livewire/Project/Application/Deploy.php | 2 + app/Jobs/AutoUpdateJob.php | 93 +++++++++++++++++++ app/Models/User.php | 10 +- .../etc/s6-overlay/s6-rc.d/queue-worker/run | 2 +- resources/views/auth/login.blade.php | 2 +- resources/views/components/navbar.blade.php | 17 ++-- resources/views/dashboard.blade.php | 4 +- .../livewire/private-key/create.blade.php | 3 +- .../views/livewire/settings/form.blade.php | 19 ++-- .../views/livewire/switch-team.blade.php | 19 ++-- resources/views/server/new.blade.php | 2 +- resources/views/settings.blade.php | 1 - resources/views/team.blade.php | 2 +- routes/web.php | 2 +- 15 files changed, 147 insertions(+), 38 deletions(-) create mode 100644 app/Jobs/AutoUpdateJob.php diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php index a636e1c5d..dc98c5478 100644 --- a/app/Console/Kernel.php +++ b/app/Console/Kernel.php @@ -2,6 +2,7 @@ namespace App\Console; +use App\Jobs\AutoUpdateJob; use App\Jobs\ContainerStatusJob; use App\Jobs\DockerCleanupDanglingImagesJob; use App\Jobs\ProxyCheckJob; @@ -15,9 +16,9 @@ class Kernel extends ConsoleKernel */ protected function schedule(Schedule $schedule): void { - $schedule->job(new ContainerStatusJob)->everyMinute(); - $schedule->job(new DockerCleanupDanglingImagesJob)->everyMinute(); - // $schedule->job(new ProxyCheckJob)->everyMinute(); + $schedule->job(new DockerCleanupDanglingImagesJob)->everyFiveMinutes(); + $schedule->job(new AutoUpdateJob)->everyFifteenMinutes(); + $schedule->job(new ProxyCheckJob)->everyMinute(); } /** diff --git a/app/Http/Livewire/Project/Application/Deploy.php b/app/Http/Livewire/Project/Application/Deploy.php index 66191f83c..39181ce90 100644 --- a/app/Http/Livewire/Project/Application/Deploy.php +++ b/app/Http/Livewire/Project/Application/Deploy.php @@ -2,6 +2,7 @@ namespace App\Http\Livewire\Project\Application; +use App\Jobs\ContainerStatusJob; use App\Jobs\DeployApplicationJob; use App\Models\Application; use Illuminate\Support\Facades\Route; @@ -26,6 +27,7 @@ class Deploy extends Component $this->parameters = getParameters(); $this->application = Application::where('id', $this->applicationId)->first(); $this->destination = $this->application->destination->getMorphClass()::where('id', $this->application->destination->id)->first(); + dispatch(new ContainerStatusJob($this->application->uuid)); } protected function setDeploymentUuid() { diff --git a/app/Jobs/AutoUpdateJob.php b/app/Jobs/AutoUpdateJob.php new file mode 100644 index 000000000..1da36f365 --- /dev/null +++ b/app/Jobs/AutoUpdateJob.php @@ -0,0 +1,93 @@ +is_auto_update_enabled) { + Log::info('Auto update is disabled'); + dd('Auto update is disabled'); + $this->delete(); + } + } + + /** + * Execute the job. + */ + public function handle(): void + { + if (config('app.env') === 'local') { + $latest_version = getLatestVersionOfCoolify(); + $current_version = config('version'); + if ($latest_version === $current_version) { + dd('no update, versions match', $latest_version, $current_version); + return; + } + if (version_compare($latest_version, $current_version, '<')) { + dd('no update, latest version is lower than current version'); + return; + } + + $server = Server::where('ip', 'coolify-testing-host')->first(); + if (!$server) { + return; + } + instantRemoteProcess([ + "sleep 2" + ], $server); + remoteProcess([ + "sleep 10" + ], $server, ActivityTypes::INLINE->value); + dd('update done'); + } else { + $latest_version = getLatestVersionOfCoolify(); + $current_version = config('version'); + if ($latest_version === $current_version) { + return; + } + if (version_compare($latest_version, $current_version, '<')) { + return; + } + + $cdn = "https://coolify-cdn.b-cdn.net/files"; + $server = Server::where('ip', 'host.docker.internal')->first(); + if (!$server) { + return; + } + + instantRemoteProcess([ + "curl -fsSL $cdn/docker-compose.yml -o /data/coolify/source/docker-compose.yml", + "curl -fsSL $cdn/docker-compose.prod.yml -o /data/coolify/source/docker-compose.prod.yml", + "curl -fsSL $cdn/.env.production -o /data/coolify/source/.env.production", + "curl -fsSL $cdn/upgrade.sh -o /data/coolify/source/upgrade.sh", + ], $server); + + instantRemoteProcess([ + "docker compose -f /data/coolify/source/docker-compose.yml -f /data/coolify/source/docker-compose.prod.yml pull", + ], $server); + + remoteProcess([ + "bash /data/coolify/source/upgrade.sh $latest_version" + ], $server, ActivityTypes::INLINE->value); + } + } +} diff --git a/app/Models/User.php b/app/Models/User.php index 3827bb5a0..2df832eeb 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -52,9 +52,15 @@ class User extends Authenticatable $model->uuid = (string) new Cuid2(7); }); } - public function isRoot() + public function isPartOfRootTeam() { - return $this->id == 0; + $found_root_team = auth()->user()->teams->filter(function ($team) { + if ($team->id == 0) { + return true; + } + return false; + }); + return $found_root_team->count() > 0; } public function teams() { diff --git a/docker/dev-ssu/etc/s6-overlay/s6-rc.d/queue-worker/run b/docker/dev-ssu/etc/s6-overlay/s6-rc.d/queue-worker/run index 79fc840ee..99e7184e6 100644 --- a/docker/dev-ssu/etc/s6-overlay/s6-rc.d/queue-worker/run +++ b/docker/dev-ssu/etc/s6-overlay/s6-rc.d/queue-worker/run @@ -1,2 +1,2 @@ #!/command/execlineb -P -su - webuser -c "php /var/www/html/artisan queue:listen --timeout=600 --rest=1 --memory=512" +su - webuser -c "php /var/www/html/artisan queue:listen --timeout=600" diff --git a/resources/views/auth/login.blade.php b/resources/views/auth/login.blade.php index 11a5bbe83..11a58e975 100644 --- a/resources/views/auth/login.blade.php +++ b/resources/views/auth/login.blade.php @@ -23,7 +23,7 @@ @else -
{{ __('auth.registration_disabled') }}
+
{{ __('auth.registration_disabled') }}
@endif diff --git a/resources/views/components/navbar.blade.php b/resources/views/components/navbar.blade.php index 91b5d7df1..fa93a42dd 100644 --- a/resources/views/components/navbar.blade.php +++ b/resources/views/components/navbar.blade.php @@ -14,19 +14,18 @@ Dashboard - - @if (auth()->user()->isRoot()) + @if (auth()->user()->isPartOfRootTeam())
  • Settings
  • @endif -
  • + {{--
  • Profile -
  • + --}}
  • Team @@ -37,7 +36,7 @@ Command Center
  • - @if (auth()->user()->isRoot()) + @if (auth()->user()->isPartOfRootTeam())
  • @@ -62,18 +61,18 @@ Dashboard - @if (auth()->user()->isRoot()) + @if (auth()->user()->isPartOfRootTeam())
  • Settings
  • @endif -
  • + {{--
  • Profile -
  • + --}}
  • Team @@ -84,7 +83,7 @@ Command Center
  • - @if (auth()->user()->isRoot()) + @if (auth()->user()->isPartOfRootTeam())
  • diff --git a/resources/views/dashboard.blade.php b/resources/views/dashboard.blade.php index 687314dae..0aaa89757 100644 --- a/resources/views/dashboard.blade.php +++ b/resources/views/dashboard.blade.php @@ -1,8 +1,8 @@ @if ($servers->count() === 0)
    -
    Without a server, you won't be able to do much
    - @else diff --git a/resources/views/livewire/private-key/create.blade.php b/resources/views/livewire/private-key/create.blade.php index 6478b8842..5a5773e44 100644 --- a/resources/views/livewire/private-key/create.blade.php +++ b/resources/views/livewire/private-key/create.blade.php @@ -2,7 +2,8 @@
    - + Save diff --git a/resources/views/livewire/settings/form.blade.php b/resources/views/livewire/settings/form.blade.php index 53a860b2f..758056298 100644 --- a/resources/views/livewire/settings/form.blade.php +++ b/resources/views/livewire/settings/form.blade.php @@ -1,23 +1,28 @@
    -
    -
    +
    +

    Settings

    + + Save + +
    +
    +
    -
    +
    - - Submit - + +

    Advanced

    - + {{-- --}}
    diff --git a/resources/views/livewire/switch-team.blade.php b/resources/views/livewire/switch-team.blade.php index 29dcbd6db..9a5e79ec1 100644 --- a/resources/views/livewire/switch-team.blade.php +++ b/resources/views/livewire/switch-team.blade.php @@ -1,10 +1,13 @@
    -

    Other Teams

    -
    - @foreach (auth()->user()->otherTeams() as $team) - Switch - to: - {{ $team->name }} - @endforeach -
    + @if (auth()->user()->otherTeams()->count() > 0) +

    Switch to:

    +
    + @foreach (auth()->user()->otherTeams() as $team) + + {{ $team->name }} + @endforeach +
    + @endif +
    diff --git a/resources/views/server/new.blade.php b/resources/views/server/new.blade.php index f4aa9188e..e6edcd80d 100644 --- a/resources/views/server/new.blade.php +++ b/resources/views/server/new.blade.php @@ -1,6 +1,6 @@ @if ($private_keys->count() === 0) -

    Create private key

    +

    Create Private Key

    You need to create a private key before you can create a server.
    @else diff --git a/resources/views/settings.blade.php b/resources/views/settings.blade.php index 389f8be41..761a5417f 100644 --- a/resources/views/settings.blade.php +++ b/resources/views/settings.blade.php @@ -1,4 +1,3 @@ -

    Settings

    diff --git a/resources/views/team.blade.php b/resources/views/team.blade.php index c6265e32c..c1ca0c8c9 100644 --- a/resources/views/team.blade.php +++ b/resources/views/team.blade.php @@ -1,7 +1,7 @@

    Current Team

    -

    Name: {{ session('currentTeam')->name }}

    +

    {{ session('currentTeam')->name }}

    diff --git a/routes/web.php b/routes/web.php index 54c5b09ae..b8477cf67 100644 --- a/routes/web.php +++ b/routes/web.php @@ -133,7 +133,7 @@ Route::middleware(['auth'])->group(function () { })->name('team'); Route::get('/settings', function () { - $isRoot = auth()->user()->isRoot(); + $isRoot = auth()->user()->isPartOfRootTeam(); if ($isRoot) { $settings = InstanceSettings::get(); return view('settings', [