From 1440ea83d361d9ebadfed8d43579749a9fbee070 Mon Sep 17 00:00:00 2001 From: Andras Bacsai <5845193+andrasbacsai@users.noreply.github.com> Date: Tue, 27 Oct 2026 17:04:07 +0100 Subject: [PATCH] fix(compose): keep port-suffixed SERVICE_URL and SERVICE_FQDN variables in sync with the domain Closes #9877 Co-Authored-By: Claude Opus 5.5 --- bootstrap/helpers/domains.php | 38 +++++++++ bootstrap/helpers/parsers.php | 33 +------- ...licationParserDockerComposeDomainsTest.php | 80 +++++++++++++++++++ .../application-with-exact-caddy-labels.yaml | 34 ++++---- ...application-with-exact-traefik-labels.yaml | 34 ++++---- .../expected/application-with-settings.yaml | 34 ++++---- .../Fixtures/parser/expected/application.yaml | 34 ++++---- 7 files changed, 189 insertions(+), 98 deletions(-) diff --git a/bootstrap/helpers/domains.php b/bootstrap/helpers/domains.php index 704c90988f..4e4ee200d8 100644 --- a/bootstrap/helpers/domains.php +++ b/bootstrap/helpers/domains.php @@ -1,6 +1,7 @@ $url, 'FQDN' => $host] as $type => $value) { + $application->environment_variables()->updateOrCreate([ + 'resourceable_type' => Application::class, + 'resourceable_id' => $application->id, + 'key' => "SERVICE_{$type}_{$serviceEnvKey}", + ], [ + 'value' => $value, + 'is_preview' => false, + ]); + } + } + + $pattern = '/^SERVICE_(URL|FQDN)_'.preg_quote($serviceEnvKey, '/').'(?:_(\d+))?$/'; + $application->environment_variables() + ->where(fn ($query) => $query->where('key', 'LIKE', "SERVICE_URL_{$serviceEnvKey}%") + ->orWhere('key', 'LIKE', "SERVICE_FQDN_{$serviceEnvKey}%")) + ->get() + ->each(function (EnvironmentVariable $variable) use ($pattern, $url, $host) { + if (! preg_match($pattern, $variable->key, $matches)) { + return; + } + $value = $matches[1] === 'URL' ? $url : $host; + if ($value !== null && isset($matches[2])) { + $value = "{$value}:{$matches[2]}"; + } + $variable->update(['value' => $value]); + }); +} diff --git a/bootstrap/helpers/parsers.php b/bootstrap/helpers/parsers.php index 37ef8cc2fa..041e56ff0a 100644 --- a/bootstrap/helpers/parsers.php +++ b/bootstrap/helpers/parsers.php @@ -2034,7 +2034,7 @@ function applicationParser(Application $resource, int $pull_request_id = 0, ?int if ($resource->build_pack === 'dockercompose') { foreach ($domains as $forServiceName => $domain) { $parsedDomain = composeDomainEntryString($domain); - $serviceNameFormatted = str($serviceName)->upper()->replace('-', '_')->replace('.', '_'); + $serviceEnvKey = str(normalizeComposeServiceName((string) $forServiceName))->upper()->value(); if (filled($parsedDomain)) { $parsedDomain = str($parsedDomain)->explode(',')->first(); @@ -2042,42 +2042,15 @@ function applicationParser(Application $resource, int $pull_request_id = 0, ?int $coolifyScheme = $coolifyUrl->getScheme(); $coolifyFqdn = $coolifyUrl->getHost(); $coolifyUrl = $coolifyUrl->withScheme($coolifyScheme)->withHost($coolifyFqdn)->withPort(null); - $serviceEnvKey = str(normalizeComposeServiceName((string) $forServiceName))->upper(); $coolifyEnvironments->put('SERVICE_URL_'.$serviceEnvKey, $coolifyUrl->__toString()); $coolifyEnvironments->put('SERVICE_FQDN_'.$serviceEnvKey, $coolifyFqdn); // A preview uses its own domains; the stored variables belong to the main application. if ($isPullRequest) { continue; } - $resource->environment_variables()->updateOrCreate([ - 'resourceable_type' => Application::class, - 'resourceable_id' => $resource->id, - 'key' => 'SERVICE_URL_'.$serviceEnvKey, - ], [ - 'value' => $coolifyUrl->__toString(), - 'is_preview' => false, - ]); - $resource->environment_variables()->updateOrCreate([ - 'resourceable_type' => Application::class, - 'resourceable_id' => $resource->id, - 'key' => 'SERVICE_FQDN_'.$serviceEnvKey, - ], [ - 'value' => $coolifyFqdn, - 'is_preview' => false, - ]); + syncComposeServiceUrlVariables($resource, $serviceEnvKey, $coolifyUrl->__toString(), $coolifyFqdn); } elseif (! $isPullRequest) { - $resource->environment_variables()->where('resourceable_type', Application::class) - ->where('resourceable_id', $resource->id) - ->where('key', 'LIKE', "SERVICE_FQDN_{$serviceNameFormatted}%") - ->update([ - 'value' => null, - ]); - $resource->environment_variables()->where('resourceable_type', Application::class) - ->where('resourceable_id', $resource->id) - ->where('key', 'LIKE', "SERVICE_URL_{$serviceNameFormatted}%") - ->update([ - 'value' => null, - ]); + syncComposeServiceUrlVariables($resource, $serviceEnvKey, null, null); } } } diff --git a/tests/Feature/ApplicationParserDockerComposeDomainsTest.php b/tests/Feature/ApplicationParserDockerComposeDomainsTest.php index 6e3d9131a2..e07dcfb757 100644 --- a/tests/Feature/ApplicationParserDockerComposeDomainsTest.php +++ b/tests/Feature/ApplicationParserDockerComposeDomainsTest.php @@ -820,3 +820,83 @@ it('preserves migrated null assignments separately for production and previews', ->toBe($pullRequestId ? '${LEGACY:-default}' : '') ->and($application->fresh()->docker_compose_raw)->toBe($compose); })->with([0, 42]); + +test('applicationParser keeps port-suffixed SERVICE_URL and SERVICE_FQDN variables in sync with a changed domain', function () { + $application = Application::factory()->create([ + 'environment_id' => $this->environment->id, + 'destination_id' => $this->destination->id, + 'destination_type' => StandaloneDocker::class, + 'build_pack' => 'dockercompose', + 'docker_compose_raw' => <<<'YAML' +services: + api: + image: nginx + environment: + - PUBLIC_API_URL=${SERVICE_URL_API_8000} + api2: + image: nginx + environment: + - PUBLIC_API2_URL=${SERVICE_URL_API2_9000} +YAML, + ]); + + applicationParser($application); + $application->refresh(); + + $application->docker_compose_domains = json_encode([ + 'api' => ['domain' => 'https://frontend.example.com:8000'], + 'api2' => ['domain' => 'https://api2.example.com:9000'], + ]); + $application->save(); + + applicationParser($application); + + $variables = $application->environment_variables()->pluck('value', 'key'); + + expect($variables['SERVICE_URL_API'])->toBe('https://frontend.example.com') + ->and($variables['SERVICE_FQDN_API'])->toBe('frontend.example.com') + ->and($variables['SERVICE_URL_API_8000'])->toBe('https://frontend.example.com:8000') + ->and($variables['SERVICE_FQDN_API_8000'])->toBe('frontend.example.com:8000') + ->and($variables['SERVICE_URL_API2'])->toBe('https://api2.example.com') + ->and($variables['SERVICE_URL_API2_9000'])->toBe('https://api2.example.com:9000') + ->and($variables['SERVICE_FQDN_API2_9000'])->toBe('api2.example.com:9000'); +}); + +test('applicationParser clears magic URL variables only for the service whose domain is removed', function () { + $application = Application::factory()->create([ + 'environment_id' => $this->environment->id, + 'destination_id' => $this->destination->id, + 'destination_type' => StandaloneDocker::class, + 'build_pack' => 'dockercompose', + 'docker_compose_raw' => <<<'YAML' +services: + api: + image: nginx + environment: + - PUBLIC_API_URL=${SERVICE_URL_API_8000} + api2: + image: nginx + environment: + - PUBLIC_API2_URL=${SERVICE_URL_API2_9000} +YAML, + ]); + + applicationParser($application); + $application->refresh(); + + $application->docker_compose_domains = json_encode([ + 'api' => ['domain' => ''], + 'api2' => ['domain' => 'https://api2.example.com:9000'], + ]); + $application->save(); + + applicationParser($application); + + $variables = $application->environment_variables()->pluck('value', 'key'); + + expect($variables['SERVICE_URL_API'])->toBeNull() + ->and($variables['SERVICE_URL_API_8000'])->toBeNull() + ->and($variables['SERVICE_FQDN_API_8000'])->toBeNull() + ->and($variables['SERVICE_URL_API2'])->toBe('https://api2.example.com') + ->and($variables['SERVICE_URL_API2_9000'])->toBe('https://api2.example.com:9000'); +}); diff --git a/tests/Fixtures/parser/expected/application-with-exact-caddy-labels.yaml b/tests/Fixtures/parser/expected/application-with-exact-caddy-labels.yaml index 4ab6157c40..8bbfa20c71 100644 --- a/tests/Fixtures/parser/expected/application-with-exact-caddy-labels.yaml +++ b/tests/Fixtures/parser/expected/application-with-exact-caddy-labels.yaml @@ -49,7 +49,7 @@ SELF_REF: null SERVICE_BASE64_64_WEB: '' SERVICE_FQDN_ADMIN: admin-referenceapplication0001.10.0.0.1.sslip.io - SERVICE_FQDN_ADMIN_8080: null + SERVICE_FQDN_ADMIN_8080: 'admin-referenceapplication0001.10.0.0.1.sslip.io:8080' SERVICE_FQDN_API: api-referenceapplication0001.10.0.0.1.sslip.io SERVICE_FQDN_BLOG: blog-referenceapplication0001.10.0.0.1.sslip.io SERVICE_FQDN_MY_APP: my-app-referenceapplication0001.10.0.0.1.sslip.io @@ -63,7 +63,7 @@ SERVICE_URL_API: 'http://api-referenceapplication0001.10.0.0.1.sslip.io' SERVICE_URL_BLOG: 'http://blog-referenceapplication0001.10.0.0.1.sslip.io/blog:2368' SERVICE_URL_MY_APP: 'http://my-app-referenceapplication0001.10.0.0.1.sslip.io' - SERVICE_URL_MY_APP_80: null + SERVICE_URL_MY_APP_80: 'http://my-app-referenceapplication0001.10.0.0.1.sslip.io:80' SERVICE_URL_WEB: 'http://web-referenceapplication0001.10.0.0.1.sslip.io' SERVICE_URL_WEB_3000: 'http://web-referenceapplication0001.10.0.0.1.sslip.io:3000' SERVICE_USER_DB: '' @@ -240,7 +240,7 @@ my-app: image: 'httpd:2.4-alpine' environment: - SERVICE_URL_MY_APP_80: '' + SERVICE_URL_MY_APP_80: 'http://my-app-referenceapplication0001.10.0.0.1.sslip.io:80' COOLIFY_BRANCH: '"main"' COOLIFY_RESOURCE_UUID: referenceapplication0001 COOLIFY_CONTAINER_NAME: my-app-referenceapplication0001-20260102T030405 @@ -694,13 +694,13 @@ SELF_REF: null SERVICE_BASE64_64_WEB: '' SERVICE_FQDN_ADMIN: admin.example.com - SERVICE_FQDN_ADMIN_8080: null + SERVICE_FQDN_ADMIN_8080: 'admin.example.com:8080' SERVICE_FQDN_API: www.api.example.com SERVICE_FQDN_API_V2: api-v2.example.com SERVICE_FQDN_BLOG: blog.example.com SERVICE_FQDN_MY_APP: my-app.example.com SERVICE_FQDN_WEB: web.example.com - SERVICE_FQDN_WEB_3000: 'web-referenceapplication0001.10.0.0.1.sslip.io:3000' + SERVICE_FQDN_WEB_3000: 'web.example.com:3000' SERVICE_HEX_32_WEB: '' SERVICE_PASSWORD_DB: '' SERVICE_PASSWORD_NOBRACES: '' @@ -710,9 +710,9 @@ SERVICE_URL_API_V2: 'https://api-v2.example.com' SERVICE_URL_BLOG: 'https://blog.example.com/blog:2368' SERVICE_URL_MY_APP: 'https://my-app.example.com' - SERVICE_URL_MY_APP_80: null + SERVICE_URL_MY_APP_80: 'https://my-app.example.com:80' SERVICE_URL_WEB: 'https://web.example.com' - SERVICE_URL_WEB_3000: 'http://web-referenceapplication0001.10.0.0.1.sslip.io:3000' + SERVICE_URL_WEB_3000: 'https://web.example.com:3000' SERVICE_USER_DB: '' SERVICE_USER_WEB: '' WITH_DEFAULT: null @@ -725,7 +725,7 @@ args: - 'BUILD_VERSION=${BUILD_VERSION:-1.0.0}' environment: - SERVICE_URL_WEB_3000: 'http://web-referenceapplication0001.10.0.0.1.sslip.io:3000' + SERVICE_URL_WEB_3000: 'https://web.example.com:3000' LITERAL: plain-value BARE_PASSTHROUGH: '' WITH_DEFAULT: '${WITH_DEFAULT:-fallback}' @@ -892,7 +892,7 @@ my-app: image: 'httpd:2.4-alpine' environment: - SERVICE_URL_MY_APP_80: '' + SERVICE_URL_MY_APP_80: 'https://my-app.example.com:80' COOLIFY_BRANCH: '"main"' COOLIFY_RESOURCE_UUID: referenceapplication0001 COOLIFY_CONTAINER_NAME: my-app-referenceapplication0001-20260102T030405 @@ -1392,13 +1392,13 @@ SELF_REF: null SERVICE_BASE64_64_WEB: '' SERVICE_FQDN_ADMIN: admin.example.com - SERVICE_FQDN_ADMIN_8080: null + SERVICE_FQDN_ADMIN_8080: 'admin.example.com:8080' SERVICE_FQDN_API: www.api.example.com SERVICE_FQDN_API_V2: api-v2.example.com SERVICE_FQDN_BLOG: blog.example.com SERVICE_FQDN_MY_APP: my-app.example.com SERVICE_FQDN_WEB: web.example.com - SERVICE_FQDN_WEB_3000: 'web-referenceapplication0001.10.0.0.1.sslip.io:3000' + SERVICE_FQDN_WEB_3000: 'web.example.com:3000' SERVICE_HEX_32_WEB: '' SERVICE_PASSWORD_DB: '' SERVICE_PASSWORD_NOBRACES: '' @@ -1408,9 +1408,9 @@ SERVICE_URL_API_V2: 'https://api-v2.example.com' SERVICE_URL_BLOG: 'https://blog.example.com/blog:2368' SERVICE_URL_MY_APP: 'https://my-app.example.com' - SERVICE_URL_MY_APP_80: null + SERVICE_URL_MY_APP_80: 'https://my-app.example.com:80' SERVICE_URL_WEB: 'https://web.example.com' - SERVICE_URL_WEB_3000: 'http://web-referenceapplication0001.10.0.0.1.sslip.io:3000' + SERVICE_URL_WEB_3000: 'https://web.example.com:3000' SERVICE_USER_DB: '' SERVICE_USER_WEB: '' WITH_DEFAULT: null @@ -2093,13 +2093,13 @@ SELF_REF: null SERVICE_BASE64_64_WEB: '' SERVICE_FQDN_ADMIN: admin.example.com - SERVICE_FQDN_ADMIN_8080: null + SERVICE_FQDN_ADMIN_8080: 'admin.example.com:8080' SERVICE_FQDN_API: www.api.example.com SERVICE_FQDN_API_V2: api-v2.example.com SERVICE_FQDN_BLOG: blog.example.com SERVICE_FQDN_MY_APP: my-app.example.com SERVICE_FQDN_WEB: web.example.com - SERVICE_FQDN_WEB_3000: 'web-referenceapplication0001.10.0.0.1.sslip.io:3000' + SERVICE_FQDN_WEB_3000: 'web.example.com:3000' SERVICE_HEX_32_WEB: '' SERVICE_PASSWORD_DB: '' SERVICE_PASSWORD_NOBRACES: '' @@ -2109,9 +2109,9 @@ SERVICE_URL_API_V2: 'https://api-v2.example.com' SERVICE_URL_BLOG: 'https://blog.example.com/blog:2368' SERVICE_URL_MY_APP: 'https://my-app.example.com' - SERVICE_URL_MY_APP_80: null + SERVICE_URL_MY_APP_80: 'https://my-app.example.com:80' SERVICE_URL_WEB: 'https://web.example.com' - SERVICE_URL_WEB_3000: 'http://web-referenceapplication0001.10.0.0.1.sslip.io:3000' + SERVICE_URL_WEB_3000: 'https://web.example.com:3000' SERVICE_USER_DB: '' SERVICE_USER_WEB: '' WITH_DEFAULT: null diff --git a/tests/Fixtures/parser/expected/application-with-exact-traefik-labels.yaml b/tests/Fixtures/parser/expected/application-with-exact-traefik-labels.yaml index ce031aaebd..9b07ebb1b1 100644 --- a/tests/Fixtures/parser/expected/application-with-exact-traefik-labels.yaml +++ b/tests/Fixtures/parser/expected/application-with-exact-traefik-labels.yaml @@ -49,7 +49,7 @@ SELF_REF: null SERVICE_BASE64_64_WEB: '' SERVICE_FQDN_ADMIN: admin-referenceapplication0001.10.0.0.1.sslip.io - SERVICE_FQDN_ADMIN_8080: null + SERVICE_FQDN_ADMIN_8080: 'admin-referenceapplication0001.10.0.0.1.sslip.io:8080' SERVICE_FQDN_API: api-referenceapplication0001.10.0.0.1.sslip.io SERVICE_FQDN_BLOG: blog-referenceapplication0001.10.0.0.1.sslip.io SERVICE_FQDN_MY_APP: my-app-referenceapplication0001.10.0.0.1.sslip.io @@ -63,7 +63,7 @@ SERVICE_URL_API: 'http://api-referenceapplication0001.10.0.0.1.sslip.io' SERVICE_URL_BLOG: 'http://blog-referenceapplication0001.10.0.0.1.sslip.io/blog:2368' SERVICE_URL_MY_APP: 'http://my-app-referenceapplication0001.10.0.0.1.sslip.io' - SERVICE_URL_MY_APP_80: null + SERVICE_URL_MY_APP_80: 'http://my-app-referenceapplication0001.10.0.0.1.sslip.io:80' SERVICE_URL_WEB: 'http://web-referenceapplication0001.10.0.0.1.sslip.io' SERVICE_URL_WEB_3000: 'http://web-referenceapplication0001.10.0.0.1.sslip.io:3000' SERVICE_USER_DB: '' @@ -244,7 +244,7 @@ my-app: image: 'httpd:2.4-alpine' environment: - SERVICE_URL_MY_APP_80: '' + SERVICE_URL_MY_APP_80: 'http://my-app-referenceapplication0001.10.0.0.1.sslip.io:80' COOLIFY_BRANCH: '"main"' COOLIFY_RESOURCE_UUID: referenceapplication0001 COOLIFY_CONTAINER_NAME: my-app-referenceapplication0001-20260102T030405 @@ -707,13 +707,13 @@ SELF_REF: null SERVICE_BASE64_64_WEB: '' SERVICE_FQDN_ADMIN: admin.example.com - SERVICE_FQDN_ADMIN_8080: null + SERVICE_FQDN_ADMIN_8080: 'admin.example.com:8080' SERVICE_FQDN_API: www.api.example.com SERVICE_FQDN_API_V2: api-v2.example.com SERVICE_FQDN_BLOG: blog.example.com SERVICE_FQDN_MY_APP: my-app.example.com SERVICE_FQDN_WEB: web.example.com - SERVICE_FQDN_WEB_3000: 'web-referenceapplication0001.10.0.0.1.sslip.io:3000' + SERVICE_FQDN_WEB_3000: 'web.example.com:3000' SERVICE_HEX_32_WEB: '' SERVICE_PASSWORD_DB: '' SERVICE_PASSWORD_NOBRACES: '' @@ -723,9 +723,9 @@ SERVICE_URL_API_V2: 'https://api-v2.example.com' SERVICE_URL_BLOG: 'https://blog.example.com/blog:2368' SERVICE_URL_MY_APP: 'https://my-app.example.com' - SERVICE_URL_MY_APP_80: null + SERVICE_URL_MY_APP_80: 'https://my-app.example.com:80' SERVICE_URL_WEB: 'https://web.example.com' - SERVICE_URL_WEB_3000: 'http://web-referenceapplication0001.10.0.0.1.sslip.io:3000' + SERVICE_URL_WEB_3000: 'https://web.example.com:3000' SERVICE_USER_DB: '' SERVICE_USER_WEB: '' WITH_DEFAULT: null @@ -738,7 +738,7 @@ args: - 'BUILD_VERSION=${BUILD_VERSION:-1.0.0}' environment: - SERVICE_URL_WEB_3000: 'http://web-referenceapplication0001.10.0.0.1.sslip.io:3000' + SERVICE_URL_WEB_3000: 'https://web.example.com:3000' LITERAL: plain-value BARE_PASSTHROUGH: '' WITH_DEFAULT: '${WITH_DEFAULT:-fallback}' @@ -925,7 +925,7 @@ my-app: image: 'httpd:2.4-alpine' environment: - SERVICE_URL_MY_APP_80: '' + SERVICE_URL_MY_APP_80: 'https://my-app.example.com:80' COOLIFY_BRANCH: '"main"' COOLIFY_RESOURCE_UUID: referenceapplication0001 COOLIFY_CONTAINER_NAME: my-app-referenceapplication0001-20260102T030405 @@ -1458,13 +1458,13 @@ SELF_REF: null SERVICE_BASE64_64_WEB: '' SERVICE_FQDN_ADMIN: admin.example.com - SERVICE_FQDN_ADMIN_8080: null + SERVICE_FQDN_ADMIN_8080: 'admin.example.com:8080' SERVICE_FQDN_API: www.api.example.com SERVICE_FQDN_API_V2: api-v2.example.com SERVICE_FQDN_BLOG: blog.example.com SERVICE_FQDN_MY_APP: my-app.example.com SERVICE_FQDN_WEB: web.example.com - SERVICE_FQDN_WEB_3000: 'web-referenceapplication0001.10.0.0.1.sslip.io:3000' + SERVICE_FQDN_WEB_3000: 'web.example.com:3000' SERVICE_HEX_32_WEB: '' SERVICE_PASSWORD_DB: '' SERVICE_PASSWORD_NOBRACES: '' @@ -1474,9 +1474,9 @@ SERVICE_URL_API_V2: 'https://api-v2.example.com' SERVICE_URL_BLOG: 'https://blog.example.com/blog:2368' SERVICE_URL_MY_APP: 'https://my-app.example.com' - SERVICE_URL_MY_APP_80: null + SERVICE_URL_MY_APP_80: 'https://my-app.example.com:80' SERVICE_URL_WEB: 'https://web.example.com' - SERVICE_URL_WEB_3000: 'http://web-referenceapplication0001.10.0.0.1.sslip.io:3000' + SERVICE_URL_WEB_3000: 'https://web.example.com:3000' SERVICE_USER_DB: '' SERVICE_USER_WEB: '' WITH_DEFAULT: null @@ -2210,13 +2210,13 @@ SELF_REF: null SERVICE_BASE64_64_WEB: '' SERVICE_FQDN_ADMIN: admin.example.com - SERVICE_FQDN_ADMIN_8080: null + SERVICE_FQDN_ADMIN_8080: 'admin.example.com:8080' SERVICE_FQDN_API: www.api.example.com SERVICE_FQDN_API_V2: api-v2.example.com SERVICE_FQDN_BLOG: blog.example.com SERVICE_FQDN_MY_APP: my-app.example.com SERVICE_FQDN_WEB: web.example.com - SERVICE_FQDN_WEB_3000: 'web-referenceapplication0001.10.0.0.1.sslip.io:3000' + SERVICE_FQDN_WEB_3000: 'web.example.com:3000' SERVICE_HEX_32_WEB: '' SERVICE_PASSWORD_DB: '' SERVICE_PASSWORD_NOBRACES: '' @@ -2226,9 +2226,9 @@ SERVICE_URL_API_V2: 'https://api-v2.example.com' SERVICE_URL_BLOG: 'https://blog.example.com/blog:2368' SERVICE_URL_MY_APP: 'https://my-app.example.com' - SERVICE_URL_MY_APP_80: null + SERVICE_URL_MY_APP_80: 'https://my-app.example.com:80' SERVICE_URL_WEB: 'https://web.example.com' - SERVICE_URL_WEB_3000: 'http://web-referenceapplication0001.10.0.0.1.sslip.io:3000' + SERVICE_URL_WEB_3000: 'https://web.example.com:3000' SERVICE_USER_DB: '' SERVICE_USER_WEB: '' WITH_DEFAULT: null diff --git a/tests/Fixtures/parser/expected/application-with-settings.yaml b/tests/Fixtures/parser/expected/application-with-settings.yaml index 5e2316d90b..9d8ef32865 100644 --- a/tests/Fixtures/parser/expected/application-with-settings.yaml +++ b/tests/Fixtures/parser/expected/application-with-settings.yaml @@ -49,7 +49,7 @@ SELF_REF: null SERVICE_BASE64_64_WEB: '' SERVICE_FQDN_ADMIN: admin-referenceapplication0001.10.0.0.1.sslip.io - SERVICE_FQDN_ADMIN_8080: null + SERVICE_FQDN_ADMIN_8080: 'admin-referenceapplication0001.10.0.0.1.sslip.io:8080' SERVICE_FQDN_API: api-referenceapplication0001.10.0.0.1.sslip.io SERVICE_FQDN_BLOG: blog-referenceapplication0001.10.0.0.1.sslip.io SERVICE_FQDN_MY_APP: my-app-referenceapplication0001.10.0.0.1.sslip.io @@ -63,7 +63,7 @@ SERVICE_URL_API: 'http://api-referenceapplication0001.10.0.0.1.sslip.io' SERVICE_URL_BLOG: 'http://blog-referenceapplication0001.10.0.0.1.sslip.io/blog:2368' SERVICE_URL_MY_APP: 'http://my-app-referenceapplication0001.10.0.0.1.sslip.io' - SERVICE_URL_MY_APP_80: null + SERVICE_URL_MY_APP_80: 'http://my-app-referenceapplication0001.10.0.0.1.sslip.io:80' SERVICE_URL_WEB: 'http://web-referenceapplication0001.10.0.0.1.sslip.io' SERVICE_URL_WEB_3000: 'http://web-referenceapplication0001.10.0.0.1.sslip.io:3000' SERVICE_USER_DB: '' @@ -268,7 +268,7 @@ my-app: image: 'httpd:2.4-alpine' environment: - SERVICE_URL_MY_APP_80: '' + SERVICE_URL_MY_APP_80: 'http://my-app-referenceapplication0001.10.0.0.1.sslip.io:80' COOLIFY_BRANCH: '"main"' COOLIFY_RESOURCE_UUID: referenceapplication0001 COOLIFY_CONTAINER_NAME: my-app-referenceapplication0001-20260102T030405 @@ -802,13 +802,13 @@ SELF_REF: null SERVICE_BASE64_64_WEB: '' SERVICE_FQDN_ADMIN: admin.example.com - SERVICE_FQDN_ADMIN_8080: null + SERVICE_FQDN_ADMIN_8080: 'admin.example.com:8080' SERVICE_FQDN_API: www.api.example.com SERVICE_FQDN_API_V2: api-v2.example.com SERVICE_FQDN_BLOG: blog.example.com SERVICE_FQDN_MY_APP: my-app.example.com SERVICE_FQDN_WEB: web.example.com - SERVICE_FQDN_WEB_3000: 'web-referenceapplication0001.10.0.0.1.sslip.io:3000' + SERVICE_FQDN_WEB_3000: 'web.example.com:3000' SERVICE_HEX_32_WEB: '' SERVICE_PASSWORD_DB: '' SERVICE_PASSWORD_NOBRACES: '' @@ -818,9 +818,9 @@ SERVICE_URL_API_V2: 'https://api-v2.example.com' SERVICE_URL_BLOG: 'https://blog.example.com/blog:2368' SERVICE_URL_MY_APP: 'https://my-app.example.com' - SERVICE_URL_MY_APP_80: null + SERVICE_URL_MY_APP_80: 'https://my-app.example.com:80' SERVICE_URL_WEB: 'https://web.example.com' - SERVICE_URL_WEB_3000: 'http://web-referenceapplication0001.10.0.0.1.sslip.io:3000' + SERVICE_URL_WEB_3000: 'https://web.example.com:3000' SERVICE_USER_DB: '' SERVICE_USER_WEB: '' WITH_DEFAULT: null @@ -833,7 +833,7 @@ args: - 'BUILD_VERSION=${BUILD_VERSION:-1.0.0}' environment: - SERVICE_URL_WEB_3000: 'http://web-referenceapplication0001.10.0.0.1.sslip.io:3000' + SERVICE_URL_WEB_3000: 'https://web.example.com:3000' LITERAL: plain-value BARE_PASSTHROUGH: '' WITH_DEFAULT: '${WITH_DEFAULT:-fallback}' @@ -1046,7 +1046,7 @@ my-app: image: 'httpd:2.4-alpine' environment: - SERVICE_URL_MY_APP_80: '' + SERVICE_URL_MY_APP_80: 'https://my-app.example.com:80' COOLIFY_BRANCH: '"main"' COOLIFY_RESOURCE_UUID: referenceapplication0001 COOLIFY_CONTAINER_NAME: my-app-referenceapplication0001-20260102T030405 @@ -1654,13 +1654,13 @@ SELF_REF: null SERVICE_BASE64_64_WEB: '' SERVICE_FQDN_ADMIN: admin.example.com - SERVICE_FQDN_ADMIN_8080: null + SERVICE_FQDN_ADMIN_8080: 'admin.example.com:8080' SERVICE_FQDN_API: www.api.example.com SERVICE_FQDN_API_V2: api-v2.example.com SERVICE_FQDN_BLOG: blog.example.com SERVICE_FQDN_MY_APP: my-app.example.com SERVICE_FQDN_WEB: web.example.com - SERVICE_FQDN_WEB_3000: 'web-referenceapplication0001.10.0.0.1.sslip.io:3000' + SERVICE_FQDN_WEB_3000: 'web.example.com:3000' SERVICE_HEX_32_WEB: '' SERVICE_PASSWORD_DB: '' SERVICE_PASSWORD_NOBRACES: '' @@ -1670,9 +1670,9 @@ SERVICE_URL_API_V2: 'https://api-v2.example.com' SERVICE_URL_BLOG: 'https://blog.example.com/blog:2368' SERVICE_URL_MY_APP: 'https://my-app.example.com' - SERVICE_URL_MY_APP_80: null + SERVICE_URL_MY_APP_80: 'https://my-app.example.com:80' SERVICE_URL_WEB: 'https://web.example.com' - SERVICE_URL_WEB_3000: 'http://web-referenceapplication0001.10.0.0.1.sslip.io:3000' + SERVICE_URL_WEB_3000: 'https://web.example.com:3000' SERVICE_USER_DB: '' SERVICE_USER_WEB: '' WITH_DEFAULT: null @@ -2516,13 +2516,13 @@ SELF_REF: null SERVICE_BASE64_64_WEB: '' SERVICE_FQDN_ADMIN: admin.example.com - SERVICE_FQDN_ADMIN_8080: null + SERVICE_FQDN_ADMIN_8080: 'admin.example.com:8080' SERVICE_FQDN_API: www.api.example.com SERVICE_FQDN_API_V2: api-v2.example.com SERVICE_FQDN_BLOG: blog.example.com SERVICE_FQDN_MY_APP: my-app.example.com SERVICE_FQDN_WEB: web.example.com - SERVICE_FQDN_WEB_3000: 'web-referenceapplication0001.10.0.0.1.sslip.io:3000' + SERVICE_FQDN_WEB_3000: 'web.example.com:3000' SERVICE_HEX_32_WEB: '' SERVICE_PASSWORD_DB: '' SERVICE_PASSWORD_NOBRACES: '' @@ -2532,9 +2532,9 @@ SERVICE_URL_API_V2: 'https://api-v2.example.com' SERVICE_URL_BLOG: 'https://blog.example.com/blog:2368' SERVICE_URL_MY_APP: 'https://my-app.example.com' - SERVICE_URL_MY_APP_80: null + SERVICE_URL_MY_APP_80: 'https://my-app.example.com:80' SERVICE_URL_WEB: 'https://web.example.com' - SERVICE_URL_WEB_3000: 'http://web-referenceapplication0001.10.0.0.1.sslip.io:3000' + SERVICE_URL_WEB_3000: 'https://web.example.com:3000' SERVICE_USER_DB: '' SERVICE_USER_WEB: '' WITH_DEFAULT: null diff --git a/tests/Fixtures/parser/expected/application.yaml b/tests/Fixtures/parser/expected/application.yaml index 0d196b8ec2..4253a8c68f 100644 --- a/tests/Fixtures/parser/expected/application.yaml +++ b/tests/Fixtures/parser/expected/application.yaml @@ -49,7 +49,7 @@ SELF_REF: null SERVICE_BASE64_64_WEB: '' SERVICE_FQDN_ADMIN: admin-referenceapplication0001.10.0.0.1.sslip.io - SERVICE_FQDN_ADMIN_8080: null + SERVICE_FQDN_ADMIN_8080: 'admin-referenceapplication0001.10.0.0.1.sslip.io:8080' SERVICE_FQDN_API: api-referenceapplication0001.10.0.0.1.sslip.io SERVICE_FQDN_BLOG: blog-referenceapplication0001.10.0.0.1.sslip.io SERVICE_FQDN_MY_APP: my-app-referenceapplication0001.10.0.0.1.sslip.io @@ -63,7 +63,7 @@ SERVICE_URL_API: 'http://api-referenceapplication0001.10.0.0.1.sslip.io' SERVICE_URL_BLOG: 'http://blog-referenceapplication0001.10.0.0.1.sslip.io/blog:2368' SERVICE_URL_MY_APP: 'http://my-app-referenceapplication0001.10.0.0.1.sslip.io' - SERVICE_URL_MY_APP_80: null + SERVICE_URL_MY_APP_80: 'http://my-app-referenceapplication0001.10.0.0.1.sslip.io:80' SERVICE_URL_WEB: 'http://web-referenceapplication0001.10.0.0.1.sslip.io' SERVICE_URL_WEB_3000: 'http://web-referenceapplication0001.10.0.0.1.sslip.io:3000' SERVICE_USER_DB: '' @@ -258,7 +258,7 @@ my-app: image: 'httpd:2.4-alpine' environment: - SERVICE_URL_MY_APP_80: '' + SERVICE_URL_MY_APP_80: 'http://my-app-referenceapplication0001.10.0.0.1.sslip.io:80' COOLIFY_BRANCH: '"main"' COOLIFY_RESOURCE_UUID: referenceapplication0001 COOLIFY_CONTAINER_NAME: my-app-referenceapplication0001-20260102T030405 @@ -742,13 +742,13 @@ SELF_REF: null SERVICE_BASE64_64_WEB: '' SERVICE_FQDN_ADMIN: admin.example.com - SERVICE_FQDN_ADMIN_8080: null + SERVICE_FQDN_ADMIN_8080: 'admin.example.com:8080' SERVICE_FQDN_API: www.api.example.com SERVICE_FQDN_API_V2: api-v2.example.com SERVICE_FQDN_BLOG: blog.example.com SERVICE_FQDN_MY_APP: my-app.example.com SERVICE_FQDN_WEB: web.example.com - SERVICE_FQDN_WEB_3000: 'web-referenceapplication0001.10.0.0.1.sslip.io:3000' + SERVICE_FQDN_WEB_3000: 'web.example.com:3000' SERVICE_HEX_32_WEB: '' SERVICE_PASSWORD_DB: '' SERVICE_PASSWORD_NOBRACES: '' @@ -758,9 +758,9 @@ SERVICE_URL_API_V2: 'https://api-v2.example.com' SERVICE_URL_BLOG: 'https://blog.example.com/blog:2368' SERVICE_URL_MY_APP: 'https://my-app.example.com' - SERVICE_URL_MY_APP_80: null + SERVICE_URL_MY_APP_80: 'https://my-app.example.com:80' SERVICE_URL_WEB: 'https://web.example.com' - SERVICE_URL_WEB_3000: 'http://web-referenceapplication0001.10.0.0.1.sslip.io:3000' + SERVICE_URL_WEB_3000: 'https://web.example.com:3000' SERVICE_USER_DB: '' SERVICE_USER_WEB: '' WITH_DEFAULT: null @@ -773,7 +773,7 @@ args: - 'BUILD_VERSION=${BUILD_VERSION:-1.0.0}' environment: - SERVICE_URL_WEB_3000: 'http://web-referenceapplication0001.10.0.0.1.sslip.io:3000' + SERVICE_URL_WEB_3000: 'https://web.example.com:3000' LITERAL: plain-value BARE_PASSTHROUGH: '' WITH_DEFAULT: '${WITH_DEFAULT:-fallback}' @@ -975,7 +975,7 @@ my-app: image: 'httpd:2.4-alpine' environment: - SERVICE_URL_MY_APP_80: '' + SERVICE_URL_MY_APP_80: 'https://my-app.example.com:80' COOLIFY_BRANCH: '"main"' COOLIFY_RESOURCE_UUID: referenceapplication0001 COOLIFY_CONTAINER_NAME: my-app-referenceapplication0001-20260102T030405 @@ -1536,13 +1536,13 @@ SELF_REF: null SERVICE_BASE64_64_WEB: '' SERVICE_FQDN_ADMIN: admin.example.com - SERVICE_FQDN_ADMIN_8080: null + SERVICE_FQDN_ADMIN_8080: 'admin.example.com:8080' SERVICE_FQDN_API: www.api.example.com SERVICE_FQDN_API_V2: api-v2.example.com SERVICE_FQDN_BLOG: blog.example.com SERVICE_FQDN_MY_APP: my-app.example.com SERVICE_FQDN_WEB: web.example.com - SERVICE_FQDN_WEB_3000: 'web-referenceapplication0001.10.0.0.1.sslip.io:3000' + SERVICE_FQDN_WEB_3000: 'web.example.com:3000' SERVICE_HEX_32_WEB: '' SERVICE_PASSWORD_DB: '' SERVICE_PASSWORD_NOBRACES: '' @@ -1552,9 +1552,9 @@ SERVICE_URL_API_V2: 'https://api-v2.example.com' SERVICE_URL_BLOG: 'https://blog.example.com/blog:2368' SERVICE_URL_MY_APP: 'https://my-app.example.com' - SERVICE_URL_MY_APP_80: null + SERVICE_URL_MY_APP_80: 'https://my-app.example.com:80' SERVICE_URL_WEB: 'https://web.example.com' - SERVICE_URL_WEB_3000: 'http://web-referenceapplication0001.10.0.0.1.sslip.io:3000' + SERVICE_URL_WEB_3000: 'https://web.example.com:3000' SERVICE_USER_DB: '' SERVICE_USER_WEB: '' WITH_DEFAULT: null @@ -2336,13 +2336,13 @@ SELF_REF: null SERVICE_BASE64_64_WEB: '' SERVICE_FQDN_ADMIN: admin.example.com - SERVICE_FQDN_ADMIN_8080: null + SERVICE_FQDN_ADMIN_8080: 'admin.example.com:8080' SERVICE_FQDN_API: www.api.example.com SERVICE_FQDN_API_V2: api-v2.example.com SERVICE_FQDN_BLOG: blog.example.com SERVICE_FQDN_MY_APP: my-app.example.com SERVICE_FQDN_WEB: web.example.com - SERVICE_FQDN_WEB_3000: 'web-referenceapplication0001.10.0.0.1.sslip.io:3000' + SERVICE_FQDN_WEB_3000: 'web.example.com:3000' SERVICE_HEX_32_WEB: '' SERVICE_PASSWORD_DB: '' SERVICE_PASSWORD_NOBRACES: '' @@ -2352,9 +2352,9 @@ SERVICE_URL_API_V2: 'https://api-v2.example.com' SERVICE_URL_BLOG: 'https://blog.example.com/blog:2368' SERVICE_URL_MY_APP: 'https://my-app.example.com' - SERVICE_URL_MY_APP_80: null + SERVICE_URL_MY_APP_80: 'https://my-app.example.com:80' SERVICE_URL_WEB: 'https://web.example.com' - SERVICE_URL_WEB_3000: 'http://web-referenceapplication0001.10.0.0.1.sslip.io:3000' + SERVICE_URL_WEB_3000: 'https://web.example.com:3000' SERVICE_USER_DB: '' SERVICE_USER_WEB: '' WITH_DEFAULT: null