mirror of
https://github.com/tiennm99/coolify.git
synced 2026-04-18 15:20:40 +00:00
fix: handle map-style environment variables in updateCompose
The updateCompose() function now correctly detects SERVICE_URL_* and SERVICE_FQDN_* variables regardless of whether they are defined in YAML list-style or map-style format. Previously, the code only worked with list-style environment definitions: ```yaml environment: - SERVICE_URL_APP_3000 ``` Now it also handles map-style definitions: ```yaml environment: SERVICE_URL_TRIGGER_3000: "" SERVICE_FQDN_DB: localhost ``` The fix distinguishes between the two formats by checking if the array key is numeric (list-style) or a string (map-style), then extracts the variable name from the appropriate location. Added 5 comprehensive unit tests covering: - Map-style environment format detection - Multiple map-style variables - References vs declarations in map-style - Abbreviated service names with map-style - Verification of dual-format handling This fixes variable detection for service templates like trigger.yaml, langfuse.yaml, and paymenter.yaml that use map-style format. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -123,16 +123,23 @@ function updateCompose(ServiceApplication|ServiceDatabase $resource)
|
||||
$environment = data_get($serviceConfig, 'environment', []);
|
||||
$templateVariableNames = [];
|
||||
|
||||
foreach ($environment as $envVar) {
|
||||
if (is_string($envVar)) {
|
||||
foreach ($environment as $key => $value) {
|
||||
if (is_int($key) && is_string($value)) {
|
||||
// List-style: "- SERVICE_URL_APP_3000" or "- SERVICE_URL_APP_3000=value"
|
||||
// Extract variable name (before '=' if present)
|
||||
$envVarName = str($envVar)->before('=')->trim();
|
||||
$envVarName = str($value)->before('=')->trim();
|
||||
// Only include if it's a direct declaration (not a reference like ${VAR})
|
||||
// Direct declarations look like: SERVICE_URL_APP or SERVICE_URL_APP_3000
|
||||
// References look like: NEXT_PUBLIC_URL=${SERVICE_URL_APP}
|
||||
if ($envVarName->startsWith('SERVICE_FQDN_') || $envVarName->startsWith('SERVICE_URL_')) {
|
||||
$templateVariableNames[] = $envVarName->value();
|
||||
}
|
||||
} elseif (is_string($key)) {
|
||||
// Map-style: "SERVICE_URL_APP_3000: value" or "SERVICE_FQDN_DB: localhost"
|
||||
$envVarName = str($key);
|
||||
if ($envVarName->startsWith('SERVICE_FQDN_') || $envVarName->startsWith('SERVICE_URL_')) {
|
||||
$templateVariableNames[] = $envVarName->value();
|
||||
}
|
||||
}
|
||||
// DO NOT extract variables that are only referenced with ${VAR_NAME} syntax
|
||||
// Those belong to other services and will be updated when THOSE services are updated
|
||||
|
||||
Reference in New Issue
Block a user