From b49b3bf9b5df53afe9ee986030f652021718c4d1 Mon Sep 17 00:00:00 2001 From: Andras Bacsai <5845193+andrasbacsai@users.noreply.github.com> Date: Wed, 7 May 2025 23:11:45 +0200 Subject: [PATCH] v4.0.0-beta.417 (#5784) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat(README): add InterviewPal sponsorship link and corresponding SVG icon * chore(versions): update coolify version to 4.0.0-beta.413 and nightly version to 4.0.0-beta.414 in configuration files * fix(terminal): enhance WebSocket client verification with authorized IPs in terminal server * chore(versions): update realtime version to 1.0.8 in versions.json * chore(versions): update realtime version to 1.0.8 in versions.json * chore(docker): update soketi image version to 1.0.8 in production configuration files * chore(versions): update coolify version to 4.0.0-beta.414 and nightly version to 4.0.0-beta.415 in configuration files * fix(ApplicationDeploymentJob): ensure source is an object before checking GitHub app properties * fix(ui): Disable livewire navigate feature (causing spam of setInterval()) * fix(ui): Remove required attribute from image input in service application view * fix(ui): Change application image validation to be nullable in service application view * fix(Server): Correct proxy path formatting for Traefik proxy type * chore(versions): update coolify version to 4.0.0-beta.416 and nightly version to 4.0.0-beta.417 in configuration files; fix links in deployment view * feat(Service): Add functionality to convert between applications and databases in docker-compose based applications fix(ui): Fix service layout refresh on compose change * fix(service): graceful shutdown of old container (#5731) * refactor(Database): streamline container shutdown process and reduce timeout duration * fix(ServerCheck): enhance proxy container check to ensure it is running before proceeding * chore(seeder): update git branch from 'main' to 'v4.x' for multiple examples in ApplicationSeeder * fix(applications): include pull_request_id in deployment queue check to prevent duplicate deployments * refactor(core): streamline container stopping process and reduce timeout duration; update related methods for consistency * fix(database): update label for image input field to improve clarity * feat(migration): add 'is_migrated' and 'custom_type' columns to service_applications and service_databases tables * feat(backup): implement custom database type selection and enhance scheduled backups management * fix(ServerCheck): set default proxy status to 'exited' to handle missing container state * fix(database): reduce container stop timeout from 300 to 30 seconds for improved responsiveness * refactor(database): update DB facade usage for consistency across service files * Update app/Livewire/Project/Service/Database.php Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * refactor(database): enhance application conversion logic and add existence checks for databases and applications * refactor(actions): standardize method naming for network and configuration deletion across application and service classes * refactor(logdrain): consolidate log drain stopping logic to reduce redundancy * refactor(StandaloneMariadb): add type hint for destination method to improve code clarity * refactor(DeleteResourceJob): streamline resource deletion logic and improve conditional checks for database types * refactor(jobs): update middleware to prevent job release after expiration for CleanupInstanceStuffsJob, RestartProxyJob, and ServerCheckJob * fix(ui): system theming for charts (#5740) * chore(deps-dev): bump vite from 6.2.6 to 6.3.4 (#5743) Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 6.2.6 to 6.3.4. - [Release notes](https://github.com/vitejs/vite/releases) - [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md) - [Commits](https://github.com/vitejs/vite/commits/v6.3.4/packages/vite) --- updated-dependencies: - dependency-name: vite dependency-version: 6.3.4 dependency-type: direct:development ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * fix(dev): mount points?! * fix(dev): proxy mount point * fix(ui): allow adding scheduled backups for non-migrated databases * fix(DatabaseBackupJob): escape PostgreSQL password in backup command (#5759) * fix(ui): correct closing div tag in service index view * Revert "fix(dev): mount points?!" This reverts commit 365bf3cbf0e5aa21a2ccb12fe6ec333b93e404da. * feat(README): add Gozunga and Macarne to sponsors list * refactor(jobs): unify middleware configuration to prevent job release after expiration for DockerCleanupJob and PushServerUpdateJob * chore(versions): update coolify version to 4.0.0-beta.417 and nightly version to 4.0.0-beta.418 * feat(redis): add scheduled cleanup command for Redis keys and enhance cleanup logic --------- Signed-off-by: dependabot[bot] Co-authored-by: Jérémy Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> Co-authored-by: Best Codes <106822363+The-Best-Codes@users.noreply.github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: busybox <29630035+busybox11@users.noreply.github.com> --- README.md | 2 ++ app/Console/Commands/CleanupRedis.php | 23 +++++++++++++---------- app/Console/Kernel.php | 1 + app/Jobs/CleanupInstanceStuffsJob.php | 2 +- app/Jobs/DockerCleanupJob.php | 2 +- app/Jobs/PushServerUpdateJob.php | 2 +- app/Jobs/RestartProxyJob.php | 2 +- app/Jobs/ServerCheckJob.php | 2 +- config/constants.php | 2 +- other/nightly/versions.json | 4 ++-- versions.json | 4 ++-- 11 files changed, 26 insertions(+), 20 deletions(-) diff --git a/README.md b/README.md index 5f583df75..cf3dc21c3 100644 --- a/README.md +++ b/README.md @@ -84,6 +84,8 @@ Thank you so much! * [Tolgee](https://tolgee.io?ref=coolify.io) - The open source localization platform * [CompAI](https://www.trycomp.ai?ref=coolify.io) - Open source compliance automation platform * [GoldenVM](https://billing.goldenvm.com?ref=coolify.io) - Premium virtual machine hosting solutions +* [Gozunga](https://gozunga.com?ref=coolify.io) - Seriously Simple Cloud Infrastructure +* [Macarne](https://macarne.com?ref=coolify.io) - Best IP Transit & Carrier Ethernet Solutions for Simplified Network Connectivity ## Small Sponsors diff --git a/app/Console/Commands/CleanupRedis.php b/app/Console/Commands/CleanupRedis.php index e16a82be4..315d1adc7 100644 --- a/app/Console/Commands/CleanupRedis.php +++ b/app/Console/Commands/CleanupRedis.php @@ -13,17 +13,20 @@ class CleanupRedis extends Command public function handle() { - $prefix = config('database.redis.options.prefix'); - - $keys = Redis::connection()->keys('*:laravel*'); - collect($keys)->each(function ($key) use ($prefix) { + $redis = Redis::connection('horizon'); + $keys = $redis->keys('*'); + $prefix = config('horizon.prefix'); + foreach ($keys as $key) { $keyWithoutPrefix = str_replace($prefix, '', $key); - Redis::connection()->del($keyWithoutPrefix); - }); + $type = $redis->command('type', [$keyWithoutPrefix]); - $queueOverlaps = Redis::connection()->keys('*laravel-queue-overlap*'); - collect($queueOverlaps)->each(function ($key) { - Redis::connection()->del($key); - }); + if ($type === 5) { + $data = $redis->command('hgetall', [$keyWithoutPrefix]); + $status = data_get($data, 'status'); + if ($status === 'completed') { + $redis->command('del', [$keyWithoutPrefix]); + } + } + } } } diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php index a6f24aaad..1c5d3e70b 100644 --- a/app/Console/Kernel.php +++ b/app/Console/Kernel.php @@ -51,6 +51,7 @@ class Kernel extends ConsoleKernel } // $this->scheduleInstance->job(new CleanupStaleMultiplexedConnections)->hourly(); + $this->scheduleInstance->command('cleanup:redis')->everyTenMinutes(); if (isDev()) { // Instance Jobs diff --git a/app/Jobs/CleanupInstanceStuffsJob.php b/app/Jobs/CleanupInstanceStuffsJob.php index 60ae58489..53e344daf 100644 --- a/app/Jobs/CleanupInstanceStuffsJob.php +++ b/app/Jobs/CleanupInstanceStuffsJob.php @@ -23,7 +23,7 @@ class CleanupInstanceStuffsJob implements ShouldBeEncrypted, ShouldBeUnique, Sho public function middleware(): array { - return [(new WithoutOverlapping('cleanup-instance-stuffs'))->expireAfter(60)->dontRelease()]; + return [(new WithoutOverlapping('cleanup-instance-stuffs'))->dontRelease()]; } public function handle(): void diff --git a/app/Jobs/DockerCleanupJob.php b/app/Jobs/DockerCleanupJob.php index 7e246649d..05a4aa8de 100644 --- a/app/Jobs/DockerCleanupJob.php +++ b/app/Jobs/DockerCleanupJob.php @@ -31,7 +31,7 @@ class DockerCleanupJob implements ShouldBeEncrypted, ShouldQueue public function middleware(): array { - return [(new WithoutOverlapping($this->server->uuid))->expireAfter(600)]; + return [(new WithoutOverlapping($this->server->uuid))->dontRelease()]; } public function __construct(public Server $server, public bool $manualCleanup = false) {} diff --git a/app/Jobs/PushServerUpdateJob.php b/app/Jobs/PushServerUpdateJob.php index 4d40240f9..93b203fcb 100644 --- a/app/Jobs/PushServerUpdateJob.php +++ b/app/Jobs/PushServerUpdateJob.php @@ -71,7 +71,7 @@ class PushServerUpdateJob implements ShouldBeEncrypted, ShouldQueue public function middleware(): array { - return [(new WithoutOverlapping($this->server->uuid))->expireAfter(30)]; + return [(new WithoutOverlapping($this->server->uuid))->dontRelease()]; } public function backoff(): int diff --git a/app/Jobs/RestartProxyJob.php b/app/Jobs/RestartProxyJob.php index a70ca518c..7fc716f70 100644 --- a/app/Jobs/RestartProxyJob.php +++ b/app/Jobs/RestartProxyJob.php @@ -24,7 +24,7 @@ class RestartProxyJob implements ShouldBeEncrypted, ShouldQueue public function middleware(): array { - return [(new WithoutOverlapping($this->server->uuid))->expireAfter(60)->dontRelease()]; + return [(new WithoutOverlapping($this->server->uuid))->dontRelease()]; } public function __construct(public Server $server) {} diff --git a/app/Jobs/ServerCheckJob.php b/app/Jobs/ServerCheckJob.php index 611402161..9818d5c6a 100644 --- a/app/Jobs/ServerCheckJob.php +++ b/app/Jobs/ServerCheckJob.php @@ -28,7 +28,7 @@ class ServerCheckJob implements ShouldBeEncrypted, ShouldQueue public function middleware(): array { - return [(new WithoutOverlapping($this->server->uuid))->expireAfter(60)->dontRelease()]; + return [(new WithoutOverlapping($this->server->uuid))->dontRelease()]; } public function __construct(public Server $server) {} diff --git a/config/constants.php b/config/constants.php index 9dcac646c..ec6f981ae 100644 --- a/config/constants.php +++ b/config/constants.php @@ -2,7 +2,7 @@ return [ 'coolify' => [ - 'version' => '4.0.0-beta.416', + 'version' => '4.0.0-beta.417', 'helper_version' => '1.0.8', 'realtime_version' => '1.0.8', 'self_hosted' => env('SELF_HOSTED', true), diff --git a/other/nightly/versions.json b/other/nightly/versions.json index 759bea95b..7cd46baab 100644 --- a/other/nightly/versions.json +++ b/other/nightly/versions.json @@ -1,10 +1,10 @@ { "coolify": { "v4": { - "version": "4.0.0-beta.416" + "version": "4.0.0-beta.417" }, "nightly": { - "version": "4.0.0-beta.417" + "version": "4.0.0-beta.418" }, "helper": { "version": "1.0.8" diff --git a/versions.json b/versions.json index 759bea95b..7cd46baab 100644 --- a/versions.json +++ b/versions.json @@ -1,10 +1,10 @@ { "coolify": { "v4": { - "version": "4.0.0-beta.416" + "version": "4.0.0-beta.417" }, "nightly": { - "version": "4.0.0-beta.417" + "version": "4.0.0-beta.418" }, "helper": { "version": "1.0.8"