From a5a7f8ae55b131557a019a4d5d06cc656f545725 Mon Sep 17 00:00:00 2001
From: ShadowArcanist <162910371+ShadowArcanist@users.noreply.github.com>
Date: Mon, 19 May 2025 16:23:31 +0530
Subject: [PATCH 03/53] fix(service): Snapdrop no matching manifest error
(#5849)
---
templates/compose/snapdrop.yaml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/templates/compose/snapdrop.yaml b/templates/compose/snapdrop.yaml
index 336a75737..82ad5fecc 100644
--- a/templates/compose/snapdrop.yaml
+++ b/templates/compose/snapdrop.yaml
@@ -4,7 +4,7 @@
services:
snapdrop:
- image: lscr.io/linuxserver/snapdrop:latest
+ image: 'linuxserver/snapdrop:version-b8b78cc2'
environment:
- SERVICE_FQDN_SNAPDROP
- PUID=1000
From f061147d43e93d500e28f81c1aee47ff27cc25b8 Mon Sep 17 00:00:00 2001
From: Datenschmutz <63157166+Datenschmutz@users.noreply.github.com>
Date: Mon, 19 May 2025 13:00:22 +0200
Subject: [PATCH 04/53] chore(deps): update Authentik service to 2025.4.1
(#5830)
---
templates/compose/authentik.yaml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/templates/compose/authentik.yaml b/templates/compose/authentik.yaml
index 4947140b9..d6e2a9968 100644
--- a/templates/compose/authentik.yaml
+++ b/templates/compose/authentik.yaml
@@ -6,7 +6,7 @@
services:
authentik-server:
- image: ghcr.io/goauthentik/server:${AUTHENTIK_TAG:-2025.2.3}
+ image: ghcr.io/goauthentik/server:${AUTHENTIK_TAG:-2025.4.1}
restart: unless-stopped
command: server
environment:
@@ -35,7 +35,7 @@ services:
redis:
condition: service_healthy
authentik-worker:
- image: ghcr.io/goauthentik/server:${AUTHENTIK_TAG:-2025.2.3}
+ image: ghcr.io/goauthentik/server:${AUTHENTIK_TAG:-2025.4.1}
restart: unless-stopped
command: worker
environment:
From 42a7b13dbabc4464286bb3754cace7be26b85cda Mon Sep 17 00:00:00 2001
From: Almuzaini <62063512+YAlmuzaini@users.noreply.github.com>
Date: Mon, 19 May 2025 14:02:50 +0300
Subject: [PATCH 05/53] fix(service): use the same volume between chatwoot and
sidekiq (#5851)
---
templates/compose/chatwoot.yaml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/templates/compose/chatwoot.yaml b/templates/compose/chatwoot.yaml
index b7eec88cc..900d3354b 100644
--- a/templates/compose/chatwoot.yaml
+++ b/templates/compose/chatwoot.yaml
@@ -80,7 +80,7 @@ services:
- ACTIVE_STORAGE_SERVICE=${ACTIVE_STORAGE_SERVICE:-local}
command: ['bundle', 'exec', 'sidekiq', '-C', 'config/sidekiq.yml']
volumes:
- - sidekiq-data:/app/storage
+ - rails-data:/app/storage
healthcheck:
test: ["CMD-SHELL", "bundle exec rails runner 'puts Sidekiq.redis(&:info)' > /dev/null 2>&1"]
interval: 30s
From 38d9471de1404cc1cd88907e1bb12a9290bb6a1a Mon Sep 17 00:00:00 2001
From: Andras Bacsai <5845193+andrasbacsai@users.noreply.github.com>
Date: Mon, 19 May 2025 13:29:23 +0200
Subject: [PATCH 06/53] fix(api): validate docker_compose_raw input in
ApplicationsController
- Ensure docker_compose_raw is provided and base64 encoded before processing.
- Return appropriate validation error messages for missing or incorrectly formatted input.
---
.../Api/ApplicationsController.php | 58 ++++++++++++++++++-
1 file changed, 56 insertions(+), 2 deletions(-)
diff --git a/app/Http/Controllers/Api/ApplicationsController.php b/app/Http/Controllers/Api/ApplicationsController.php
index 3e0627b21..7818c3df2 100644
--- a/app/Http/Controllers/Api/ApplicationsController.php
+++ b/app/Http/Controllers/Api/ApplicationsController.php
@@ -989,7 +989,34 @@ class ApplicationsController extends Controller
$dockerComposeDomainsJson = collect();
if ($request->has('docker_compose_domains')) {
- $yaml = Yaml::parse($application->docker_compose_raw);
+ if (! $request->has('docker_compose_raw')) {
+ return response()->json([
+ 'message' => 'Validation failed.',
+ 'errors' => [
+ 'docker_compose_raw' => 'The base64 encoded docker_compose_raw is required.',
+ ],
+ ], 422);
+ }
+
+ if (! isBase64Encoded($request->docker_compose_raw)) {
+ return response()->json([
+ 'message' => 'Validation failed.',
+ 'errors' => [
+ 'docker_compose_raw' => 'The docker_compose_raw should be base64 encoded.',
+ ],
+ ], 422);
+ }
+ $dockerComposeRaw = base64_decode($request->docker_compose_raw);
+ if (mb_detect_encoding($dockerComposeRaw, 'ASCII', true) === false) {
+ return response()->json([
+ 'message' => 'Validation failed.',
+ 'errors' => [
+ 'docker_compose_raw' => 'The docker_compose_raw should be base64 encoded.',
+ ],
+ ], 422);
+ }
+ $dockerComposeRaw = base64_decode($request->docker_compose_raw);
+ $yaml = Yaml::parse($dockerComposeRaw);
$services = data_get($yaml, 'services');
$dockerComposeDomains = collect($request->docker_compose_domains);
if ($dockerComposeDomains->count() > 0) {
@@ -1918,7 +1945,34 @@ class ApplicationsController extends Controller
$dockerComposeDomainsJson = collect();
if ($request->has('docker_compose_domains')) {
- $yaml = Yaml::parse($application->docker_compose_raw);
+ if (! $request->has('docker_compose_raw')) {
+ return response()->json([
+ 'message' => 'Validation failed.',
+ 'errors' => [
+ 'docker_compose_raw' => 'The base64 encoded docker_compose_raw is required.',
+ ],
+ ], 422);
+ }
+
+ if (! isBase64Encoded($request->docker_compose_raw)) {
+ return response()->json([
+ 'message' => 'Validation failed.',
+ 'errors' => [
+ 'docker_compose_raw' => 'The docker_compose_raw should be base64 encoded.',
+ ],
+ ], 422);
+ }
+ $dockerComposeRaw = base64_decode($request->docker_compose_raw);
+ if (mb_detect_encoding($dockerComposeRaw, 'ASCII', true) === false) {
+ return response()->json([
+ 'message' => 'Validation failed.',
+ 'errors' => [
+ 'docker_compose_raw' => 'The docker_compose_raw should be base64 encoded.',
+ ],
+ ], 422);
+ }
+ $dockerComposeRaw = base64_decode($request->docker_compose_raw);
+ $yaml = Yaml::parse($dockerComposeRaw);
$services = data_get($yaml, 'services');
$dockerComposeDomains = collect($request->docker_compose_domains);
if ($dockerComposeDomains->count() > 0) {
From cee9dfcf52d8af3b08ca1bc1bc92c4c59370f5f4 Mon Sep 17 00:00:00 2001
From: Andras Bacsai <5845193+andrasbacsai@users.noreply.github.com>
Date: Mon, 19 May 2025 13:30:31 +0200
Subject: [PATCH 07/53] fix(api): enhance validation for docker_compose_raw in
ApplicationsController
- Add checks to ensure docker_compose_raw is provided and correctly base64 encoded.
- Implement detailed error responses for validation failures to improve user feedback.
---
.../Api/ApplicationsController.php | 29 ++++++++++++++++++-
1 file changed, 28 insertions(+), 1 deletion(-)
diff --git a/app/Http/Controllers/Api/ApplicationsController.php b/app/Http/Controllers/Api/ApplicationsController.php
index 7818c3df2..59e2692ba 100644
--- a/app/Http/Controllers/Api/ApplicationsController.php
+++ b/app/Http/Controllers/Api/ApplicationsController.php
@@ -1122,7 +1122,34 @@ class ApplicationsController extends Controller
$dockerComposeDomainsJson = collect();
if ($request->has('docker_compose_domains')) {
- $yaml = Yaml::parse($application->docker_compose_raw);
+ if (! $request->has('docker_compose_raw')) {
+ return response()->json([
+ 'message' => 'Validation failed.',
+ 'errors' => [
+ 'docker_compose_raw' => 'The base64 encoded docker_compose_raw is required.',
+ ],
+ ], 422);
+ }
+
+ if (! isBase64Encoded($request->docker_compose_raw)) {
+ return response()->json([
+ 'message' => 'Validation failed.',
+ 'errors' => [
+ 'docker_compose_raw' => 'The docker_compose_raw should be base64 encoded.',
+ ],
+ ], 422);
+ }
+ $dockerComposeRaw = base64_decode($request->docker_compose_raw);
+ if (mb_detect_encoding($dockerComposeRaw, 'ASCII', true) === false) {
+ return response()->json([
+ 'message' => 'Validation failed.',
+ 'errors' => [
+ 'docker_compose_raw' => 'The docker_compose_raw should be base64 encoded.',
+ ],
+ ], 422);
+ }
+ $dockerComposeRaw = base64_decode($request->docker_compose_raw);
+ $yaml = Yaml::parse($dockerComposeRaw);
$services = data_get($yaml, 'services');
$dockerComposeDomains = collect($request->docker_compose_domains);
if ($dockerComposeDomains->count() > 0) {
From befc8a014276fb87f1c0855d9e34753809a62ba2 Mon Sep 17 00:00:00 2001
From: CrazyTim71 <118295691+CrazyTim71@users.noreply.github.com>
Date: Mon, 19 May 2025 13:39:08 +0200
Subject: [PATCH 08/53] feat(service): add Yamtrack service (#5845)
---
public/svgs/yamtrack.svg | 28 ++++++++
.../compose/yamtrack-with-postgresql.yaml | 70 +++++++++++++++++++
templates/compose/yamtrack.yaml | 45 ++++++++++++
3 files changed, 143 insertions(+)
create mode 100644 public/svgs/yamtrack.svg
create mode 100644 templates/compose/yamtrack-with-postgresql.yaml
create mode 100644 templates/compose/yamtrack.yaml
diff --git a/public/svgs/yamtrack.svg b/public/svgs/yamtrack.svg
new file mode 100644
index 000000000..8fd79ded2
--- /dev/null
+++ b/public/svgs/yamtrack.svg
@@ -0,0 +1,28 @@
+
+
+
diff --git a/templates/compose/yamtrack-with-postgresql.yaml b/templates/compose/yamtrack-with-postgresql.yaml
new file mode 100644
index 000000000..4dae2ae3d
--- /dev/null
+++ b/templates/compose/yamtrack-with-postgresql.yaml
@@ -0,0 +1,70 @@
+# documentation: https://github.com/FuzzyGrim/Yamtrack/wiki
+# slogan: Yamtrack is a self hosted media tracker for movies, tv shows, anime, manga, video games and books.
+# tags: self-hosted, automation, tracker, media, movies, shows, anime, manga, games, books, comics
+# logo: svgs/yamtrack.svg
+# port: 8000
+
+services:
+ yamtrack:
+ image: ghcr.io/fuzzygrim/yamtrack
+ depends_on:
+ - db
+ - redis
+ environment:
+ - SERVICE_FQDN_YAMTRACK_8000
+ - TZ=${TZ:-Europe/Berlin}
+ - SECRET=$SERVICE_PASSWORD_SECRET
+ - REGISTRATION=${REGISTRATION_ENABLED:-true}
+ - URLS=$SERVICE_FQDN_YAMTRACK
+ - "REDIS_URL=redis://redis:6379"
+
+ - DB_HOST=db
+ - DB_NAME=${POSTGRESQL_DATABASE:-yamtrack}
+ - DB_USER=${SERVICE_USER_POSTGRESQL}
+ - DB_PASSWORD=${SERVICE_PASSWORD_POSTGRESQL}
+ - DB_PORT=5432
+ healthcheck:
+ test:
+ [
+ "CMD",
+ "wget",
+ "--no-verbose",
+ "--tries=1",
+ "--spider",
+ "http://127.0.0.1:8000/health/",
+ ]
+ interval: 5s
+ timeout: 20s
+ retries: 10
+
+ db:
+ image: postgres:16-alpine
+ container_name: yamtrack-db
+ environment:
+ - POSTGRES_USER=${SERVICE_USER_POSTGRESQL}
+ - POSTGRES_PASSWORD=${SERVICE_PASSWORD_POSTGRESQL}
+ - POSTGRES_DB=${POSTGRESQL_DATABASE:-yamtrack}
+ volumes:
+ - postgres_data:/var/lib/postgresql/data
+ healthcheck:
+ test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"]
+ interval: 5s
+ timeout: 20s
+ retries: 10
+
+ redis:
+ image: "redis:7-alpine"
+ volumes:
+ - "redis_data:/data"
+ healthcheck:
+ test:
+ - CMD
+ - redis-cli
+ - ping
+ interval: 5s
+ timeout: 20s
+ retries: 10
+
+volumes:
+ redis_data: null
+ postgres_data: null
diff --git a/templates/compose/yamtrack.yaml b/templates/compose/yamtrack.yaml
new file mode 100644
index 000000000..f20a0575f
--- /dev/null
+++ b/templates/compose/yamtrack.yaml
@@ -0,0 +1,45 @@
+# documentation: https://github.com/FuzzyGrim/Yamtrack/wiki
+# slogan: Yamtrack is a self hosted media tracker for movies, tv shows, anime, manga, video games and books.
+# tags: self-hosted, automation, tracker, media, movies, shows, anime, manga, games, books, comics
+# logo: svgs/yamtrack.svg
+# port: 8000
+
+services:
+ yamtrack:
+ image: ghcr.io/fuzzygrim/yamtrack
+ depends_on:
+ redis:
+ condition: service_healthy
+ environment:
+ - SERVICE_FQDN_YAMTRACK_8000
+ - TZ=${TZ:-Europe/Berlin}
+ - SECRET=$SERVICE_PASSWORD_SECRET
+ - REGISTRATION=${REGISTRATION_ENABLED:-true}
+ - URLS=$SERVICE_FQDN_YAMTRACK
+ - "REDIS_URL=redis://redis:6379"
+ volumes:
+ - "yamtrack_data:/yamtrack/db"
+ healthcheck:
+ test:
+ - CMD-SHELL
+ - "wget --no-verbose --tries=1 --spider http://127.0.0.1:8000/health/ || exit 1"
+ interval: 5s
+ timeout: 20s
+ retries: 10
+
+ redis:
+ image: "redis:7-alpine"
+ volumes:
+ - "redis_data:/data"
+ healthcheck:
+ test:
+ - CMD
+ - redis-cli
+ - ping
+ interval: 5s
+ timeout: 20s
+ retries: 10
+
+volumes:
+ redis_data: null
+ yamtrack_data: null
From bd3f987fefbef7657d2085dfafb0dcba01a40589 Mon Sep 17 00:00:00 2001
From: Andras Bacsai <5845193+andrasbacsai@users.noreply.github.com>
Date: Mon, 19 May 2025 13:43:08 +0200
Subject: [PATCH 09/53] style(css): update padding utility for password input
and add newline in app.css
---
resources/css/app.css | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/resources/css/app.css b/resources/css/app.css
index 1150917e7..79e5f0c13 100644
--- a/resources/css/app.css
+++ b/resources/css/app.css
@@ -38,6 +38,7 @@
color utility to any element that depends on these defaults.
*/
@layer base {
+
*,
::after,
::before,
@@ -161,9 +162,9 @@ section {
* Utility classes
*/
.input[type="password"] {
- padding-right: var(--padding-10);
+ @apply pr-[2.4rem];
}
.lds-heart {
animation: lds-heart 1.2s infinite cubic-bezier(0.215, 0.61, 0.355, 1);
-}
+}
\ No newline at end of file
From a5ba61945f582b836c8f4cee79faa3c76e086de3 Mon Sep 17 00:00:00 2001
From: Andras Bacsai <5845193+andrasbacsai@users.noreply.github.com>
Date: Mon, 19 May 2025 13:43:22 +0200
Subject: [PATCH 10/53] fix(select): update PostgreSQL versions and titles in
resource selection
- Change default PostgreSQL version from 16 to 17.
- Update Supabase PostgreSQL version to 17.4.1.032.
- Modify PostGIS title to indicate AMD compatibility.
- Update PGVector title to reflect version 17.
---
.../views/livewire/project/new/select.blade.php | 16 ++++++++--------
1 file changed, 8 insertions(+), 8 deletions(-)
diff --git a/resources/views/livewire/project/new/select.blade.php b/resources/views/livewire/project/new/select.blade.php
index c27163000..b0f324d4d 100644
--- a/resources/views/livewire/project/new/select.blade.php
+++ b/resources/views/livewire/project/new/select.blade.php
@@ -277,12 +277,12 @@
@if ($current_step === 'select-postgresql-type')
Select a Postgresql type
If you need extra extensions, you can select Supabase PostgreSQL (or others), otherwise select PostgreSQL
- 16 (default).
+ 17 (default).