From 5ee8015a0fc7cea3c0602a00a71bcb027db33268 Mon Sep 17 00:00:00 2001 From: Praveen Pendyala Date: Tue, 25 Nov 2025 13:14:09 +0000 Subject: [PATCH 001/173] Add Transcript LOL link and logo to README My account is a small sponsor --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index a84b3bfa9..276ef07b5 100644 --- a/README.md +++ b/README.md @@ -141,6 +141,7 @@ ### Small Sponsors Niklas Lausch Cap-go InterviewPal +Transcript LOL ...and many more at [GitHub Sponsors](https://github.com/sponsors/coollabsio) From 8289dcc3ca057f2e39d15cf7e5f30910002c1a2c Mon Sep 17 00:00:00 2001 From: Murat Aslan Date: Tue, 9 Dec 2025 10:40:19 +0300 Subject: [PATCH 002/173] feat: add ServiceDatabase restore/import support Add support for restoring/importing backups in ServiceDatabase (Docker Compose databases). Changes: - Add ServiceDatabase case in buildRestoreCommand() method - Handle ServiceDatabase container naming in getContainers() - Support PostgreSQL, MySQL, MariaDB, MongoDB detection via databaseType() - Mark unsupported ServiceDatabase types (Redis, KeyDB, etc.) Fixes #7529 --- app/Livewire/Project/Database/Import.php | 59 ++++++++++++++++++++++-- 1 file changed, 56 insertions(+), 3 deletions(-) diff --git a/app/Livewire/Project/Database/Import.php b/app/Livewire/Project/Database/Import.php index 26feb1a5e..0b6e31ea0 100644 --- a/app/Livewire/Project/Database/Import.php +++ b/app/Livewire/Project/Database/Import.php @@ -176,8 +176,23 @@ public function mount() public function updatedDumpAll($value) { - switch ($this->resource->getMorphClass()) { + $morphClass = $this->resource->getMorphClass(); + + // Handle ServiceDatabase by checking the database type + if ($morphClass === \App\Models\ServiceDatabase::class) { + $dbType = $this->resource->databaseType(); + if (str_contains($dbType, 'mysql')) { + $morphClass = 'mysql'; + } elseif (str_contains($dbType, 'mariadb')) { + $morphClass = 'mariadb'; + } elseif (str_contains($dbType, 'postgres')) { + $morphClass = 'postgresql'; + } + } + + switch ($morphClass) { case \App\Models\StandaloneMariadb::class: + case 'mariadb': if ($value === true) { $this->mariadbRestoreCommand = <<<'EOD' for pid in $(mariadb -u root -p$MARIADB_ROOT_PASSWORD -N -e "SELECT id FROM information_schema.processlist WHERE user != 'root';"); do @@ -193,6 +208,7 @@ public function updatedDumpAll($value) } break; case \App\Models\StandaloneMysql::class: + case 'mysql': if ($value === true) { $this->mysqlRestoreCommand = <<<'EOD' for pid in $(mysql -u root -p$MYSQL_ROOT_PASSWORD -N -e "SELECT id FROM information_schema.processlist WHERE user != 'root';"); do @@ -208,6 +224,7 @@ public function updatedDumpAll($value) } break; case \App\Models\StandalonePostgresql::class: + case 'postgresql': if ($value === true) { $this->postgresqlRestoreCommand = <<<'EOD' psql -U $POSTGRES_USER -c "SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname IS NOT NULL AND pid <> pg_backend_pid()" && \ @@ -236,7 +253,14 @@ public function getContainers() $this->authorize('view', $resource); $this->resource = $resource; $this->server = $this->resource->destination->server; - $this->container = $this->resource->uuid; + + // Handle ServiceDatabase container naming + if ($this->resource->getMorphClass() === \App\Models\ServiceDatabase::class) { + $this->container = $this->resource->name . '-' . $this->resource->service->uuid; + } else { + $this->container = $this->resource->uuid; + } + if (str(data_get($this, 'resource.status'))->startsWith('running')) { $this->containers->push($this->container); } @@ -249,6 +273,15 @@ public function getContainers() ) { $this->unsupported = true; } + + // Mark unsupported ServiceDatabase types (Redis, KeyDB, etc.) + if ($this->resource->getMorphClass() === \App\Models\ServiceDatabase::class) { + $dbType = $this->resource->databaseType(); + if (str_contains($dbType, 'redis') || str_contains($dbType, 'keydb') || + str_contains($dbType, 'dragonfly') || str_contains($dbType, 'clickhouse')) { + $this->unsupported = true; + } + } } public function checkFile() @@ -575,8 +608,25 @@ public function restoreFromS3() public function buildRestoreCommand(string $tmpPath): string { - switch ($this->resource->getMorphClass()) { + $morphClass = $this->resource->getMorphClass(); + + // Handle ServiceDatabase by checking the database type + if ($morphClass === \App\Models\ServiceDatabase::class) { + $dbType = $this->resource->databaseType(); + if (str_contains($dbType, 'mysql')) { + $morphClass = 'mysql'; + } elseif (str_contains($dbType, 'mariadb')) { + $morphClass = 'mariadb'; + } elseif (str_contains($dbType, 'postgres')) { + $morphClass = 'postgresql'; + } elseif (str_contains($dbType, 'mongo')) { + $morphClass = 'mongodb'; + } + } + + switch ($morphClass) { case \App\Models\StandaloneMariadb::class: + case 'mariadb': $restoreCommand = $this->mariadbRestoreCommand; if ($this->dumpAll) { $restoreCommand .= " && (gunzip -cf {$tmpPath} 2>/dev/null || cat {$tmpPath}) | mariadb -u root -p\$MARIADB_ROOT_PASSWORD"; @@ -585,6 +635,7 @@ public function buildRestoreCommand(string $tmpPath): string } break; case \App\Models\StandaloneMysql::class: + case 'mysql': $restoreCommand = $this->mysqlRestoreCommand; if ($this->dumpAll) { $restoreCommand .= " && (gunzip -cf {$tmpPath} 2>/dev/null || cat {$tmpPath}) | mysql -u root -p\$MYSQL_ROOT_PASSWORD"; @@ -593,6 +644,7 @@ public function buildRestoreCommand(string $tmpPath): string } break; case \App\Models\StandalonePostgresql::class: + case 'postgresql': $restoreCommand = $this->postgresqlRestoreCommand; if ($this->dumpAll) { $restoreCommand .= " && (gunzip -cf {$tmpPath} 2>/dev/null || cat {$tmpPath}) | psql -U \$POSTGRES_USER postgres"; @@ -601,6 +653,7 @@ public function buildRestoreCommand(string $tmpPath): string } break; case \App\Models\StandaloneMongodb::class: + case 'mongodb': $restoreCommand = $this->mongodbRestoreCommand; if ($this->dumpAll === false) { $restoreCommand .= "{$tmpPath}"; From 60683875426a58a0e8a803ce9eb95276fddf87e3 Mon Sep 17 00:00:00 2001 From: Murat Aslan Date: Fri, 12 Dec 2025 11:47:16 +0300 Subject: [PATCH 003/173] feat: add import backup UI for ServiceDatabase Add Import Backup section to ServiceDatabase view for supported database types (PostgreSQL, MySQL, MariaDB, MongoDB). This enables users to import backups directly from the ServiceDatabase configuration page, utilizing the existing Import Livewire component. --- .../livewire/project/service/database.blade.php | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/resources/views/livewire/project/service/database.blade.php b/resources/views/livewire/project/service/database.blade.php index 1ebb3a44f..eebe78c3f 100644 --- a/resources/views/livewire/project/service/database.blade.php +++ b/resources/views/livewire/project/service/database.blade.php @@ -49,4 +49,19 @@ instantSave="instantSaveLogDrain" id="isLogDrainEnabled" label="Drain Logs" /> + + @php + $dbType = $database->databaseType(); + $supportedTypes = ['mysql', 'mariadb', 'postgres', 'mongo']; + $isSupported = collect($supportedTypes)->contains(fn($type) => str_contains($dbType, $type)); + @endphp + + @if ($isSupported) + @can('update', $database) +
+

