From 7711b028c086955c6ffd17964c221ffc360617d3 Mon Sep 17 00:00:00 2001 From: Kasra Bigdeli Date: Sat, 8 Aug 2026 13:36:13 -0700 Subject: [PATCH 1/4] Fix one-click service analytics iteration --- src/routes/user/oneclick/OneClickAppRouter.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/routes/user/oneclick/OneClickAppRouter.ts b/src/routes/user/oneclick/OneClickAppRouter.ts index c9d2b6b..60dc3dc 100644 --- a/src/routes/user/oneclick/OneClickAppRouter.ts +++ b/src/routes/user/oneclick/OneClickAppRouter.ts @@ -384,7 +384,7 @@ export function reportAnalyticsOnAppDeploy( templateName === 'DOCKER_COMPOSE' ) { if (template?.services) { - template.services.forEach((service: any) => { + Object.values(template.services).forEach((service: any) => { if (service && typeof service === 'object') { Object.keys(service).forEach((key) => { if ( From 3e3e9254705aae0c10ba1f0ff6004d2b8902412a Mon Sep 17 00:00:00 2001 From: Kasra Bigdeli Date: Sat, 8 Aug 2026 13:36:20 -0700 Subject: [PATCH 2/4] Test keyed one-click service maps --- tests/OneClickAppRouter.test.ts | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/tests/OneClickAppRouter.test.ts b/tests/OneClickAppRouter.test.ts index d77453e..fc8fc43 100644 --- a/tests/OneClickAppRouter.test.ts +++ b/tests/OneClickAppRouter.test.ts @@ -167,14 +167,14 @@ describe('reportAnalyticsOnAppDeploy', () => { test('should track unused fields for TEMPLATE_ONE_CLICK', () => { const templateName = 'TEMPLATE_ONE_CLICK' const template = { - services: [ - { + services: { + app: { image: 'nginx:latest', environment: { VAR: 'value' }, custom_field: 'value', another_field: 'value2', }, - ], + }, } reportAnalyticsOnAppDeploy(templateName, template, mockEventLogger) @@ -186,14 +186,14 @@ describe('reportAnalyticsOnAppDeploy', () => { test('should track unused fields for DOCKER_COMPOSE', () => { const templateName = 'DOCKER_COMPOSE' const template = { - services: [ - { + services: { + database: { image: 'postgres:latest', volumes: ['/data:/var/lib/postgresql/data'], restart: 'always', networks: ['backend'], }, - ], + }, } reportAnalyticsOnAppDeploy(templateName, template, mockEventLogger) @@ -228,19 +228,19 @@ describe('reportAnalyticsOnAppDeploy', () => { test('should handle multiple services with mixed fields', () => { const templateName = 'DOCKER_COMPOSE' const template = { - services: [ - { + services: { + web: { image: 'nginx:latest', ports: ['80:80'], custom_field1: 'value1', }, - { + database: { image: 'postgres:latest', environment: { POSTGRES_DB: 'mydb' }, custom_field2: 'value2', another_custom: 'value3', }, - ], + }, } reportAnalyticsOnAppDeploy(templateName, template, mockEventLogger) From e61179512a61f0e9e51387aac39383eeb50d24c9 Mon Sep 17 00:00:00 2001 From: Kasra Bigdeli Date: Sat, 8 Aug 2026 13:36:26 -0700 Subject: [PATCH 3/4] Bump version to 1.15.1 --- src/utils/CaptainConstants.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/utils/CaptainConstants.ts b/src/utils/CaptainConstants.ts index 903941a..36de854 100644 --- a/src/utils/CaptainConstants.ts +++ b/src/utils/CaptainConstants.ts @@ -17,7 +17,7 @@ const CONSTANT_FILE_OVERRIDE_USER = const configs = { publishedNameOnDockerHub: 'caprover/caprover', - version: '1.15.0', + version: '1.15.1', defaultMaxLogSize: '512m', From 6a6544405704485ab4da58dbfe9b3b8df16725ac Mon Sep 17 00:00:00 2001 From: Kasra Bigdeli Date: Sat, 8 Aug 2026 13:36:48 -0700 Subject: [PATCH 4/4] Add 1.15.1 changelog entry --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 26b8508..6843101 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,10 @@ Available as `edge` - TBD +## [1.15.1] - 2026-08-08 + +- Fixed: Custom one-click app template and Docker Compose deployments failing to start [PR-2453](https://github.com/caprover/caprover/pull/2453) + ## [1.15.0] - 2026-08-04 - New: Warning when a persistent volume label is already used by another app [PR-226](https://github.com/caprover/caprover-frontend/pull/226)