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'); + }); +});