Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
144 commits
Select commit Hold shift + click to select a range
bc502d2
Platform agnostic candidate; modified compiler get to use versions
EvergrowthConsulting May 26, 2025
b00bc75
Missed updating task.json for the compiler.
EvergrowthConsulting May 26, 2025
ba74b3e
Missed two more references in the task.json for the expanded function…
EvergrowthConsulting May 26, 2025
9d21846
Fix catastrophic spelling error
EvergrowthConsulting May 26, 2025
f93f599
So many typos
EvergrowthConsulting May 26, 2025
49c3cfd
Remove mistaken parameter from task.json
EvergrowthConsulting May 26, 2025
4fa8c0b
Change windows detection because Agents don't use normal Windows or s…
EvergrowthConsulting May 26, 2025
967a64b
Make directory-safe entry
EvergrowthConsulting May 26, 2025
beb9030
Add common tools function but don't fully implement yet
EvergrowthConsulting May 26, 2025
0433f19
Okay, apparently we can't have nice things because Microsoft
EvergrowthConsulting May 26, 2025
7b228e0
***** wept; there's a difference between -Name and -Path
EvergrowthConsulting May 26, 2025
c465cfe
I love platform agnositicism
EvergrowthConsulting May 26, 2025
46e685f
Deactivate targeted folder expansion; it was causing problems
EvergrowthConsulting May 26, 2025
89fe707
Misnamed variable; what next?
EvergrowthConsulting May 26, 2025
eef0ce0
I must be getting tired
EvergrowthConsulting May 26, 2025
d240f1d
Spacing on log outputs; add app.json validation exposure
EvergrowthConsulting May 26, 2025
61760f3
Remove dead platform handling attempts from selective extraction piece
EvergrowthConsulting May 26, 2025
c7afac3
Missed a piece of code
EvergrowthConsulting May 27, 2025
aee7198
Add guardrail for ALEXEPath
EvergrowthConsulting May 27, 2025
adf84a0
The guardrail didn't work?
EvergrowthConsulting May 27, 2025
f386cd3
Again, why is pathing SO HARD for powershell?
EvergrowthConsulting May 27, 2025
d67876a
Try a different resolution method?
EvergrowthConsulting May 27, 2025
ce448f0
Finding strange execution policies
EvergrowthConsulting May 27, 2025
a8d7ab6
Apparently the file was coming down but strangely
EvergrowthConsulting May 27, 2025
e965bdb
So much ambiguity when I changed away from extreme manual execution
EvergrowthConsulting May 27, 2025
230f886
Removed deprecated function; added a couple lines of debugging
EvergrowthConsulting May 27, 2025
76a4a9d
Add multiple debugging routines
EvergrowthConsulting May 27, 2025
4951c7a
Aha! A missing directory creation.
EvergrowthConsulting May 27, 2025
9abc5f0
I know too many programming languages...
EvergrowthConsulting May 27, 2025
30f14fd
More debugging - expand-archive is not working properly
EvergrowthConsulting May 27, 2025
70b50ae
Change debugging concepts for platform agnosticism
EvergrowthConsulting May 27, 2025
3786a7d
Added rename failure defense
EvergrowthConsulting May 27, 2025
fdafac6
Frikkin' typos
EvergrowthConsulting May 27, 2025
a9214ef
Fix debugging bits; improve logging; do we have a winner?
EvergrowthConsulting May 28, 2025
17bc18b
Update environment tick and documentation
EvergrowthConsulting May 28, 2025
f10bdc2
Merge pull request #14 from crazycga/change_to_api
crazycga May 28, 2025
9913b66
Add list of companies quick-hit
EvergrowthConsulting May 30, 2025
5b9fe64
Added function to get list of modules, confirm module and abstracted …
EvergrowthConsulting May 30, 2025
32d7f76
Potential working version with new tools
EvergrowthConsulting Jun 1, 2025
5154a7b
Check in change to extension to grab new items
EvergrowthConsulting Jun 2, 2025
98117da
Add _common folder to extension
EvergrowthConsulting Jun 2, 2025
5d16b29
Try moving location of source file
EvergrowthConsulting Jun 2, 2025
1403221
See if enumerating the parent helps?
EvergrowthConsulting Jun 2, 2025
ce6c402
I NEED to see the internals of this
EvergrowthConsulting Jun 2, 2025
d3a2b8e
Ugh; forgot to comment the required
EvergrowthConsulting Jun 2, 2025
f8ce796
Still troublehsooting because I don't know where the system is puttin…
EvergrowthConsulting Jun 2, 2025
f580446
Mass enumeration now
EvergrowthConsulting Jun 2, 2025
6107782
You have to embed commonTools in EACH TASK?
EvergrowthConsulting Jun 2, 2025
3b398da
Commit build script and remove dead soul from test variant
EvergrowthConsulting Jun 2, 2025
36b431c
Correct mis-referenced common tools
EvergrowthConsulting Jun 2, 2025
2dfb655
Move _build.ps1 to correct location
EvergrowthConsulting Jun 2, 2025
8aae1c1
Update mainbuild.yml
crazycga Jun 2, 2025
8a19e38
Try changing reference path on _build script
EvergrowthConsulting Jun 2, 2025
9228a02
Forgot to update task.json with extreme debugging mode switch
EvergrowthConsulting Jun 2, 2025
15597fb
Need extreme debugging
EvergrowthConsulting Jun 2, 2025
5bc71d7
Seriously debugging now
EvergrowthConsulting Jun 2, 2025
2b493fd
Correct for proper internal pathing on scripts
EvergrowthConsulting Jun 2, 2025
087faa8
Expose parseBool for subfunctions to use
EvergrowthConsulting Jun 2, 2025
a90b4d0
Forgot to add "path" module
EvergrowthConsulting Jun 2, 2025
a67def0
Missed parameter on task.json
EvergrowthConsulting Jun 2, 2025
fa8b0c2
Crashing typo; needs fixing
EvergrowthConsulting Jun 2, 2025
4938a93
Update documentation
EvergrowthConsulting Jun 3, 2025
860b1ce
Incremented version number in tasks and top-end; updated repo-level r…
EvergrowthConsulting Jun 3, 2025
41d3d20
Correct release date
EvergrowthConsulting Jun 3, 2025
99fc835
Merge pull request #19 from crazycga/incorporate_new_functions
crazycga Jun 3, 2025
7c0b09c
Correct tagging to only fire on dev-trunk and main
EvergrowthConsulting Jun 3, 2025
39e66be
Merge pull request #20 from crazycga/incorporate_new_functions
crazycga Jun 3, 2025
e37c699
Increment version in environments.json
EvergrowthConsulting Jun 3, 2025
f4771a0
Merge pull request #21 from crazycga/incorporate_new_functions
crazycga Jun 3, 2025
7f4a6df
I can't believe I missed this
EvergrowthConsulting Jun 3, 2025
5a98fde
Same typo - brave new world
EvergrowthConsulting Jun 3, 2025
203df8b
Merge pull request #22 from crazycga/incorporate_new_functions
crazycga Jun 3, 2025
5b4b1db
Merge branch 'main' into dev_trunk
crazycga Jun 3, 2025
3e5e804
Totally forgot to update environments.json for new guid preparation
EvergrowthConsulting Jun 3, 2025
939f886
Merge pull request #24 from crazycga/incorporate_new_functions
crazycga Jun 3, 2025
d7c8356
Improve logging and attempt to fix file upload
EvergrowthConsulting Jun 5, 2025
abfac03
Add latency because I think I'm outrunning the API perhaps?
EvergrowthConsulting Jun 5, 2025
1c0b120
Troubleshooting the publish routine
EvergrowthConsulting Jun 5, 2025
867e610
Still troubleshooting wait response and upload routines
EvergrowthConsulting Jun 5, 2025
66a8941
Tilt at that windmill!
EvergrowthConsulting Jun 5, 2025
e93fe40
Final candidate version for debug release
EvergrowthConsulting Jun 5, 2025
ef1d556
Error capture the new odata.etag properly
EvergrowthConsulting Jun 5, 2025
5bb15ca
Strangely the upload routine now balks at the if-match on the call to…
EvergrowthConsulting Jun 5, 2025
03e18cd
Minor corrections to timing and fixes to publish routine
EvergrowthConsulting Jun 6, 2025
bc9962f
Update documentation, etc. for new version
EvergrowthConsulting Jun 6, 2025
f81e535
Modify pipeline build to only tag release versions
EvergrowthConsulting Jun 6, 2025
1bf5664
Fix timing declaration issue
EvergrowthConsulting Jun 6, 2025
03c5799
Fix up some logging, make things a little prettier
EvergrowthConsulting Jun 6, 2025
709c941
Prettification of some logs
EvergrowthConsulting Jun 6, 2025
7f83364
Added changes to RELEASE.md
EvergrowthConsulting Jun 6, 2025
34ccec3
Clean up logging in getInstallationStatus; migrate to logger instead …
EvergrowthConsulting Jun 6, 2025
02409ba
More prettifying the logger
EvergrowthConsulting Jun 6, 2025
15000e0
Update to "new" logging standards
EvergrowthConsulting Jun 6, 2025
ee9be4a
Same thing
EvergrowthConsulting Jun 6, 2025
86acf21
Merge branch 'main' into dev_trunk
EvergrowthConsulting Jun 7, 2025
76c4229
Logging corrections after the change to the logger
EvergrowthConsulting Jun 7, 2025
1156ae8
Merge branch 'main' into dev_trunk
EvergrowthConsulting Jun 7, 2025
5b169df
First pass at refactoring Build routine to JS
EvergrowthConsulting Jun 9, 2025
a90a4bb
Dang it, forgot to add to the build script for the Build-ALPackage
EvergrowthConsulting Jun 9, 2025
305ebe4
Try an agnostic setting for build
EvergrowthConsulting Jun 9, 2025
49f08a8
Rebuild file name
EvergrowthConsulting Jun 9, 2025
a0c63d4
Lazy-load undici only on calls that require it; correct file output n…
EvergrowthConsulting Jun 9, 2025
7b8a8fc
Add new function for get-bcdependencies
EvergrowthConsulting Jun 10, 2025
e7d613d
Fix task.json for js reference
EvergrowthConsulting Jun 10, 2025
2e61a48
Add get-bcdependencies to build script for commontools
EvergrowthConsulting Jun 10, 2025
d282c52
Make command async to survive token acquisitions
EvergrowthConsulting Jun 10, 2025
587fb8e
Messed up the async call
EvergrowthConsulting Jun 10, 2025
dfba6d7
Bad call to commonTools
EvergrowthConsulting Jun 10, 2025
cf46f7c
Remove function type from usesUndici; not sure this is going to work
EvergrowthConsulting Jun 10, 2025
34260dd
Adding filename capture; locally debugged version
EvergrowthConsulting Jun 10, 2025
48ae495
Migrate VSIX acquisition to JS
EvergrowthConsulting Jun 10, 2025
588ee90
Update task.json for VSIX
EvergrowthConsulting Jun 10, 2025
d557a0c
Remove Powershell leftovers
EvergrowthConsulting Jun 10, 2025
d2d0bb3
Update RELEASE.md with quick hit before testing platform changes
EvergrowthConsulting Jun 10, 2025
154d462
Path normalization; improve logging and variable setting in Get-VSIXC…
EvergrowthConsulting Jun 10, 2025
c1c42d3
Fix the directory walking routine
EvergrowthConsulting Jun 10, 2025
5812713
Fix linux alc call
EvergrowthConsulting Jun 10, 2025
8b9b4b0
Fix path normalization in deploy
EvergrowthConsulting Jun 10, 2025
775e92e
Final documentation update; RC 0.1.8
EvergrowthConsulting Jun 10, 2025
ee76bf1
Merge pull request #29 from crazycga/refactor_to_js
crazycga Jun 10, 2025
b847655
Candidate to fix incorrect compiler issue
EvergrowthConsulting Jun 14, 2025
13b19c3
Merge pull request #32 from crazycga/correct_alpath_emission
crazycga Jun 14, 2025
a644c73
Merge branch 'main' into dev_trunk
crazycga Jun 14, 2025
ea55716
Introduce environmental enumeration for bits and pieces
EvergrowthConsulting Jun 17, 2025
dd7114c
Update vss extension metadata
EvergrowthConsulting Jun 17, 2025
178aeea
Update file emission and win32 shield non-Windows agents
EvergrowthConsulting Jun 17, 2025
32395bc
Defend docker image enumeration when no images are available
EvergrowthConsulting Jun 17, 2025
9e7dd75
Extract pwsh version to quote-safe variable
EvergrowthConsulting Jun 17, 2025
28c2218
Better defense on pwsh version
EvergrowthConsulting Jun 17, 2025
f957d90
Correct string interpolation across differing shell policies
EvergrowthConsulting Jun 17, 2025
b4bd6b3
Increment version because .... reasons, I guess.
EvergrowthConsulting Jun 17, 2025
bd9303a
Updated the wrong one with the right reason
EvergrowthConsulting Jun 17, 2025
75d8fe7
Still trying to trick the system
EvergrowthConsulting Jun 17, 2025
64b14a9
Try different quoting strategy
EvergrowthConsulting Jun 17, 2025
e813284
Further escaping hell
EvergrowthConsulting Jun 17, 2025
aeb64a9
Why screw around when you can just use ToString()?
EvergrowthConsulting Jun 17, 2025
aee0038
Still trying to make this platform agnostic
EvergrowthConsulting Jun 17, 2025
5da2f17
Clean up instance where docker images error when producing a file and…
EvergrowthConsulting Jun 17, 2025
df87b0e
Correct reference to filepath and name in function
EvergrowthConsulting Jun 17, 2025
1a08845
Typos, FTW!
EvergrowthConsulting Jun 17, 2025
68f21bd
Incorporate new error condition into documentation
EvergrowthConsulting Feb 13, 2026
b127662
Add enumerate-environment and update documentation
EvergrowthConsulting Feb 13, 2026
827d593
Merge pull request #37 from crazycga/create_new_tasks
crazycga Feb 13, 2026
980f6ee
Merge branch 'main' into dev_trunk
crazycga Feb 13, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion _tasks/_build.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,8 @@ $paths = @(
"./Publish-BCModuleToTenant",
"./Build-ALPackage",
"./Get-BCDependencies",
"./Get-VSIXCompiler"
"./Get-VSIXCompiler",
"./Enumerate-Environment"
)

