From 06af9b408dc87b956b243f5b7e6beb6b6c5605e7 Mon Sep 17 00:00:00 2001 From: kwy404 Date: Sat, 26 Sep 2026 03:06:40 -0300 Subject: [PATCH] fix: substitute every ${VAR} reference when merging env files --- src/features/execution/envVarUtils.ts | 2 +- .../features/execution/envVarUtils.unit.test.ts | 13 +++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 src/test/features/execution/envVarUtils.unit.test.ts diff --git a/src/features/execution/envVarUtils.ts b/src/features/execution/envVarUtils.ts index 03c1e0ce1..9c9fab929 100644 --- a/src/features/execution/envVarUtils.ts +++ b/src/features/execution/envVarUtils.ts @@ -17,7 +17,7 @@ export function mergeEnvVariables( Object.keys(base).forEach((baseKey) => { const baseValue = base[baseKey]; if (baseValue) { - value = value?.replace(`\${${baseKey}}`, baseValue); + value = value?.split(`\${${baseKey}}`).join(baseValue); } }); env[otherKey] = value; diff --git a/src/test/features/execution/envVarUtils.unit.test.ts b/src/test/features/execution/envVarUtils.unit.test.ts new file mode 100644 index 000000000..9bc9ef5cb --- /dev/null +++ b/src/test/features/execution/envVarUtils.unit.test.ts @@ -0,0 +1,13 @@ +import * as assert from 'assert'; +import { mergeEnvVariables } from '../../../features/execution/envVarUtils'; + +suite('Env Var Utils Tests', () => { + test('mergeEnvVariables substitutes every reference to a base variable', () => { + const env = mergeEnvVariables( + { ROOT: '/home/user', SECRET: 'pa$$word' }, + { A: '${ROOT}/a:${ROOT}/b', B: '${SECRET}' }, + ); + assert.strictEqual(env.A, '/home/user/a:/home/user/b'); + assert.strictEqual(env.B, 'pa$$word'); + }); +});