Skip to content

Commit

Permalink
v5: add useAdditionalVariablesOnly parameter
Browse files Browse the repository at this point in the history
  • Loading branch information
qetza committed Oct 29, 2024
1 parent a820123 commit 78a6af1
Show file tree
Hide file tree
Showing 9 changed files with 93 additions and 7 deletions.
3 changes: 3 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,9 @@
Task 6.1.0
- Add _useAdditionalVariablesOnly_ parameter ([#29](https://github.com/qetza/replacetokens-task/issues/60)).

Task 5.4.0
- Add _useAdditionalVariablesOnly_ parameter ([#29](https://github.com/qetza/replacetokens-task/issues/60)).

## 5.0.8
- Add links in README to migration documentation.

Expand Down
3 changes: 3 additions & 0 deletions tasks/ReplaceTokensV5/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
# Changelog
## 5.4.0
- Add _useAdditionalVariablesOnly_ parameter ([#29](https://github.com/qetza/replacetokens-task/issues/60)).

## 5.3.3
- Fix telemetry account hash.

Expand Down
8 changes: 5 additions & 3 deletions tasks/ReplaceTokensV5/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ interface Options {
readonly enableRecursion: boolean;
readonly useLegacyEmptyFeature: boolean;
readonly useDefaultValue: boolean;
readonly useAdditionalVariablesOnly: boolean;
}

interface Rule {
Expand Down Expand Up @@ -256,8 +257,7 @@ var replaceTokensInString = function (
if (options.enableRecursion && names.includes(name)) throw new Error("recursion cycle with token '" + name + "'.");

// replace value
let value: string = tl.getVariable(name);
if (name in externalVariables) value = externalVariables[name];
let value: string = name in externalVariables || options.useAdditionalVariablesOnly ? externalVariables[name] : tl.getVariable(name);

let usedDefaultValue: boolean = false;
if (
Expand Down Expand Up @@ -549,7 +549,8 @@ async function run() {
enableTransforms: tl.getBoolInput('enableTransforms', false),
enableRecursion: tl.getBoolInput('enableRecursion', false),
useLegacyEmptyFeature: tl.getBoolInput('useLegacyEmptyFeature', false),
useDefaultValue: tl.getBoolInput('useDefaultValue', false)
useDefaultValue: tl.getBoolInput('useDefaultValue', false),
useAdditionalVariablesOnly: tl.getBoolInput('useAdditionalVariablesOnly', false)
};
const transformPrefix: string = tl.getInput('transformPrefix', false) || '(';
const transformSuffix: string = tl.getInput('transformSuffix', false) || ')';
Expand Down Expand Up @@ -739,6 +740,7 @@ async function run() {
telemetryEvent.enableRecursion = options.enableRecursion;
telemetryEvent.useLegacyEmptyFeature = options.useLegacyEmptyFeature;
telemetryEvent.useDefaultValue = options.useDefaultValue;
telemetryEvent.useAdditionalVariablesOnly = options.useAdditionalVariablesOnly;

// process files
rules.forEach(rule => {
Expand Down
13 changes: 11 additions & 2 deletions tasks/ReplaceTokensV5/task.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@
"author": "Guillaume ROUCHON",
"version": {
"Major": 5,
"Minor": 3,
"Patch": 3
"Minor": 4,
"Patch": 0
},
"releaseNotes": "Migrate to Node10 handler (breaking change).<br/>Add Node16 handler.",
"instanceNameFormat": "Replace tokens in $(targetFiles)",
Expand Down Expand Up @@ -251,6 +251,15 @@
"required": false,
"helpMarkDown": "The separtor to use in variable names for nested objects in inline variables or variable files.<br/>Example: {'My':{'Value':'Hello World!'}} will create a variable 'My.Value' with the value 'Hello World!'"
},
{
"name": "useAdditionalVariablesOnly",
"type": "boolean",
"label": "Use only file and inline variables",
"defaultValue": "false",
"groupName": "variables",
"required": false,
"helpMarkDown": "Use only variables declared in variable files and inline variables."
},
{
"name": "enableRecursion",
"type": "boolean",
Expand Down
1 change: 1 addition & 0 deletions tasks/ReplaceTokensV5/telemetry.ts
Original file line number Diff line number Diff line change
Expand Up @@ -125,4 +125,5 @@ export class TelemetryEvent {
enableRecursion: boolean;
useLegacyEmptyFeature: boolean;
useDefaultValue: boolean;
useAdditionalVariablesOnly: boolean;
}
25 changes: 24 additions & 1 deletion tasks/ReplaceTokensV5/tests/L0.ts
Original file line number Diff line number Diff line change
Expand Up @@ -191,7 +191,7 @@ describe('ReplaceTokens v5 L0 suite', function () {

tr.stdout.should.include('telemetry sent');
tr.stdout.should.match(
/\[\{"account":"494d0aad9d06c4ddb51d5300620122ce55366a9382b3cc2835ed5f0e2e67b4d0","pipeline":"b98ed03d3eec376dcc015365c1a944e3ebbcc33d30e3261af3f4e4abb107aa82","host":"server","os":"Windows","actionOnMissing":"warn","encoding":"auto","keepToken":false,"pattern":"#\\\\{\\\\s\*\(\(\?:\(\?!#\\\\{\)\(\?!\\\\s\*\\\\}#\)\.\)\*\)\\\\s\*\\\\}#","result":"success","rules":1,"rulesWithInputWildcard":0,"rulesWithNegativePattern":0,"rulesWithOutputPattern":0,"tokenPrefix":"#{","tokenSuffix":"}#","variableFiles":0,"verbosity":"normal","writeBOM":true,"useLegacyPattern":false,"enableTransforms":false,"transformPrefix":"\(","transformSuffix":"\)","transformPattern":"\\\\s\*\(\.\*\)\\\\\(\\\\s\*\(\(\?:\(\?!\\\\\(\)\(\?!\\\\s\*\\\\\)\)\.\)\*\)\\\\s\*\\\\\)\\\\s\*","defaultValue":"","tokenPattern":"default","actionOnNoFiles":"continue","inlineVariables":0,"enableRecursion":false,"useLegacyEmptyFeature":false,"useDefaultValue":false,"duration":\d+(?:\.\d+)?,"tokenReplaced":1,"tokenFound":1,"defaultValueReplaced":0,"fileProcessed":1,"transformExecuted":0,"eventType":"TokensReplaced","application":"replacetokens-task","version":"5.0.0"}]/
/\[\{"account":"494d0aad9d06c4ddb51d5300620122ce55366a9382b3cc2835ed5f0e2e67b4d0","pipeline":"b98ed03d3eec376dcc015365c1a944e3ebbcc33d30e3261af3f4e4abb107aa82","host":"server","os":"Windows","actionOnMissing":"warn","encoding":"auto","keepToken":false,"pattern":"#\\\\{\\\\s\*\(\(\?:\(\?!#\\\\{\)\(\?!\\\\s\*\\\\}#\)\.\)\*\)\\\\s\*\\\\}#","result":"success","rules":1,"rulesWithInputWildcard":0,"rulesWithNegativePattern":0,"rulesWithOutputPattern":0,"tokenPrefix":"#{","tokenSuffix":"}#","variableFiles":0,"verbosity":"normal","writeBOM":true,"useLegacyPattern":false,"enableTransforms":false,"transformPrefix":"\(","transformSuffix":"\)","transformPattern":"\\\\s\*\(\.\*\)\\\\\(\\\\s\*\(\(\?:\(\?!\\\\\(\)\(\?!\\\\s\*\\\\\)\)\.\)\*\)\\\\s\*\\\\\)\\\\s\*","defaultValue":"","tokenPattern":"default","actionOnNoFiles":"continue","inlineVariables":0,"enableRecursion":false,"useLegacyEmptyFeature":false,"useDefaultValue":false,"useAdditionalVariablesOnly":false,"duration":\d+(?:\.\d+)?,"tokenReplaced":1,"tokenFound":1,"defaultValueReplaced":0,"fileProcessed":1,"transformExecuted":0,"eventType":"TokensReplaced","application":"replacetokens-task","version":"5.0.0"}]/
);
},
tr,
Expand Down Expand Up @@ -1583,5 +1583,28 @@ describe('ReplaceTokens v5 L0 suite', function () {
done
);
});

it('should replace only with file or inline variables when specified', function (done: Mocha.Done) {
// arrange
let tp = path.join(__dirname, 'externalVariables', 'L0_UseAdditionalVariablesOnly.js');
let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);

process.env['__inputpath__'] = copyData('variables.json', 'useonlyexternalvariables.json');
process.env['__variablespath__'] = path.join(data, 'externalvariables1.json');

// act
tr.run();

// assert
runValidation(
() => {
tr.succeeded.should.equal(true, 'task succeeded');

assertFilesEqual(process.env['__inputpath__'], path.join(data, 'variables.useadditionalvariablesonly.expected.json'), 'replaced output');
},
tr,
done
);
});
});
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"var1": "var1_value",
"var2": ""
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
import ma = require('azure-pipelines-task-lib/mock-answer');
import tmrm = require('azure-pipelines-task-lib/mock-run');
import path = require('path');

const taskPath = path.join(__dirname, '..', '..', 'index.js');
const tmr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath);

// variables
process.env['VAR1'] = 'variables';
process.env['VAR2'] = 'variables';

// inputs
tmr.setInput('enableTelemetry', 'false');
tmr.setInput('targetFiles', 'input.json');
tmr.setInput('writeBOM', 'true');
tmr.setInput('variableFiles', 'variables.ext');
tmr.setInput('useAdditionalVariablesOnly', 'true');

// sdk answers
let answers = {
checkPath: {},
findMatch: {
'input.json': [process.env['__inputpath__']],
'variables.ext': [process.env['__variablespath__']]
},
stats: {},
exist: {}
};
answers['stats'][process.env['__inputpath__']] = {
isDirectory: false
};
answers['stats'][process.env['__variablespath__']] = {
isDirectory: false
};
answers['exist'][process.env['__inputpath__']] = true;
answers['exist'][process.env['__variablespath__']] = true;

tmr.setAnswers(answers);

// act
tmr.run();
2 changes: 1 addition & 1 deletion tasks/ReplaceTokensV6/task.json
Original file line number Diff line number Diff line change
Expand Up @@ -140,7 +140,7 @@
"defaultValue": false,
"visibleRule": "additionalVariables != \"\"",
"label": "Use only additional variables",
"helpMarkDown": "Use only variables declared in additionalVariables. Default: false"
"helpMarkDown": "Use only variables declared in additional variables. Default: false"
},
{
"name": "escapeType",
Expand Down

0 comments on commit 78a6af1

Please sign in to comment.