Import Backup

+ +
+ @endcan + @endif From 80d432171d8593529654bb5ebb5bc31708392085 Mon Sep 17 00:00:00 2001 From: OZCAP <48883102+OZCAP@users.noreply.github.com> Date: Sat, 13 Dec 2025 10:43:35 +0400 Subject: [PATCH 004/173] fix: use original_server for log drain config in generate_compose_file When build server is enabled, $this->server points to the build server. The log drain configuration check was using $this->server which would incorrectly check the build server's settings instead of the deployment server where the container actually runs. This fix ensures log drain configuration is correctly applied based on the deployment server's settings by using $this->original_server. --- app/Jobs/ApplicationDeploymentJob.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Jobs/ApplicationDeploymentJob.php b/app/Jobs/ApplicationDeploymentJob.php index cc1a44f9a..7e2cb8e9c 100644 --- a/app/Jobs/ApplicationDeploymentJob.php +++ b/app/Jobs/ApplicationDeploymentJob.php @@ -2613,7 +2613,7 @@ private function generate_compose_file() } else { $docker_compose['services'][$this->container_name]['labels'] = $labels; } - if ($this->server->isLogDrainEnabled() && $this->application->isLogDrainEnabled()) { + if ($this->original_server->isLogDrainEnabled() && $this->application->isLogDrainEnabled()) { $docker_compose['services'][$this->container_name]['logging'] = generate_fluentd_configuration(); } if ($this->application->settings->is_gpu_enabled) { From f0b6e82e5fdbc5264485a0cd13077166ac6994ff Mon Sep 17 00:00:00 2001 From: djeber Date: Fri, 19 Dec 2025 02:32:48 +0100 Subject: [PATCH 005/173] Update n8n-with-postgresql.yaml --- templates/compose/n8n-with-postgresql.yaml | 28 +++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/templates/compose/n8n-with-postgresql.yaml b/templates/compose/n8n-with-postgresql.yaml index 94648e958..107aba5e0 100644 --- a/templates/compose/n8n-with-postgresql.yaml +++ b/templates/compose/n8n-with-postgresql.yaml @@ -7,7 +7,7 @@ services: n8n: - image: docker.n8n.io/n8nio/n8n:1.119.2 + image: n8nio/n8n:stable environment: - SERVICE_URL_N8N_5678 - N8N_EDITOR_BASE_URL=${SERVICE_URL_N8N} @@ -23,10 +23,17 @@ services: - DB_POSTGRESDB_SCHEMA=public - DB_POSTGRESDB_PASSWORD=$SERVICE_PASSWORD_POSTGRES - N8N_RUNNERS_ENABLED=${N8N_RUNNERS_ENABLED:-true} + - N8N_RUNNERS_MODE=${N8N_RUNNERS_MODE:-external} + - N8N_RUNNERS_BROKER_LISTEN_ADDRESS=${N8N_RUNNERS_BROKER_LISTEN_ADDRESS:-0.0.0.0} + - N8N_RUNNERS_AUTH_TOKEN=$SERVICE_PASSWORD_N8N + - N8N_RUNNERS_BROKER_PORT=${N8N_RUNNERS_BROKER_PORT:-5679} + - N8N_RUNNERS_N8N_CONCURRENCY=${N8N_RUNNERS_N8N_CONCURRENCY:-0} + - N8N_NATIVE_PYTHON_RUNNER=${N8N_NATIVE_PYTHON_RUNNER:-true} - N8N_BLOCK_ENV_ACCESS_IN_NODE=${N8N_BLOCK_ENV_ACCESS_IN_NODE:-true} - N8N_GIT_NODE_DISABLE_BARE_REPOS=${N8N_GIT_NODE_DISABLE_BARE_REPOS:-true} - N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=${N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS:-true} - N8N_PROXY_HOPS=${N8N_PROXY_HOPS:-1} + - N8N_SKIP_AUTH_ON_OAUTH_CALLBACK=${N8N_SKIP_AUTH_ON_OAUTH_CALLBACK:-false} volumes: - n8n-data:/home/node/.n8n depends_on: @@ -37,6 +44,22 @@ services: interval: 5s timeout: 20s retries: 10 + task-runners: + image: n8nio/runners:stable + environment: + - N8N_RUNNERS_TASK_BROKER_URI=${N8N_RUNNERS_TASK_BROKER_URI:-http://n8n:5679} + - N8N_RUNNERS_AUTH_TOKEN=$SERVICE_PASSWORD_N8N + - N8N_RUNNERS_AUTO_SHUTDOWN_TIMEOUT=${N8N_RUNNERS_AUTO_SHUTDOWN_TIMEOUT:-15} + - N8N_RUNNERS_ENABLED=${N8N_RUNNERS_ENABLED:-javascript,python} + depends_on: + - n8n + healthcheck: + test: + - CMD-SHELL + - 'wget -qO- http://127.0.0.1:5680/' + interval: 5s + timeout: 20s + retries: 10 postgresql: image: postgres:16-alpine volumes: @@ -50,3 +73,6 @@ services: interval: 5s timeout: 20s retries: 10 +volumes: + n8n-data: + postgresql-data: From 07f99fec68a4ce24515ec4f362a87bfd7571c701 Mon Sep 17 00:00:00 2001 From: djeber Date: Fri, 19 Dec 2025 08:57:20 +0100 Subject: [PATCH 006/173] Update n8n and task-runners images to version 2.0.3 --- templates/compose/n8n-with-postgresql.yaml | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/templates/compose/n8n-with-postgresql.yaml b/templates/compose/n8n-with-postgresql.yaml index 107aba5e0..75ceaa8d0 100644 --- a/templates/compose/n8n-with-postgresql.yaml +++ b/templates/compose/n8n-with-postgresql.yaml @@ -7,7 +7,7 @@ services: n8n: - image: n8nio/n8n:stable + image: n8nio/n8n:2.0.3 environment: - SERVICE_URL_N8N_5678 - N8N_EDITOR_BASE_URL=${SERVICE_URL_N8N} @@ -45,7 +45,7 @@ services: timeout: 20s retries: 10 task-runners: - image: n8nio/runners:stable + image: n8nio/runners:2.0.3 environment: - N8N_RUNNERS_TASK_BROKER_URI=${N8N_RUNNERS_TASK_BROKER_URI:-http://n8n:5679} - N8N_RUNNERS_AUTH_TOKEN=$SERVICE_PASSWORD_N8N @@ -73,6 +73,3 @@ services: interval: 5s timeout: 20s retries: 10 -volumes: - n8n-data: - postgresql-data: From aabcb960aad8da8adea152167b1b61e7b035fc25 Mon Sep 17 00:00:00 2001 From: Tam Nguyen Date: Fri, 19 Dec 2025 18:57:35 +1100 Subject: [PATCH 007/173] feat(template): add mage-ai --- public/svgs/mage-ai.svg | 38 ++++++++++++++++++++++++++++++++++ templates/compose/mage-ai.yaml | 31 +++++++++++++++++++++++++++ 2 files changed, 69 insertions(+) create mode 100644 public/svgs/mage-ai.svg create mode 100644 templates/compose/mage-ai.yaml diff --git a/public/svgs/mage-ai.svg b/public/svgs/mage-ai.svg new file mode 100644 index 000000000..24f4783db --- /dev/null +++ b/public/svgs/mage-ai.svg @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/templates/compose/mage-ai.yaml b/templates/compose/mage-ai.yaml new file mode 100644 index 000000000..c9ebee65f --- /dev/null +++ b/templates/compose/mage-ai.yaml @@ -0,0 +1,31 @@ +# documentation: https://docs.mage.ai +# slogan: Build, run, and manage data pipelines for integrating and transforming data. +# category: automation +# tags: data,dbt,etl,pipelines +# logo: svgs/mage-ai.svg +# port: 6789 + +services: + mage-ai: + image: 'mageai/mageai:0.9.78' + command: 'mage start default_project' + environment: + - SERVICE_URL_MAGEAI_6789 + - PROJECT_NAME=default_project + - USER_CODE_PATH=/home/src/default_project + - ENV=production + volumes: + - 'mageai_data:/home/src/' + restart: unless-stopped + healthcheck: + test: + - CMD + - curl + - '-s' + - '-f' + - '-o' + - /dev/null + - 'http://127.0.0.1:6789' + interval: 30s + timeout: 10s + retries: 5 From 535f0afb733d851d7f9171fb9a826ae6082598cf Mon Sep 17 00:00:00 2001 From: djeber Date: Tue, 23 Dec 2025 09:11:58 +0100 Subject: [PATCH 008/173] Upgrade n8n and runners images to version 2.1.2 --- templates/compose/n8n-with-postgresql.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/templates/compose/n8n-with-postgresql.yaml b/templates/compose/n8n-with-postgresql.yaml index 75ceaa8d0..0809664c3 100644 --- a/templates/compose/n8n-with-postgresql.yaml +++ b/templates/compose/n8n-with-postgresql.yaml @@ -7,7 +7,7 @@ services: n8n: - image: n8nio/n8n:2.0.3 + image: n8nio/n8n:2.1.2 environment: - SERVICE_URL_N8N_5678 - N8N_EDITOR_BASE_URL=${SERVICE_URL_N8N} @@ -45,7 +45,7 @@ services: timeout: 20s retries: 10 task-runners: - image: n8nio/runners:2.0.3 + image: n8nio/runners:2.1.2 environment: - N8N_RUNNERS_TASK_BROKER_URI=${N8N_RUNNERS_TASK_BROKER_URI:-http://n8n:5679} - N8N_RUNNERS_AUTH_TOKEN=$SERVICE_PASSWORD_N8N From 9f961ecb8b2eaa1a4b71b13a7566b45bf8d05b44 Mon Sep 17 00:00:00 2001 From: djeber Date: Thu, 25 Dec 2025 05:04:52 +0100 Subject: [PATCH 009/173] Update n8n-with-postgresql.yaml --- templates/compose/n8n-with-postgresql.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/templates/compose/n8n-with-postgresql.yaml b/templates/compose/n8n-with-postgresql.yaml index 0809664c3..6e98bceea 100644 --- a/templates/compose/n8n-with-postgresql.yaml +++ b/templates/compose/n8n-with-postgresql.yaml @@ -7,7 +7,7 @@ services: n8n: - image: n8nio/n8n:2.1.2 + image: n8nio/n8n:2.1.4 environment: - SERVICE_URL_N8N_5678 - N8N_EDITOR_BASE_URL=${SERVICE_URL_N8N} @@ -45,7 +45,7 @@ services: timeout: 20s retries: 10 task-runners: - image: n8nio/runners:2.1.2 + image: n8nio/runners:2.1.4 environment: - N8N_RUNNERS_TASK_BROKER_URI=${N8N_RUNNERS_TASK_BROKER_URI:-http://n8n:5679} - N8N_RUNNERS_AUTH_TOKEN=$SERVICE_PASSWORD_N8N From 62d05d3ba6763687773a49889bd0523b8a4f42da Mon Sep 17 00:00:00 2001 From: djeber Date: Thu, 25 Dec 2025 05:05:02 +0100 Subject: [PATCH 010/173] Update n8n image version to 1.123.9 --- templates/compose/n8n-with-postgres-and-worker.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/templates/compose/n8n-with-postgres-and-worker.yaml b/templates/compose/n8n-with-postgres-and-worker.yaml index fec28860e..b110200fa 100644 --- a/templates/compose/n8n-with-postgres-and-worker.yaml +++ b/templates/compose/n8n-with-postgres-and-worker.yaml @@ -7,7 +7,7 @@ services: n8n: - image: docker.n8n.io/n8nio/n8n:1.119.2 + image: docker.n8n.io/n8nio/n8n:1.123.9 environment: - SERVICE_URL_N8N_5678 - N8N_EDITOR_BASE_URL=${SERVICE_URL_N8N} @@ -46,7 +46,7 @@ services: retries: 10 n8n-worker: - image: docker.n8n.io/n8nio/n8n:1.119.2 + image: docker.n8n.io/n8nio/n8n:1.123.9 command: worker environment: - GENERIC_TIMEZONE=${GENERIC_TIMEZONE:-Europe/Berlin} @@ -104,4 +104,4 @@ services: test: ["CMD", "redis-cli", "ping"] interval: 5s timeout: 5s - retries: 10 \ No newline at end of file + retries: 10 From 6c9f7b4aae1d7ff2baabb4e65a72c976535c5622 Mon Sep 17 00:00:00 2001 From: djeber Date: Thu, 25 Dec 2025 05:05:12 +0100 Subject: [PATCH 011/173] Update n8n image and add task runners configuration --- templates/compose/n8n.yaml | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/templates/compose/n8n.yaml b/templates/compose/n8n.yaml index 4e886b408..52a41328c 100644 --- a/templates/compose/n8n.yaml +++ b/templates/compose/n8n.yaml @@ -7,7 +7,7 @@ services: n8n: - image: docker.n8n.io/n8nio/n8n:1.119.2 + image: n8nio/n8n:2.1.4 environment: - SERVICE_URL_N8N_5678 - N8N_EDITOR_BASE_URL=${SERVICE_URL_N8N} @@ -17,10 +17,17 @@ services: - TZ=${TZ:-Europe/Berlin} - DB_SQLITE_POOL_SIZE=${DB_SQLITE_POOL_SIZE:-3} - N8N_RUNNERS_ENABLED=${N8N_RUNNERS_ENABLED:-true} + - N8N_RUNNERS_MODE=${N8N_RUNNERS_MODE:-external} + - N8N_RUNNERS_BROKER_LISTEN_ADDRESS=${N8N_RUNNERS_BROKER_LISTEN_ADDRESS:-0.0.0.0} + - N8N_RUNNERS_AUTH_TOKEN=$SERVICE_PASSWORD_N8N + - N8N_RUNNERS_BROKER_PORT=${N8N_RUNNERS_BROKER_PORT:-5679} + - N8N_RUNNERS_N8N_CONCURRENCY=${N8N_RUNNERS_N8N_CONCURRENCY:-0} + - N8N_NATIVE_PYTHON_RUNNER=${N8N_NATIVE_PYTHON_RUNNER:-true} - N8N_BLOCK_ENV_ACCESS_IN_NODE=${N8N_BLOCK_ENV_ACCESS_IN_NODE:-true} - N8N_GIT_NODE_DISABLE_BARE_REPOS=${N8N_GIT_NODE_DISABLE_BARE_REPOS:-true} - N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=${N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS:-true} - N8N_PROXY_HOPS=${N8N_PROXY_HOPS:-1} + - N8N_SKIP_AUTH_ON_OAUTH_CALLBACK=${N8N_SKIP_AUTH_ON_OAUTH_CALLBACK:-false} volumes: - n8n-data:/home/node/.n8n healthcheck: @@ -28,3 +35,19 @@ services: interval: 5s timeout: 20s retries: 10 + task-runners: + image: n8nio/runners:2.1.4 + environment: + - N8N_RUNNERS_TASK_BROKER_URI=${N8N_RUNNERS_TASK_BROKER_URI:-http://n8n:5679} + - N8N_RUNNERS_AUTH_TOKEN=$SERVICE_PASSWORD_N8N + - N8N_RUNNERS_AUTO_SHUTDOWN_TIMEOUT=${N8N_RUNNERS_AUTO_SHUTDOWN_TIMEOUT:-15} + - N8N_RUNNERS_ENABLED=${N8N_RUNNERS_ENABLED:-javascript,python} + depends_on: + - n8n + healthcheck: + test: + - CMD-SHELL + - 'wget -qO- http://127.0.0.1:5680/' + interval: 5s + timeout: 20s + retries: 10 From 707bfacbcd315043b0d4194664fef08435fe0f1e Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 25 Dec 2025 18:18:26 +0000 Subject: [PATCH 012/173] fix(ui): improve upgrade modal loading indicators visibility in light mode Change yellow loading indicators to black in light mode for better visibility while keeping warning (yellow) color for dark mode. --- .../components/upgrade-progress.blade.php | 24 +++++++++---------- resources/views/livewire/upgrade.blade.php | 2 +- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/resources/views/components/upgrade-progress.blade.php b/resources/views/components/upgrade-progress.blade.php index 1418ca6c9..cc7d7d188 100644 --- a/resources/views/components/upgrade-progress.blade.php +++ b/resources/views/components/upgrade-progress.blade.php @@ -17,7 +17,7 @@