foreach($path in $paths) {
Expand Down
10 changes: 9 additions & 1 deletion _tasks/environments.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"version": {
"major": 0,
"minor": 1,
"patch": 9,
"patch": 10,
"build": 0
},
"dev": {
Expand Down Expand Up @@ -38,6 +38,10 @@
"EGDeployBCModule": {
"location": "bc-tools-extension/Publish-BCModuleToTenant/task.json",
"taskGuid": "def7c0a0-0d00-4f62-ae3f-7f084561e721"
},
"EGEnumerateEnvironment": {
"location": "bc-tools-extension/Enumerate-Environment/task.json",
"taskGuid": "16821c4a-f2e7-4148-a686-2ec76cab618c"
}
}
},
Expand Down Expand Up @@ -74,6 +78,10 @@
"EGDeployBCModule": {
"location": "bc-tools-extension/Publish-BCModuleToTenant/task.json",
"taskGuid": "7315a985-6da9-4b4a-bae9-56b04fc492fd"
},
"EGEnumerateEnvironment": {
"location": "bc-tools-extension/Enumerate-Environment/task.json",
"taskGuid": "206d9815-c3dd-459f-b3c1-41e8b18dddab"
}
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,207 @@
const { execSync } = require('child_process');
const path = require('path');
const os = require('os');
const fs = require('fs');
const { PassThrough } = require('stream');
const { logger, parseBool, getToken, normalizePath } = require(path.join(__dirname, '_common', 'CommonTools.js'));

const inputFilenameAndPath = process.env.INPUT_FILEPATHANDNAME;

// this routine is intended to provide information about the agent on which it is running
//
// 1. platform
// 2. whoami
// 3. current working directory
// 4. Powershell version(s)
// 5. BCContainerHelper existence / version
// 6. Docker existence / version
// 7. Docker image list

(async () => {
let outputFilenameAndPath;

if (inputFilenameAndPath && inputFilenameAndPath.trim() !== '') {
outputFilenameAndPath = normalizePath(inputFilenameAndPath);
const pathInfo = path.parse(outputFilenameAndPath);

if (!pathInfo.base || !pathInfo.dir) {
logger.warn(`Invalid file path supplied: '${outputFilenameAndPath}'. Skipping file production.`);
outputFilenameAndPath = undefined;
}
}

logger.info('Invoking EGEnumerateEnvironment with the following parameters:');
logger.info('FilePathAndName:'.padStart(2).padEnd(30) + `${outputFilenameAndPath}`);
logger.info('');

// 0. setup
const logColWidth = 30;

// 1. platform
logger.info('[platform]:'.padEnd(logColWidth) + `${os.platform()}`);

// 2. whoami
let textOut;
try {
let whoami = execSync('whoami', { encoding: 'utf8' });
textOut = whoami.toString().trim();
if (textOut.length > 0) {
logger.info('[whoami]: '.padEnd(logColWidth) + `${textOut}`);
} else {
logger.info('[whoami]:'.padEnd(logColWidth) + 'Apparently a ghost; nothing returned');
}
} catch (err) {
logger.error(`[whoami]: Encountered an error while executing a 'whoami'`);
logger.error(`[whoami]: Error: ${err}`);
}

// 3. current working directory
logger.info('[current working directory]:'.padEnd(logColWidth) + `${process.cwd()}`);

// 4. Powershell version(s)
let psVersion;
let pwshVersion;
if (os.platform() === "win32") {
try {
psVersion = execSync(
`powershell -NoProfile -Command "$v = $PSVersionTable.PSVersion; Write-Output ('' + $v.Major + '.' + $v.Minor + '.' + $v.Build + '.' + $v.Revision)"`,
{ encoding: 'utf8' }
).trim();
logger.info('[powershell version]:'.padEnd(logColWidth) + `${psVersion}`);
} catch (err) {
logger.error(`[powershell version]: Encountered an error while executing a 'powerhsell version'`);
logger.error(`[powershell version]: Error: ${err}`);
}
} else {
psVersion = "[not installed; Linux environment]";
logger.info('[powershell version]:'.padEnd(logColWidth) + `${psVersion}`);
}

try {
const isLinux = process.platform === 'linux';

const psCommandRaw = '$PSVersionTable.PSVersion.ToString()';
const psCommand = isLinux
? psCommandRaw.replace(/(["\\$`])/g, '\\$1') // escape for bash
: psCommandRaw; // don't escape on Windows
const fullCommand = `pwsh -NoProfile -Command "${psCommand}"`;
//const quotedCommand = `"${psCommand.replace(/"/g, '\\"')}"`;
pwshVersion = execSync(fullCommand, { encoding: 'utf8' }).trim();
logger.info('[pwsh version]:'.padEnd(logColWidth) + `${pwshVersion}`);
} catch (err) {
logger.error(`[pwsh version]: Encountered an error while executing a 'pwsh version'`);
logger.error(`[pwsh version]: Error: ${err}`);
}

// 5. BCContainerHelper existence / version
let result;
let BCContainerHelperPresent = false;

if (os.platform() === "win32") {
try {
const psCommand = `$modulePath = Get-Module -ListAvailable BCContainerHelper | Select-Object -First 1 -ExpandProperty Path; if ($modulePath) { $psd1 = $modulePath -replace '\\[^\\\\]+$', '.psd1'; if (Test-Path $psd1) { $lines = Get-Content $psd1 -Raw; if ($lines -match 'ModuleVersion\\s*=\\s*[\\"\\'']?([0-9\\.]+)[\\"\\'']?') { Write-Output $matches[1]; } else { Write-Output '[version not found]'; } } else { Write-Output '[not installed]'; } } else { Write-Output '[not installed]'; }`;

result = execSync(`powershell.exe -NoProfile -Command "${psCommand.replace(/\n/g, ' ').replace(/"/g, '\\"')}"`, { encoding: 'utf8', stdio: ['pipe', 'pipe', 'pipe'] }).trim();
if (result === "") { result = '[not installed]' }
if (result && result != "") {
logger.info('[BCContainerHelper version]:'.padEnd(logColWidth) + `${result}`);
BCContainerHelperPresent = true;
}
BCContainerHelperPresent = true;
} catch (err) {
logger.error(`[BCContainerHelper]: Failed to query module: ${err.message}`);
logger.info(err);
}
} else {
result = "[not installed; Linux environment]";
logger.info('[BCContainerHelper version]:'.padEnd(logColWidth) + `${result}`);
}

// 6. Docker existence / version
let DockerPresent = false;
let DockerVersionResult;
try {
DockerResult = execSync('docker version --format "{{.Client.Version}}"', { stdio: ['pipe', 'pipe', 'pipe'] });
if (DockerResult === "") { DockerVersionResult = '[not installed]' }
else { DockerVersionResult = DockerResult.toString().trim(); }
if (DockerVersionResult && DockerVersionResult != "") {
logger.info('[dockerversion]:'.padEnd(logColWidth) + `${DockerVersionResult}`);
DockerPresent = true;
}
} catch (err) {
const msg = err.message || '';
const stderr = err.stderr?.toString() || '';

const combined = `${msg}\n${stderr}`;
const normalized = combined.toLowerCase();
if (
normalized.includes("'docker' is not recognized") || // Windows case
normalized.includes("command not found") || // Linux case
normalized.includes("no such file or directory") // fallback
) {
DockerVersionResult = '[not installed]';
if (DockerVersionResult && DockerVersionResult != "") {
logger.info('[dockerversion]:'.padEnd(logColWidth) + `${DockerVersionResult}`);
}
} else {
logger.error(`[dockerversion]: Unexpected error: ${combined}`);
}
}

// 7. Docker image list
let DockerPsObject;
if (DockerPresent) {
try {
const psResult = execSync('docker ps -a --no-trunc --format "{{json .}}"', { encoding: 'utf8', stdio: ['pipe', 'pipe', 'pipe'] });
const lines = psResult.trim().split('\n');
DockerPsObject = lines.filter(line => line && line.trim().startsWith('{') && line.trim().endsWith('}')).map(line => JSON.parse(line));

if (DockerPsObject.length > 0) {
logger.info('[dockerimage]:'.padEnd(logColWidth) + '**Name**'.padEnd(logColWidth) + '**Status**');
DockerPsObject.forEach((image, idx) => {
if (image && image.name != "") {
logger.info('[dockerimage]:'.padEnd(logColWidth) + `${image.Names}`.padEnd(logColWidth) + `${image.Status}`);
}
});
} else {
logger.info('[dockerimage]:'.padEnd(logColWidth) + '[no images]');
}
} catch (err) {
const msg = err.message || '';
const stderr = err.stderr?.toString() || '';

const combined = `${msg}\n${stderr}`;
logger.error(`[dockerimage]: Unexpected error: ${combined}`);
}
} else {
logger.info('[dockerimage]:'.padEnd(logColWidth) + '[not installed]');
}

// Deal with the file if requested (note it has already been parsed at the top of this routine)
if (outputFilenameAndPath) {

let dockerList = [];
try {
dockerList = DockerPsObject.filter(img => img && img.Names).map(img => ({ name: img.Names, status: img.Status }));
} catch {
dockerList = [];
}

let candidateFile = {
platform: os.platform(),
whoami: textOut,
workingDirectory: process.cwd(),
powershellVersion: psVersion,
pscoreVersion: pwshVersion,
bcContainerVersion: result,
dockerVersion: DockerVersionResult,
dockerImages: dockerList
}

let candidateFileString = JSON.stringify(candidateFile);
fs.writeFileSync(outputFilenameAndPath, candidateFileString);

logger.info('');
logger.info(`Produced file at: ${outputFilenameAndPath}`);
}
})();
41 changes: 41 additions & 0 deletions bc-tools-extension/Enumerate-Environment/task.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
{
"id": "0d4e6693-bdcb-47c0-a373-67a34549da07",
"name": "EGEnumerateEnvironment",
"friendlyName": "Enumerate compiling environment",
"description": "Provides information about the pipeline environment in the context of the agent.",
"helpMarkDown": "Please open a GitHub issue at https://github.com/crazycga/bcdevopsextension/issues for queries or support.",
"category": "Build",
"author": "Evergrowth Consulting",
"version": {
"Major": 0,
"Minor": 1,
"Patch": 5
},
"instanceNameFormat": "Enumerate compiling environment",
"inputs": [
{
"name": "ProduceFile",
"type": "boolean",
"label": "Produce file",
"defaultValue": false,
"required": false,
"helpMarkDown": "Specifies whether or not to produce an output file as one of the artifacts."
},
{
"name": "FilePathAndName",
"type": "string",
"label": "Output file path and name",
"defaultValue": "$(Build.ArtifactStagingDirectory)/environment.$(System.StageName).$(Agent.JobName).$(Build.BuildId).json",
"required": false,
"helpMarkDown": "The output path and name of the output file if specified; default '$(Build.ArtifactStagingDirectory)/environment.$(System.StageName).$(Agent.JobName).$(Build.BuildId).json'"
}
],
"execution": {
"Node16": {
"target": "function_Enumerate-Environment.js"
},
"Node20_1": {
"target": "function_Enumerate-Environment.js"
}
}
}
Loading
Loading