From e1f8b4a7a937a8700ec0fac8b7e2b1b26c33bad1 Mon Sep 17 00:00:00 2001 From: Grzegorz Gurgul Date: Wed, 15 Jan 2025 10:35:23 +0100 Subject: [PATCH 1/6] Initial changes --- BuildConfigGen/Program.cs | 85 +++++++++++++++++-- BuildConfigGen/Properties/launchSettings.json | 8 ++ 2 files changed, 87 insertions(+), 6 deletions(-) diff --git a/BuildConfigGen/Program.cs b/BuildConfigGen/Program.cs index a0322df45a9..ab844d33b11 100644 --- a/BuildConfigGen/Program.cs +++ b/BuildConfigGen/Program.cs @@ -69,12 +69,22 @@ public record ConfigRecord(string name, string constMappingKey, bool isDefault, /// /// When set to the local pipeline agent directory, this tool will produce tasks in debug mode with the corresponding visual studio launch configurations that can be used to attach to built tasks running on this agent /// Include LocalPackagesBuildConfig - static void Main(string? task = null, string? configs = null, int? currentSprint = null, bool writeUpdates = false, bool allTasks = false, bool getTaskVersionTable = false, string? debugAgentDir = null, bool includeLocalPackagesBuildConfig = false) + /// If true, the semver "build" (suffix) will be generated for each task configuration produced, but all tasks configurations will have the same version (for example '1.2.3-node20' and 1.2.3-wif). The default configuration gets no build suffix (e.g. 1.2.3). + static void Main( + string? task = null, + string? configs = null, + int? currentSprint = null, + bool writeUpdates = false, + bool allTasks = false, + bool getTaskVersionTable = false, + string? debugAgentDir = null, + bool includeLocalPackagesBuildConfig = false, + bool useSemverBuildConfig = false) { try { ensureUpdateModeVerifier = new EnsureUpdateModeVerifier(!writeUpdates); - MainInner(task, configs, currentSprint, writeUpdates, allTasks, getTaskVersionTable, debugAgentDir, includeLocalPackagesBuildConfig); + MainInner(task, configs, currentSprint, writeUpdates, allTasks, getTaskVersionTable, debugAgentDir, includeLocalPackagesBuildConfig, useSemverBuildConfig); } catch (Exception e2) { @@ -96,7 +106,16 @@ static void Main(string? task = null, string? configs = null, int? currentSprint } } - private static void MainInner(string? task, string? configs, int? currentSprintNullable, bool writeUpdates, bool allTasks, bool getTaskVersionTable, string? debugAgentDir, bool includeLocalPackagesBuildConfig) + private static void MainInner( + string? task, + string? configs, + int? currentSprintNullable, + bool writeUpdates, + bool allTasks, + bool getTaskVersionTable, + string? debugAgentDir, + bool includeLocalPackagesBuildConfig, + bool useSemverBuildConfig) { if (allTasks) { @@ -290,7 +309,18 @@ private static void MainInner(string? task, string? configs, int? currentSprintN { IEnumerable configsList = FilterConfigsForTask(configs, t); - MainUpdateTask(taskVersionInfo[t.Value.Name], t.Value.Name, configsList, writeUpdates, currentSprint, debugConfGen, includeLocalPackagesBuildConfig, hasGlobalVersion: globalVersion is not null, generatedFolder: generatedFolder, altGeneratedFolder: altGeneratedFolder); + MainUpdateTask( + taskVersionInfo[t.Value.Name], + t.Value.Name, + configsList, + writeUpdates, + currentSprint, + debugConfGen, + includeLocalPackagesBuildConfig, + hasGlobalVersion: globalVersion is not null, + generatedFolder: generatedFolder, + altGeneratedFolder: altGeneratedFolder, + useSemverBuildConfig: useSemverBuildConfig); } debugConfGen.WriteLaunchConfigurations(); @@ -514,7 +544,8 @@ private static void MainUpdateTask( bool includeLocalPackagesBuildConfig, bool hasGlobalVersion, string generatedFolder, - string altGeneratedFolder) + string altGeneratedFolder, + bool useSemverBuildConfig) { if (string.IsNullOrEmpty(task)) { @@ -557,6 +588,9 @@ private static void MainUpdateTask( // we need to ensure merges occur first, as the changes may cascade to other configs (e.g. Default), if there are multiple var targetConfigsWithMergeToBaseOrderedFirst = targetConfigs.OrderBy(x => x.mergeToBase ? 0 : 1); + var defaultConfig = targetConfigs.FirstOrDefault(x => x.isDefault) + ?? throw new ArgumentException($"There is no default config for task {task} which is required if {nameof(useSemverBuildConfig)} is true"); + foreach (var config in targetConfigsWithMergeToBaseOrderedFirst) { if (config.useGlobalVersion && !includeLocalPackagesBuildConfig) @@ -661,7 +695,12 @@ private static void MainUpdateTask( WriteWIFInputTaskJson(taskOutput, config, "task.json", isLoc: false); WriteWIFInputTaskJson(taskOutput, config, "task.loc.json", isLoc: true); - if (!config.mergeToBase) + if (useSemverBuildConfig) + { + WriteTaskJsonWithSemverConfig(taskOutput, taskVersionState, defaultConfig, config, "task.json", existingLocalPackageVersion); + WriteTaskJsonWithSemverConfig(taskOutput, taskVersionState, defaultConfig, config, "task.loc.json", existingLocalPackageVersion); + } + else if (!config.mergeToBase) { WriteTaskJson(taskOutput, taskVersionState, config, "task.json", existingLocalPackageVersion); WriteTaskJson(taskOutput, taskVersionState, config, "task.loc.json", existingLocalPackageVersion); @@ -1032,6 +1071,40 @@ private static void WriteTaskJson(string taskPath, TaskStateStruct taskState, Co ensureUpdateModeVerifier!.WriteAllText(outputTaskPath, outputTaskNode.ToJsonString(jso), suppressValidationErrorIfTargetPathDoesntExist: false); } + /// + /// This uses the same major.minor.patch for all build configuration tasks, but the "build" suffix of semver is different, and directly corresponds to the name. + /// We no longer populate the '_buildConfigMapping' property of the task.json, since server won't expect this property to be set. + /// + /// + /// + /// + /// + /// + /// + private static void WriteTaskJsonWithSemverConfig(string taskPath, + TaskStateStruct taskState, + Config.ConfigRecord defaultConfig, + Config.ConfigRecord config, + string fileName, + string? existingLocalPackageVersion) + { + string outputTaskPath = Path.Combine(taskPath, fileName); + JsonNode outputTaskNode = JsonNode.Parse(ensureUpdateModeVerifier!.FileReadAllText(outputTaskPath))!; + + outputTaskNode["version"]!["Major"] = taskState.configTaskVersionMapping[defaultConfig].Major; + outputTaskNode["version"]!["Minor"] = taskState.configTaskVersionMapping[defaultConfig].Minor; + outputTaskNode["version"]!["Patch"] = taskState.configTaskVersionMapping[defaultConfig].Patch; + + if (defaultConfig != config) + { + outputTaskNode["version"]!["Build"] = config.name; + } + + var outputTaskNodeObject = outputTaskNode.AsObject(); + outputTaskNodeObject.Remove("_buildConfigMapping"); + ensureUpdateModeVerifier!.WriteAllText(outputTaskPath, outputTaskNode.ToJsonString(jso), suppressValidationErrorIfTargetPathDoesntExist: false); + } + private static void WriteTaskJsonNodeExecutionHandler(string taskPath, Config.ConfigRecord config, string fileName) { string outputTaskPath = Path.Combine(taskPath, fileName); diff --git a/BuildConfigGen/Properties/launchSettings.json b/BuildConfigGen/Properties/launchSettings.json index e60e858ac2a..ecc5db61b1f 100644 --- a/BuildConfigGen/Properties/launchSettings.json +++ b/BuildConfigGen/Properties/launchSettings.json @@ -3,6 +3,14 @@ "BuildConfigGen": { "commandName": "Project", "commandLineArgs": "--all-tasks --write-updates" + }, + "BuildConfigGenSingle": { + "commandName": "Project", + "commandLineArgs": "--task PowerShellV2 --configs=Node20 --write-updates" + }, + "BuildConfigGenSingleNew": { + "commandName": "Project", + "commandLineArgs": "--use-semver-build-config --task PowerShellV2 --configs=Node20 --write-updates" } } } \ No newline at end of file From c238b256f319444be0256f864145c6f30849d9bb Mon Sep 17 00:00:00 2001 From: Grzegorz Gurgul Date: Mon, 3 Feb 2025 19:43:35 +0100 Subject: [PATCH 2/6] Generator --- BuildConfigGen/Program.cs | 31 ++++++- BuildConfigGen/TaskVersion.cs | 153 +++++++++++++++++++------------- BuildConfigGen/VersionParser.cs | 130 ++++++++++++++++++++++----- 3 files changed, 231 insertions(+), 83 deletions(-) diff --git a/BuildConfigGen/Program.cs b/BuildConfigGen/Program.cs index ab844d33b11..60c7cde2428 100644 --- a/BuildConfigGen/Program.cs +++ b/BuildConfigGen/Program.cs @@ -29,7 +29,7 @@ internal static class Config { public static readonly string[] ExtensionsToPreprocess = new[] { ".ts", ".json" }; - public record ConfigRecord(string name, string constMappingKey, bool isDefault, bool isNode, string nodePackageVersion, bool isWif, string nodeHandler, string preprocessorVariableName, bool enableBuildConfigOverrides, bool deprecated, bool shouldUpdateTypescript, bool writeNpmrc, string? overriddenDirectoryName = null, bool shouldUpdateLocalPkgs = false, bool useGlobalVersion = false, bool useAltGeneratedPath = false, bool mergeToBase = false); + public record ConfigRecord(string name, string constMappingKey, bool isDefault, bool isNode, string nodePackageVersion, bool isWif, string nodeHandler, string preprocessorVariableName, bool enableBuildConfigOverrides, bool deprecated, bool shouldUpdateTypescript, bool writeNpmrc, string? overriddenDirectoryName = null, bool shouldUpdateLocalPkgs = false, bool useGlobalVersion = false, bool useAltGeneratedPath = false, bool mergeToBase = false, bool abTaskReleases = true); public static readonly ConfigRecord Default = new ConfigRecord(name: nameof(Default), constMappingKey: "Default", isDefault: true, isNode: false, nodePackageVersion: "", isWif: false, nodeHandler: "", preprocessorVariableName: "DEFAULT", enableBuildConfigOverrides: false, deprecated: false, shouldUpdateTypescript: false, writeNpmrc: false); public static readonly ConfigRecord Node16 = new ConfigRecord(name: nameof(Node16), constMappingKey: "Node16-219", isDefault: false, isNode: true, nodePackageVersion: "^16.11.39", isWif: false, nodeHandler: "Node16", preprocessorVariableName: "NODE16", enableBuildConfigOverrides: true, deprecated: true, shouldUpdateTypescript: false, writeNpmrc: false); @@ -1102,6 +1102,28 @@ private static void WriteTaskJsonWithSemverConfig(string taskPath, var outputTaskNodeObject = outputTaskNode.AsObject(); outputTaskNodeObject.Remove("_buildConfigMapping"); + + bool anyVersionsUpdatedExceptForGlobal = taskState.versionsUpdated.Where(x => !x.useGlobalVersion).Any(); + + JsonObject configMapping = new JsonObject(); + var configTaskVersionMappingSortedByConfig = taskState.configTaskVersionMapping.OrderBy(x => x.Key.name); + foreach (var cfg in configTaskVersionMappingSortedByConfig) + { + if (!config.useGlobalVersion && cfg.Key.useGlobalVersion && !anyVersionsUpdatedExceptForGlobal) + { + if (existingLocalPackageVersion != null) + { + configMapping.Add(new(cfg.Key.constMappingKey, existingLocalPackageVersion)); + } + } + else + { + configMapping.Add(new(cfg.Key.constMappingKey, cfg.Value.ToString())); + } + } + + outputTaskNode.AsObject().Add("_buildConfigMapping", configMapping); + ensureUpdateModeVerifier!.WriteAllText(outputTaskPath, outputTaskNode.ToJsonString(jso), suppressValidationErrorIfTargetPathDoesntExist: false); } @@ -1498,6 +1520,13 @@ private static void UpdateVersionsForTask(string task, TaskStateStruct taskState } while (taskState.configTaskVersionMapping.Values.Contains(targetVersion)); + if (config.abTaskReleases) + { + // In the first stage of refactoring, we keep different version numbers to retain the ability to rollback. + // In the second stage of refactoring, we are going to use the same version, which is going to significantly reduce complexity of all this. + targetVersion.Build = config.constMappingKey; + } + taskState.configTaskVersionMapping.Add(config, targetVersion); if (!taskState.versionsUpdated.Contains(config)) diff --git a/BuildConfigGen/TaskVersion.cs b/BuildConfigGen/TaskVersion.cs index bf34a98e675..461621b7df7 100644 --- a/BuildConfigGen/TaskVersion.cs +++ b/BuildConfigGen/TaskVersion.cs @@ -1,65 +1,80 @@ -using System; -using System.Globalization; +using System.Globalization; +using System.Text; -internal class TaskVersion : IComparable, IEquatable +public class TaskVersion : IComparable, IEquatable { - public TaskVersion(String version) + public TaskVersion() { - Int32 major, minor, patch; - String? semanticVersion; + } + + public TaskVersion(string version) + { + VersionParser.ParseVersion( + version, + out int major, + out int minor, + out int patch, + out string? preRelease, + out string? build); - VersionParser.ParseVersion(version, out major, out minor, out patch, out semanticVersion); Major = major; Minor = minor; Patch = patch; + Build = build; - if (semanticVersion != null) + if (string.Equals(preRelease, TestBuildVersion, StringComparison.OrdinalIgnoreCase)) + { + // For backwards compatibility + IsTest = true; + } + else if (!string.IsNullOrEmpty(preRelease)) { - if (semanticVersion.Equals("test", StringComparison.OrdinalIgnoreCase)) - { - IsTest = true; - } - else - { - throw new ArgumentException("semVer"); - } + // This condition is there to prevent backwards compatibility problems if we have to roll this change back. + // We are not going to relax the condition until the rollout is successful. + throw new ArgumentException("semVer"); } } + public TaskVersion(int major, int minor, int overidePatch) + { + Major = major; + Minor = minor; + Patch = overidePatch; + } private TaskVersion(TaskVersion taskVersionToClone) { - this.IsTest = taskVersionToClone.IsTest; - this.Major = taskVersionToClone.Major; - this.Minor = taskVersionToClone.Minor; - this.Patch = taskVersionToClone.Patch; + Major = taskVersionToClone.Major; + Minor = taskVersionToClone.Minor; + Patch = taskVersionToClone.Patch; + Build = taskVersionToClone.Build; + IsTest = taskVersionToClone.IsTest; } - public TaskVersion(int major, int minor, int overidePatch) + public int Major { - Major = major; - Minor = minor; - Patch = overidePatch; + get; + set; } - public Int32 Major + public int Minor { get; set; } - public Int32 Minor + public int Patch { get; set; } - public Int32 Patch + public string? Build { get; set; } - public Boolean IsTest + public bool IsTest { get; set; @@ -90,56 +105,65 @@ public static implicit operator String(TaskVersion version) return version.ToString(); } - public override String ToString() + internal string MinorPatchToString() { String suffix = String.Empty; if (IsTest) { - suffix = "-test"; + throw new NotImplementedException(); } - return String.Format(CultureInfo.InvariantCulture, "{0}.{1}.{2}{3}", Major, Minor, Patch, suffix); + return String.Format(CultureInfo.InvariantCulture, "{1}.{2}{3}", Major, Minor, Patch, suffix); } - - internal string MinorPatchToString() + public override string ToString() { - String suffix = String.Empty; - if (IsTest) + StringBuilder sb = new StringBuilder() + .Append(Major).Append('.').Append(Minor).Append('.').Append(Patch); + + if (!string.IsNullOrEmpty(Build)) { - throw new NotImplementedException(); + sb = sb.Append('+').Append(Build); } - return String.Format(CultureInfo.InvariantCulture, "{1}.{2}{3}", Major, Minor, Patch, suffix); + return sb.ToString(); } - public override int GetHashCode() - { - return this.ToString().GetHashCode(); - } + public override int GetHashCode() => ToString().GetHashCode(); - public Int32 CompareTo(TaskVersion? other) + public int CompareTo(TaskVersion? other) { if (other is null) { - throw new ArgumentNullException("other"); + throw new ArgumentNullException(nameof(other)); + } + + int rc = Major.CompareTo(other.Major); + if (rc != 0) + { + return rc; + } + + rc = Minor.CompareTo(other.Minor); + if (rc != 0) + { + return rc; } - Int32 rc = Major.CompareTo(other.Major); - if (rc == 0) + rc = Patch.CompareTo(other.Patch); + if (rc != 0) { - rc = Minor.CompareTo(other.Minor); - if (rc == 0) - { - rc = Patch.CompareTo(other.Patch); - if (rc == 0 && this.IsTest != other.IsTest) - { - rc = this.IsTest ? -1 : 1; - } - } + return rc; } - return rc; + if (rc != 0) + { + return rc; + } + + return string.IsNullOrEmpty(Build) && !string.IsNullOrEmpty(other.Build) ? 1 + : !string.IsNullOrEmpty(Build) && string.IsNullOrEmpty(other.Build) ? -1 + : 0; // build versions are incomparable, but the default should always go first } public Boolean Equals(TaskVersion? other) @@ -149,7 +173,11 @@ public Boolean Equals(TaskVersion? other) return false; } - return this.CompareTo(other) == 0; + return Major == other.Major + && Minor == other.Minor + && Patch == other.Patch + && IsTest == other.IsTest + && string.Equals(Build, other.Build, StringComparison.Ordinal); } public override bool Equals(object? obj) @@ -167,7 +195,7 @@ public override bool Equals(object? obj) return v1.Equals(v2); } - public static Boolean operator !=(TaskVersion v1, TaskVersion v2) + public static bool operator !=(TaskVersion v1, TaskVersion v2) { if (v1 is null) { @@ -177,32 +205,33 @@ public override bool Equals(object? obj) return !v1.Equals(v2); } - public static Boolean operator <(TaskVersion v1, TaskVersion v2) + public static bool operator <(TaskVersion v1, TaskVersion v2) { ArgumentUtility.CheckForNull(v1, nameof(v1)); ArgumentUtility.CheckForNull(v2, nameof(v2)); return v1.CompareTo(v2) < 0; } - public static Boolean operator >(TaskVersion v1, TaskVersion v2) + public static bool operator >(TaskVersion v1, TaskVersion v2) { ArgumentUtility.CheckForNull(v1, nameof(v1)); ArgumentUtility.CheckForNull(v2, nameof(v2)); return v1.CompareTo(v2) > 0; } - public static Boolean operator <=(TaskVersion v1, TaskVersion v2) + public static bool operator <=(TaskVersion v1, TaskVersion v2) { ArgumentUtility.CheckForNull(v1, nameof(v1)); ArgumentUtility.CheckForNull(v2, nameof(v2)); return v1.CompareTo(v2) <= 0; } - public static Boolean operator >=(TaskVersion v1, TaskVersion v2) + public static bool operator >=(TaskVersion v1, TaskVersion v2) { ArgumentUtility.CheckForNull(v1, nameof(v1)); ArgumentUtility.CheckForNull(v2, nameof(v2)); return v1.CompareTo(v2) >= 0; } -} + public const string TestBuildVersion = "test"; +} diff --git a/BuildConfigGen/VersionParser.cs b/BuildConfigGen/VersionParser.cs index 46f517a0af0..2c0dab1cc16 100644 --- a/BuildConfigGen/VersionParser.cs +++ b/BuildConfigGen/VersionParser.cs @@ -1,40 +1,130 @@ -internal static class VersionParser +public static class VersionParser { + /// + /// Splits the full Semver 2.0 string into individual string components: version, pre-release version, and build version. + /// The actual values are not validated for Semver 2.0 version compliance. + /// + /// The complete version string, e.g. 1.2.3-test+node + /// The version from the , e.g. 1.2.3 + /// The prerelease version from the , e.g. test + /// The build version from the , e.g. node + /// + public static bool TryParseVersionComponents( + string fullVersion, + out string? versionSegment, + out string? preReleaseSegment, + out string? buildSegment) + { + versionSegment = null; + preReleaseSegment = null; + buildSegment = null; + + if (string.IsNullOrWhiteSpace(fullVersion)) + { + return false; + } + + int buildIndex = fullVersion.IndexOf('+'); + if (buildIndex == 0) + { + return false; + } + + int preReleaseIndex = fullVersion.IndexOf('-'); + if (preReleaseIndex == 0) + { + return false; + } + + if (preReleaseIndex > 0 && buildIndex > 0) + { + if (preReleaseIndex > buildIndex) + { + // Prelease must be defined before first '+', if any. + // Everything which comes after + is a build version. + preReleaseIndex = -1; + } + } + + string? preReleaseSegmentCandidate = preReleaseIndex > 0 + ? fullVersion.Substring(preReleaseIndex + 1, buildIndex > 0 ? buildIndex - preReleaseIndex - 1 : fullVersion.Length - preReleaseIndex - 1) + : null; + + if (preReleaseSegmentCandidate != null && preReleaseSegmentCandidate.Length < 1) + { + return false; + } + + string? buildSegmentCandidate = buildIndex > 0 + ? fullVersion.Substring(buildIndex + 1) + : null; + + if (buildSegmentCandidate != null && buildSegmentCandidate.Length < 1) + { + return false; + } + + versionSegment = fullVersion; + if (preReleaseIndex > 0) + { + versionSegment = versionSegment.Substring(0, preReleaseIndex); + } + else if (buildIndex > 0) + { + versionSegment = versionSegment.Substring(0, buildIndex); + } + + buildSegment = buildSegmentCandidate; + preReleaseSegment = preReleaseSegmentCandidate; + + return true; + } + + /// + /// There should be more validation in this type, but it is impossible to say whether it would be breaking or not. + /// Therefore, we leave the conditions relaxed, as-is, not to increase the scope of this change significantly. + /// public static void ParseVersion( - String version, - out Int32 major, - out Int32 minor, - out Int32 patch, - out String? semanticVersion) + string version, + out int major, + out int minor, + out int patch, + out string? preReleaseVersion, + out string? buildVersion) { - ArgumentUtility.CheckStringForNullOrEmpty(version, "version"); + ArgumentUtility.CheckStringForNullOrEmpty(version, nameof(version)); - String[] segments = version.Split(new char[] { '.', '-' }, StringSplitOptions.None); - if (segments.Length < 3 || segments.Length > 4) + if (!TryParseVersionComponents( + version, + out string? mainVersion, + out preReleaseVersion, + out buildVersion)) { - throw new ArgumentException("wrong number of segments"); + throw new ArgumentException($"Could not parse version segments: '{version}'"); } - if (!Int32.TryParse(segments[0], out major)) + string[] dotSegments = mainVersion?.Split(c_versionSeparator, StringSplitOptions.None) ?? []; + + if (dotSegments.Length != 3) { - throw new ArgumentException("major"); + throw new ArgumentException("wrong number of segments (should be 3) in: '" + version + "'"); } - if (!Int32.TryParse(segments[1], out minor)) + if (!int.TryParse(dotSegments[0], out major)) { - throw new ArgumentException("minor"); + throw new ArgumentException("major"); } - if (!Int32.TryParse(segments[2], out patch)) + if (!int.TryParse(dotSegments[1], out minor)) { - throw new ArgumentException("patch"); + throw new ArgumentException("minor"); } - semanticVersion = null; - if (segments.Length == 4) + if (!int.TryParse(dotSegments[2], out patch)) { - semanticVersion = segments[3]; + throw new ArgumentException("patch"); } } -} + private static readonly char[] c_versionSeparator = ['.']; +} From 68556eba3089da76beaf0ce479db579661364a69 Mon Sep 17 00:00:00 2001 From: Grzegorz Gurgul Date: Tue, 4 Feb 2025 09:59:02 +0100 Subject: [PATCH 3/6] working version --- BuildConfigGen/Debugging/VsCodeLaunchConfigGenerator.cs | 3 ++- BuildConfigGen/Program.cs | 8 ++++---- BuildConfigGen/TaskVersion.cs | 9 +++++---- make-util.js | 7 ++++++- make.js | 4 +++- 5 files changed, 20 insertions(+), 11 deletions(-) diff --git a/BuildConfigGen/Debugging/VsCodeLaunchConfigGenerator.cs b/BuildConfigGen/Debugging/VsCodeLaunchConfigGenerator.cs index 652d6313fe7..d87392b6d71 100644 --- a/BuildConfigGen/Debugging/VsCodeLaunchConfigGenerator.cs +++ b/BuildConfigGen/Debugging/VsCodeLaunchConfigGenerator.cs @@ -42,8 +42,9 @@ public void AddForTask(string taskConfigPath) int major = versionNode["Major"]!.GetValue(); int minor = versionNode["Minor"]!.GetValue(); int patch = versionNode["Patch"]!.GetValue(); + string? build = versionNode["Build"]?.GetValue() ?? null; - var version = new TaskVersion(major, minor, patch); + var version = new TaskVersion(major, minor, patch, build); LaunchConfig.AddConfigForTask( taskId: taskConfig["id"]!.GetValue(), diff --git a/BuildConfigGen/Program.cs b/BuildConfigGen/Program.cs index 60c7cde2428..88e829c588f 100644 --- a/BuildConfigGen/Program.cs +++ b/BuildConfigGen/Program.cs @@ -1091,13 +1091,13 @@ private static void WriteTaskJsonWithSemverConfig(string taskPath, string outputTaskPath = Path.Combine(taskPath, fileName); JsonNode outputTaskNode = JsonNode.Parse(ensureUpdateModeVerifier!.FileReadAllText(outputTaskPath))!; - outputTaskNode["version"]!["Major"] = taskState.configTaskVersionMapping[defaultConfig].Major; - outputTaskNode["version"]!["Minor"] = taskState.configTaskVersionMapping[defaultConfig].Minor; - outputTaskNode["version"]!["Patch"] = taskState.configTaskVersionMapping[defaultConfig].Patch; + outputTaskNode["version"]!["Major"] = taskState.configTaskVersionMapping[config].Major; + outputTaskNode["version"]!["Minor"] = taskState.configTaskVersionMapping[config].Minor; + outputTaskNode["version"]!["Patch"] = taskState.configTaskVersionMapping[config].Patch; if (defaultConfig != config) { - outputTaskNode["version"]!["Build"] = config.name; + outputTaskNode["version"]!["Build"] = config.constMappingKey; } var outputTaskNodeObject = outputTaskNode.AsObject(); diff --git a/BuildConfigGen/TaskVersion.cs b/BuildConfigGen/TaskVersion.cs index 461621b7df7..470b686119d 100644 --- a/BuildConfigGen/TaskVersion.cs +++ b/BuildConfigGen/TaskVersion.cs @@ -34,11 +34,12 @@ public TaskVersion(string version) throw new ArgumentException("semVer"); } } - public TaskVersion(int major, int minor, int overidePatch) + public TaskVersion(int major, int minor, int overidePatch, string? build = null) { Major = major; Minor = minor; Patch = overidePatch; + Build = build; } private TaskVersion(TaskVersion taskVersionToClone) @@ -87,17 +88,17 @@ public TaskVersion Clone() public TaskVersion CloneWithMinorAndPatch(int minor, int overridePatch) { - return new TaskVersion(Major, minor, overridePatch); + return new TaskVersion(Major, minor, overridePatch, Build); } public TaskVersion CloneWithPatch(int overridePatch) { - return new TaskVersion(Major, Minor, overridePatch); + return new TaskVersion(Major, Minor, overridePatch, Build); } public TaskVersion CloneWithMajor(int major) { - return new TaskVersion(major, Minor, Patch); + return new TaskVersion(major, Minor, Patch, Build); } public static implicit operator String(TaskVersion version) diff --git a/make-util.js b/make-util.js index bb91e0a6e03..b12e7221ab0 100644 --- a/make-util.js +++ b/make-util.js @@ -1797,8 +1797,9 @@ exports.ensureBuildConfigGeneratorPrereqs = ensureBuildConfigGeneratorPrereqs; * @param {Number} sprintNumber Sprint number option to pass in the BuildConfigGenerator tool * @param {String} debugAgentDir When set to local agent root directory, the BuildConfigGenerator tool will generate launch configurations for the task(s) * @param {Boolean} includeLocalPackagesBuildConfig When set to true, generate LocalPackages BuildConfig + * @param {Boolean} useSemverBuildConfig When set to true, use semver build config and A/B releases */ -var processGeneratedTasks = function(baseConfigToolPath, taskList, makeOptions, writeUpdates, sprintNumber, debugAgentDir, includeLocalPackagesBuildConfig) { +var processGeneratedTasks = function (baseConfigToolPath, taskList, makeOptions, writeUpdates, sprintNumber, debugAgentDir, includeLocalPackagesBuildConfig, useSemverBuildConfig) { if (!makeOptions) fail("makeOptions is not defined"); if (sprintNumber && !Number.isInteger(sprintNumber)) fail("Sprint is not a number"); @@ -1827,6 +1828,10 @@ var processGeneratedTasks = function(baseConfigToolPath, taskList, makeOptions, writeUpdateArg += " --include-local-packages-build-config"; } + if (useSemverBuildConfig) { + writeUpdateArg += " --use-semver-build-config"; + } + var debugAgentDirArg = ""; if(debugAgentDir) { debugAgentDirArg += ` --debug-agent-dir ${debugAgentDir}`; diff --git a/make.js b/make.js index c8d4c5aeaaa..4c0e758611e 100644 --- a/make.js +++ b/make.js @@ -242,8 +242,10 @@ CLI.serverBuild = async function(/** @type {{ task: string }} */ argv) { { const makeOptions = fileToJson(makeOptionsPath); + console.log("Hello " + argv) + // Verify generated files across tasks are up-to-date - util.processGeneratedTasks(baseConfigToolPath, taskList, makeOptions, writeUpdatedsFromGenTasks, argv.sprint, argv['debug-agent-dir'], argv.includeLocalPackagesBuildConfig); + util.processGeneratedTasks(baseConfigToolPath, taskList, makeOptions, writeUpdatedsFromGenTasks, argv.sprint, argv['debug-agent-dir'], argv.includeLocalPackagesBuildConfig, argv.useSemverBuildConfig); } if (argv.includeLocalPackagesBuildConfig) From 0a79e664822fa07f75964d9ecb1341dd70ec667a Mon Sep 17 00:00:00 2001 From: Grzegorz Gurgul Date: Sat, 15 Feb 2025 15:07:41 +0100 Subject: [PATCH 4/6] TEST update to task --- Tasks/PowerShellV2/powershell.ps1 | 1 + Tasks/PowerShellV2/task.json | 6 +++++- Tasks/PowerShellV2/task.loc.json | 6 +++++- 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/Tasks/PowerShellV2/powershell.ps1 b/Tasks/PowerShellV2/powershell.ps1 index 93ecb6176f3..ddf427d5eb9 100644 --- a/Tasks/PowerShellV2/powershell.ps1 +++ b/Tasks/PowerShellV2/powershell.ps1 @@ -31,6 +31,7 @@ function Get-ActionPreference { Trace-VstsEnteringInvocation $MyInvocation try { + #Test Import-VstsLocStrings "$PSScriptRoot\task.json" # Get inputs. diff --git a/Tasks/PowerShellV2/task.json b/Tasks/PowerShellV2/task.json index 8d5171d28ca..fea879d39d9 100644 --- a/Tasks/PowerShellV2/task.json +++ b/Tasks/PowerShellV2/task.json @@ -17,9 +17,13 @@ "author": "Microsoft Corporation", "version": { "Major": 2, - "Minor": 247, + "Minor": 253, "Patch": 0 }, + "release": { + "Sprint": 252, + "Ordinal": 0 + }, "releaseNotes": "Script task consistency. Added support for macOS and Linux.", "minimumAgentVersion": "2.115.0", "showEnvironmentVariables": true, diff --git a/Tasks/PowerShellV2/task.loc.json b/Tasks/PowerShellV2/task.loc.json index 0526b4036d4..c82fc162e2d 100644 --- a/Tasks/PowerShellV2/task.loc.json +++ b/Tasks/PowerShellV2/task.loc.json @@ -17,9 +17,13 @@ "author": "Microsoft Corporation", "version": { "Major": 2, - "Minor": 247, + "Minor": 253, "Patch": 0 }, + "release": { + "Sprint": 252, + "Ordinal": 0 + }, "releaseNotes": "ms-resource:loc.releaseNotes", "minimumAgentVersion": "2.115.0", "showEnvironmentVariables": true, From 43dceb540153ce8669deec9c4a349788ce2adae6 Mon Sep 17 00:00:00 2001 From: Grzegorz Gurgul Date: Thu, 20 Feb 2025 11:36:35 +0100 Subject: [PATCH 5/6] Remove unecessary changes --- Tasks/PowerShellV2/.npmrc | 2 + Tasks/PowerShellV2/package-lock.json | 498 +++++++++++++++++++-------- Tasks/PowerShellV2/package.json | 4 +- Tasks/PowerShellV2/powershell.ps1 | 1 - Tasks/PowerShellV2/task.json | 12 +- Tasks/PowerShellV2/task.loc.json | 12 +- 6 files changed, 367 insertions(+), 162 deletions(-) diff --git a/Tasks/PowerShellV2/.npmrc b/Tasks/PowerShellV2/.npmrc index 969ccea0766..d5c7fef620a 100644 --- a/Tasks/PowerShellV2/.npmrc +++ b/Tasks/PowerShellV2/.npmrc @@ -1,3 +1,5 @@ +scripts-prepend-node-path=true + registry=https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/ always-auth=true \ No newline at end of file diff --git a/Tasks/PowerShellV2/package-lock.json b/Tasks/PowerShellV2/package-lock.json index 9f385a75008..6213c4858d5 100644 --- a/Tasks/PowerShellV2/package-lock.json +++ b/Tasks/PowerShellV2/package-lock.json @@ -1,55 +1,79 @@ { "name": "vsts-powershell-task", "version": "1.0.0", - "lockfileVersion": 1, + "lockfileVersion": 3, "requires": true, - "dependencies": { - "@types/mocha": { + "packages": { + "": { + "name": "vsts-powershell-task", + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "@types/mocha": "^5.2.7", + "@types/node": "^20.3.1", + "azure-pipelines-task-lib": "^4.16.0", + "azure-pipelines-tasks-utility-common": "^3.235.0", + "uuid": "^3.0.1" + }, + "devDependencies": { + "typescript": "5.1.6" + } + }, + "node_modules/@types/mocha": { "version": "5.2.7", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/@types/mocha/-/mocha-5.2.7.tgz", "integrity": "sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ==" }, - "@types/node": { - "version": "16.11.64", - "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/@types/node/-/node-16.11.64.tgz", - "integrity": "sha512-z5hPTlVFzNwtJ2LNozTpJcD1Cu44c4LNuzaq1mwxmiHWQh2ULdR6Vjwo1UGldzRpzL0yUEdZddnfqGW2G70z6Q==" + "node_modules/@types/node": { + "version": "20.16.1", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/@types/node/-/node-20.16.1.tgz", + "integrity": "sha512-zJDo7wEadFtSyNz5QITDfRcrhqDvQI1xQNQ0VoizPjM/dVAODqqIUWbJPkvsxmTI0MYRGRikcdjMPhOssnPejQ==", + "dependencies": { + "undici-types": "~6.19.2" + } }, - "@types/semver": { + "node_modules/@types/semver": { "version": "5.5.0", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/@types/semver/-/semver-5.5.0.tgz", "integrity": "sha512-41qEJgBH/TWgo5NFSvBCJ1qkoi3Q6ONSF2avrHq1LVEZfYpdHmj0y9SuTK+u9ZhG1sYQKBL1AWXKyLWP4RaUoQ==" }, - "@types/uuid": { + "node_modules/@types/uuid": { "version": "3.4.13", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/@types/uuid/-/uuid-3.4.13.tgz", "integrity": "sha512-pAeZeUbLE4Z9Vi9wsWV2bYPTweEHeJJy0G4pEjOA/FSvy1Ad5U5Km8iDV6TKre1mjBiVNfAdVHKruP8bAh4Q5A==" }, - "adm-zip": { + "node_modules/adm-zip": { "version": "0.5.15", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/adm-zip/-/adm-zip-0.5.15.tgz", - "integrity": "sha512-jYPWSeOA8EFoZnucrKCNihqBjoEGQSU4HKgHYQgKNEQ0pQF9a/DYuo/+fAxY76k4qe75LUlLWpAM1QWcBMTOKw==" + "integrity": "sha512-jYPWSeOA8EFoZnucrKCNihqBjoEGQSU4HKgHYQgKNEQ0pQF9a/DYuo/+fAxY76k4qe75LUlLWpAM1QWcBMTOKw==", + "engines": { + "node": ">=12.0" + } }, - "agent-base": { + "node_modules/agent-base": { "version": "6.0.2", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/agent-base/-/agent-base-6.0.2.tgz", "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "requires": { + "dependencies": { "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" } }, - "argparse": { + "node_modules/argparse": { "version": "1.0.10", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "requires": { + "dependencies": { "sprintf-js": "~1.0.2" } }, - "azure-pipelines-task-lib": { + "node_modules/azure-pipelines-task-lib": { "version": "4.16.0", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/azure-pipelines-task-lib/-/azure-pipelines-task-lib-4.16.0.tgz", "integrity": "sha512-hjyDi5GI1cFmS2o6GzTFPqloeTZBeaTLOjPn/H3CVr0vV/MV+eYoWszVe9kn7XnRSiv22j3p4Rhw/Sy4v1okxA==", - "requires": { + "dependencies": { "adm-zip": "^0.5.10", "minimatch": "3.0.5", "nodejs-file-downloader": "^4.11.1", @@ -59,23 +83,28 @@ "uuid": "^3.0.1" } }, - "azure-pipelines-tasks-utility-common": { - "version": "3.235.0", - "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/azure-pipelines-tasks-utility-common/-/azure-pipelines-tasks-utility-common-3.235.0.tgz", - "integrity": "sha512-1jxzFUYq9BBnzSGt9bnVf1qxUBC+9XEZE5LOJGWEGuzsWk0nVzM2q4pWzsWKzHz2otxzcjBQN/QGxwhVVKlO4Q==", - "requires": { + "node_modules/azure-pipelines-tasks-utility-common": { + "version": "3.242.0", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/azure-pipelines-tasks-utility-common/-/azure-pipelines-tasks-utility-common-3.242.0.tgz", + "integrity": "sha512-PCpJj2f+v1SxjP+NYtSeTQdgPE1WuadzeKcjaqzXSuHGf4KbDcVSQVD2IEo3dAGrvVfLZLnk4B2x/rwbWzminQ==", + "dependencies": { "@types/node": "^16.11.39", - "azure-pipelines-task-lib": "^4.4.0", + "azure-pipelines-task-lib": "^4.11.0", "azure-pipelines-tool-lib": "^2.0.7", "js-yaml": "3.13.1", "semver": "^5.7.2" } }, - "azure-pipelines-tool-lib": { + "node_modules/azure-pipelines-tasks-utility-common/node_modules/@types/node": { + "version": "16.18.105", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/@types/node/-/node-16.18.105.tgz", + "integrity": "sha512-w2d0Z9yMk07uH3+Cx0N8lqFyi3yjXZxlbYappPj+AsOlT02OyxyiuNoNHdGt6EuiSm8Wtgp2YV7vWg+GMFrvFA==" + }, + "node_modules/azure-pipelines-tool-lib": { "version": "2.0.7", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/azure-pipelines-tool-lib/-/azure-pipelines-tool-lib-2.0.7.tgz", "integrity": "sha512-1FN67ypNwNhgZllYSm4/pAQdffSfEZJhwW8YeNvm/cKDTS6t6bukTBIkt04c1CsaQe7Ot+eDOVMn41wX1ketXw==", - "requires": { + "dependencies": { "@types/semver": "^5.3.0", "@types/uuid": "^3.4.5", "azure-pipelines-task-lib": "^4.1.0", @@ -85,105 +114,162 @@ "uuid": "^3.3.2" } }, - "balanced-match": { + "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, - "brace-expansion": { + "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { + "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, - "call-bind": { + "node_modules/call-bind": { "version": "1.0.7", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/call-bind/-/call-bind-1.0.7.tgz", "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", - "requires": { + "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", "function-bind": "^1.1.2", "get-intrinsic": "^1.2.4", "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "concat-map": { + "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" }, - "debug": { + "node_modules/debug": { "version": "4.3.6", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/debug/-/debug-4.3.6.tgz", "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", - "requires": { + "dependencies": { "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "define-data-property": { + "node_modules/define-data-property": { "version": "1.1.4", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/define-data-property/-/define-data-property-1.1.4.tgz", "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "requires": { + "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "es-define-property": { + "node_modules/es-define-property": { "version": "1.0.0", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/es-define-property/-/es-define-property-1.0.0.tgz", "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", - "requires": { + "dependencies": { "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" } }, - "es-errors": { + "node_modules/es-errors": { "version": "1.3.0", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==" + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "engines": { + "node": ">= 0.4" + } }, - "esprima": { + "node_modules/esprima": { "version": "4.0.1", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } }, - "follow-redirects": { + "node_modules/follow-redirects": { "version": "1.15.6", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/follow-redirects/-/follow-redirects-1.15.6.tgz", - "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==" + "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } }, - "fs.realpath": { + "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" }, - "function-bind": { + "node_modules/function-bind": { "version": "1.1.2", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==" + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "get-intrinsic": { + "node_modules/get-intrinsic": { "version": "1.2.4", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/get-intrinsic/-/get-intrinsic-1.2.4.tgz", "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", - "requires": { + "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2", "has-proto": "^1.0.1", "has-symbols": "^1.0.3", "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "glob": { + "node_modules/glob": { "version": "7.2.3", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "requires": { + "deprecated": "Glob versions prior to v9 are no longer supported", + "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", @@ -191,301 +277,419 @@ "once": "^1.3.0", "path-is-absolute": "^1.0.0" }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dependencies": { - "minimatch": { - "version": "3.1.2", - "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "requires": { - "brace-expansion": "^1.1.7" - } - } + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" } }, - "gopd": { + "node_modules/gopd": { "version": "1.0.1", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/gopd/-/gopd-1.0.1.tgz", "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "requires": { + "dependencies": { "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "has-property-descriptors": { + "node_modules/has-property-descriptors": { "version": "1.0.2", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "requires": { + "dependencies": { "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "has-proto": { + "node_modules/has-proto": { "version": "1.0.3", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/has-proto/-/has-proto-1.0.3.tgz", - "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==" + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "has-symbols": { + "node_modules/has-symbols": { "version": "1.0.3", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "hasown": { + "node_modules/hasown": { "version": "2.0.2", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/hasown/-/hasown-2.0.2.tgz", "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "requires": { + "dependencies": { "function-bind": "^1.1.2" }, - "dependencies": { - "function-bind": { - "version": "1.1.2", - "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==" - } + "engines": { + "node": ">= 0.4" } }, - "https-proxy-agent": { + "node_modules/https-proxy-agent": { "version": "5.0.1", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "requires": { + "dependencies": { "agent-base": "6", "debug": "4" + }, + "engines": { + "node": ">= 6" } }, - "inflight": { + "node_modules/inflight": { "version": "1.0.6", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "requires": { + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "dependencies": { "once": "^1.3.0", "wrappy": "1" } }, - "inherits": { + "node_modules/inherits": { "version": "2.0.4", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, - "interpret": { + "node_modules/interpret": { "version": "1.4.0", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==" + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", + "engines": { + "node": ">= 0.10" + } }, - "is-core-module": { + "node_modules/is-core-module": { "version": "2.15.0", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/is-core-module/-/is-core-module-2.15.0.tgz", "integrity": "sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==", - "requires": { + "dependencies": { "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "js-yaml": { + "node_modules/js-yaml": { "version": "3.13.1", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/js-yaml/-/js-yaml-3.13.1.tgz", "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", - "requires": { + "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "mime-db": { + "node_modules/mime-db": { "version": "1.52.0", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } }, - "mime-types": { + "node_modules/mime-types": { "version": "2.1.35", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/mime-types/-/mime-types-2.1.35.tgz", "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "requires": { + "dependencies": { "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" } }, - "minimatch": { + "node_modules/minimatch": { "version": "3.0.5", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/minimatch/-/minimatch-3.0.5.tgz", "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", - "requires": { + "dependencies": { "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" } }, - "ms": { + "node_modules/ms": { "version": "2.1.2", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, - "nodejs-file-downloader": { + "node_modules/nodejs-file-downloader": { "version": "4.13.0", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/nodejs-file-downloader/-/nodejs-file-downloader-4.13.0.tgz", "integrity": "sha512-nI2fKnmJWWFZF6SgMPe1iBodKhfpztLKJTtCtNYGhm/9QXmWa/Pk9Sv00qHgzEvNLe1x7hjGDRor7gcm/ChaIQ==", - "requires": { + "dependencies": { "follow-redirects": "^1.15.6", "https-proxy-agent": "^5.0.0", "mime-types": "^2.1.27", "sanitize-filename": "^1.6.3" } }, - "object-inspect": { - "version": "1.13.1", - "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/object-inspect/-/object-inspect-1.13.1.tgz", - "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==" + "node_modules/object-inspect": { + "version": "1.13.2", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/object-inspect/-/object-inspect-1.13.2.tgz", + "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "once": { + "node_modules/once": { "version": "1.4.0", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "requires": { + "dependencies": { "wrappy": "1" } }, - "path-is-absolute": { + "node_modules/path-is-absolute": { "version": "1.0.1", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "engines": { + "node": ">=0.10.0" + } }, - "path-parse": { + "node_modules/path-parse": { "version": "1.0.7", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, - "q": { + "node_modules/q": { "version": "1.5.1", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/q/-/q-1.5.1.tgz", - "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==" + "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==", + "deprecated": "You or someone you depend on is using Q, the JavaScript Promise library that gave JavaScript developers strong feelings about promises. They can almost certainly migrate to the native JavaScript promise now. Thank you literally everyone for joining me in this bet against the odds. Be excellent to each other.\n\n(For a CapTP with native promises, see @endo/eventual-send and @endo/captp)", + "engines": { + "node": ">=0.6.0", + "teleport": ">=0.2.0" + } }, - "qs": { - "version": "6.12.0", - "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/qs/-/qs-6.12.0.tgz", - "integrity": "sha512-trVZiI6RMOkO476zLGaBIzszOdFPnCCXHPG9kn0yuS1uz6xdVxPfZdB3vUig9pxPFDM9BRAgz/YUIVQ1/vuiUg==", - "requires": { + "node_modules/qs": { + "version": "6.13.0", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "dependencies": { "side-channel": "^1.0.6" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "rechoir": { + "node_modules/rechoir": { "version": "0.6.2", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/rechoir/-/rechoir-0.6.2.tgz", "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", - "requires": { + "dependencies": { "resolve": "^1.1.6" + }, + "engines": { + "node": ">= 0.10" } }, - "resolve": { + "node_modules/resolve": { "version": "1.22.8", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/resolve/-/resolve-1.22.8.tgz", "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", - "requires": { + "dependencies": { "is-core-module": "^2.13.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "sanitize-filename": { + "node_modules/sanitize-filename": { "version": "1.6.3", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/sanitize-filename/-/sanitize-filename-1.6.3.tgz", "integrity": "sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==", - "requires": { + "dependencies": { "truncate-utf8-bytes": "^1.0.0" } }, - "semver": { + "node_modules/semver": { "version": "5.7.2", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==" + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "bin": { + "semver": "bin/semver" + } }, - "semver-compare": { + "node_modules/semver-compare": { "version": "1.0.0", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/semver-compare/-/semver-compare-1.0.0.tgz", "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==" }, - "set-function-length": { + "node_modules/set-function-length": { "version": "1.2.2", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/set-function-length/-/set-function-length-1.2.2.tgz", "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", - "requires": { + "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", "function-bind": "^1.1.2", "get-intrinsic": "^1.2.4", "gopd": "^1.0.1", "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" } }, - "shelljs": { + "node_modules/shelljs": { "version": "0.8.5", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/shelljs/-/shelljs-0.8.5.tgz", "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", - "requires": { + "dependencies": { "glob": "^7.0.0", "interpret": "^1.0.0", "rechoir": "^0.6.2" + }, + "bin": { + "shjs": "bin/shjs" + }, + "engines": { + "node": ">=4" } }, - "side-channel": { + "node_modules/side-channel": { "version": "1.0.6", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/side-channel/-/side-channel-1.0.6.tgz", "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", - "requires": { + "dependencies": { "call-bind": "^1.0.7", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.4", "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "sprintf-js": { + "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" }, - "supports-preserve-symlinks-flag": { + "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "truncate-utf8-bytes": { + "node_modules/truncate-utf8-bytes": { "version": "1.0.2", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", "integrity": "sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==", - "requires": { + "dependencies": { "utf8-byte-length": "^1.0.1" } }, - "tunnel": { + "node_modules/tunnel": { "version": "0.0.6", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/tunnel/-/tunnel-0.0.6.tgz", - "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==" + "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", + "engines": { + "node": ">=0.6.11 <=0.7.0 || >=0.7.3" + } }, - "typed-rest-client": { + "node_modules/typed-rest-client": { "version": "1.8.11", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/typed-rest-client/-/typed-rest-client-1.8.11.tgz", "integrity": "sha512-5UvfMpd1oelmUPRbbaVnq+rHP7ng2cE4qoQkQeAqxRL6PklkxsM0g32/HL0yfvruK6ojQ5x8EE+HF4YV6DtuCA==", - "requires": { + "dependencies": { "qs": "^6.9.1", "tunnel": "0.0.6", "underscore": "^1.12.1" } }, - "typescript": { - "version": "4.0.2", - "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/typescript/-/typescript-4.0.2.tgz", - "integrity": "sha512-e4ERvRV2wb+rRZ/IQeb3jm2VxBsirQLpQhdxplZ2MEzGvDkkMmPglecnNDfSUBivMjP93vRbngYYDQqQ/78bcQ==", - "dev": true + "node_modules/typescript": { + "version": "5.1.6", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/typescript/-/typescript-5.1.6.tgz", + "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/underscore": { + "version": "1.13.7", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/underscore/-/underscore-1.13.7.tgz", + "integrity": "sha512-GMXzWtsc57XAtguZgaQViUOzs0KTkk8ojr3/xAxXLITqf/3EMwxC0inyETfDFjH/Krbhuep0HNbbjI9i/q3F3g==" }, - "underscore": { - "version": "1.13.6", - "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/underscore/-/underscore-1.13.6.tgz", - "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==" + "node_modules/undici-types": { + "version": "6.19.8", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==" }, - "utf8-byte-length": { + "node_modules/utf8-byte-length": { "version": "1.0.5", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/utf8-byte-length/-/utf8-byte-length-1.0.5.tgz", "integrity": "sha512-Xn0w3MtiQ6zoz2vFyUVruaCL53O/DwUvkEeOvj+uulMm0BkUGYWmBYVyElqZaSLhY6ZD0ulfU3aBra2aVT4xfA==" }, - "uuid": { + "node_modules/uuid": { "version": "3.4.0", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "bin": { + "uuid": "bin/uuid" + } }, - "wrappy": { + "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" diff --git a/Tasks/PowerShellV2/package.json b/Tasks/PowerShellV2/package.json index ea59607adf8..fbbd8d7a29f 100644 --- a/Tasks/PowerShellV2/package.json +++ b/Tasks/PowerShellV2/package.json @@ -15,12 +15,12 @@ "license": "MIT", "dependencies": { "@types/mocha": "^5.2.7", - "@types/node": "^16.11.39", + "@types/node": "^20.3.1", "azure-pipelines-task-lib": "^4.16.0", "azure-pipelines-tasks-utility-common": "^3.235.0", "uuid": "^3.0.1" }, "devDependencies": { - "typescript": "4.0.2" + "typescript": "5.1.6" } } diff --git a/Tasks/PowerShellV2/powershell.ps1 b/Tasks/PowerShellV2/powershell.ps1 index ddf427d5eb9..93ecb6176f3 100644 --- a/Tasks/PowerShellV2/powershell.ps1 +++ b/Tasks/PowerShellV2/powershell.ps1 @@ -31,7 +31,6 @@ function Get-ActionPreference { Trace-VstsEnteringInvocation $MyInvocation try { - #Test Import-VstsLocStrings "$PSScriptRoot\task.json" # Get inputs. diff --git a/Tasks/PowerShellV2/task.json b/Tasks/PowerShellV2/task.json index fea879d39d9..cd977ef0b70 100644 --- a/Tasks/PowerShellV2/task.json +++ b/Tasks/PowerShellV2/task.json @@ -17,12 +17,8 @@ "author": "Microsoft Corporation", "version": { "Major": 2, - "Minor": 253, - "Patch": 0 - }, - "release": { - "Sprint": 252, - "Ordinal": 0 + "Minor": 247, + "Patch": 1 }, "releaseNotes": "Script task consistency. Added support for macOS and Linux.", "minimumAgentVersion": "2.115.0", @@ -244,6 +240,10 @@ "Node16": { "target": "powershell.js", "argumentFormat": "" + }, + "Node20_1": { + "target": "powershell.js", + "argumentFormat": "" } }, "messages": { diff --git a/Tasks/PowerShellV2/task.loc.json b/Tasks/PowerShellV2/task.loc.json index c82fc162e2d..9f0ae90a854 100644 --- a/Tasks/PowerShellV2/task.loc.json +++ b/Tasks/PowerShellV2/task.loc.json @@ -17,12 +17,8 @@ "author": "Microsoft Corporation", "version": { "Major": 2, - "Minor": 253, - "Patch": 0 - }, - "release": { - "Sprint": 252, - "Ordinal": 0 + "Minor": 247, + "Patch": 1 }, "releaseNotes": "ms-resource:loc.releaseNotes", "minimumAgentVersion": "2.115.0", @@ -244,6 +240,10 @@ "Node16": { "target": "powershell.js", "argumentFormat": "" + }, + "Node20_1": { + "target": "powershell.js", + "argumentFormat": "" } }, "messages": { From 6a41025e9fb4c6b428eb085aaa6569b8f50d1264 Mon Sep 17 00:00:00 2001 From: Grzegorz Gurgul Date: Thu, 20 Feb 2025 11:43:39 +0100 Subject: [PATCH 6/6] Example task changes - commit to be removed prior to merging --- Tasks/NuGetAuthenticateV1/main.ts | 2 +- Tasks/NuGetAuthenticateV1/task.json | 8 ++++++-- Tasks/NuGetAuthenticateV1/task.loc.json | 8 ++++++-- _generated/NuGetAuthenticateV1.versionmap.txt | 4 ++-- _generated/NuGetAuthenticateV1/main.ts | 2 +- _generated/NuGetAuthenticateV1/task.json | 12 ++++++++---- _generated/NuGetAuthenticateV1/task.loc.json | 12 ++++++++---- _generated/NuGetAuthenticateV1_Wif/main.ts | 2 +- _generated/NuGetAuthenticateV1_Wif/task.json | 13 +++++++++---- _generated/NuGetAuthenticateV1_Wif/task.loc.json | 13 +++++++++---- 10 files changed, 51 insertions(+), 25 deletions(-) diff --git a/Tasks/NuGetAuthenticateV1/main.ts b/Tasks/NuGetAuthenticateV1/main.ts index df5e32fdb5a..449784efaab 100644 --- a/Tasks/NuGetAuthenticateV1/main.ts +++ b/Tasks/NuGetAuthenticateV1/main.ts @@ -11,7 +11,7 @@ import { emitTelemetry } from 'azure-pipelines-tasks-artifacts-common/telemetry' async function main(): Promise { let forceReinstallCredentialProvider = null; let federatedFeedAuthSuccessCount: number = 0; - +// test try { tl.setResourcePath(path.join(__dirname, 'task.json')); diff --git a/Tasks/NuGetAuthenticateV1/task.json b/Tasks/NuGetAuthenticateV1/task.json index 208176b00cf..1138638eef7 100644 --- a/Tasks/NuGetAuthenticateV1/task.json +++ b/Tasks/NuGetAuthenticateV1/task.json @@ -13,8 +13,12 @@ ], "version": { "Major": 1, - "Minor": 247, - "Patch": 4 + "Minor": 253, + "Patch": 0 + }, + "release": { + "Sprint": 253, + "Ordinal": 1 }, "minimumAgentVersion": "2.144.0", "instanceNameFormat": "NuGet Authenticate", diff --git a/Tasks/NuGetAuthenticateV1/task.loc.json b/Tasks/NuGetAuthenticateV1/task.loc.json index 9e75a479e31..fad7f0691b7 100644 --- a/Tasks/NuGetAuthenticateV1/task.loc.json +++ b/Tasks/NuGetAuthenticateV1/task.loc.json @@ -13,8 +13,12 @@ ], "version": { "Major": 1, - "Minor": 247, - "Patch": 4 + "Minor": 253, + "Patch": 0 + }, + "release": { + "Sprint": 253, + "Ordinal": 1 }, "minimumAgentVersion": "2.144.0", "instanceNameFormat": "ms-resource:loc.instanceNameFormat", diff --git a/_generated/NuGetAuthenticateV1.versionmap.txt b/_generated/NuGetAuthenticateV1.versionmap.txt index 987b1ead41c..0f9e3a5dfb6 100644 --- a/_generated/NuGetAuthenticateV1.versionmap.txt +++ b/_generated/NuGetAuthenticateV1.versionmap.txt @@ -1,2 +1,2 @@ -Default|1.247.4 -wif_242|1.247.5 +Default|1.253.0 +wif_242|1.253.1+wif_242 diff --git a/_generated/NuGetAuthenticateV1/main.ts b/_generated/NuGetAuthenticateV1/main.ts index 690ab25307c..52c1a6c4c7d 100644 --- a/_generated/NuGetAuthenticateV1/main.ts +++ b/_generated/NuGetAuthenticateV1/main.ts @@ -8,7 +8,7 @@ import { emitTelemetry } from 'azure-pipelines-tasks-artifacts-common/telemetry' async function main(): Promise { let forceReinstallCredentialProvider = null; let federatedFeedAuthSuccessCount: number = 0; - +// test try { tl.setResourcePath(path.join(__dirname, 'task.json')); diff --git a/_generated/NuGetAuthenticateV1/task.json b/_generated/NuGetAuthenticateV1/task.json index 59962e1b2e3..dcd81428644 100644 --- a/_generated/NuGetAuthenticateV1/task.json +++ b/_generated/NuGetAuthenticateV1/task.json @@ -13,8 +13,12 @@ ], "version": { "Major": 1, - "Minor": 247, - "Patch": 4 + "Minor": 253, + "Patch": 0 + }, + "release": { + "Sprint": 253, + "Ordinal": 1 }, "minimumAgentVersion": "2.144.0", "instanceNameFormat": "NuGet Authenticate", @@ -60,8 +64,8 @@ "Info_SuccessAddingFederatedFeedAuth": "Successfully added auth for feed %s." }, "_buildConfigMapping": { - "Default": "1.247.4", + "Default": "1.253.0", "LocalPackages": "1.249.4", - "wif_242": "1.247.5" + "wif_242": "1.253.1+wif_242" } } \ No newline at end of file diff --git a/_generated/NuGetAuthenticateV1/task.loc.json b/_generated/NuGetAuthenticateV1/task.loc.json index 3d990a130a7..feecb5ca113 100644 --- a/_generated/NuGetAuthenticateV1/task.loc.json +++ b/_generated/NuGetAuthenticateV1/task.loc.json @@ -13,8 +13,12 @@ ], "version": { "Major": 1, - "Minor": 247, - "Patch": 4 + "Minor": 253, + "Patch": 0 + }, + "release": { + "Sprint": 253, + "Ordinal": 1 }, "minimumAgentVersion": "2.144.0", "instanceNameFormat": "ms-resource:loc.instanceNameFormat", @@ -60,8 +64,8 @@ "Info_SuccessAddingFederatedFeedAuth": "ms-resource:loc.messages.Info_SuccessAddingFederatedFeedAuth" }, "_buildConfigMapping": { - "Default": "1.247.4", + "Default": "1.253.0", "LocalPackages": "1.249.4", - "wif_242": "1.247.5" + "wif_242": "1.253.1+wif_242" } } \ No newline at end of file diff --git a/_generated/NuGetAuthenticateV1_Wif/main.ts b/_generated/NuGetAuthenticateV1_Wif/main.ts index e7aa94b8a42..eb93b70ab22 100644 --- a/_generated/NuGetAuthenticateV1_Wif/main.ts +++ b/_generated/NuGetAuthenticateV1_Wif/main.ts @@ -9,7 +9,7 @@ import { emitTelemetry } from 'azure-pipelines-tasks-artifacts-common/telemetry' async function main(): Promise { let forceReinstallCredentialProvider = null; let federatedFeedAuthSuccessCount: number = 0; - +// test try { tl.setResourcePath(path.join(__dirname, 'task.json')); diff --git a/_generated/NuGetAuthenticateV1_Wif/task.json b/_generated/NuGetAuthenticateV1_Wif/task.json index bf2a4b1ec3e..5ddfb7420db 100644 --- a/_generated/NuGetAuthenticateV1_Wif/task.json +++ b/_generated/NuGetAuthenticateV1_Wif/task.json @@ -13,8 +13,13 @@ ], "version": { "Major": 1, - "Minor": 247, - "Patch": 5 + "Minor": 253, + "Patch": 1, + "Build": "wif_242" + }, + "release": { + "Sprint": 253, + "Ordinal": 1 }, "minimumAgentVersion": "2.144.0", "instanceNameFormat": "NuGet Authenticate", @@ -82,8 +87,8 @@ "Info_SuccessAddingFederatedFeedAuth": "Successfully added auth for feed %s." }, "_buildConfigMapping": { - "Default": "1.247.4", + "Default": "1.253.0", "LocalPackages": "1.249.4", - "wif_242": "1.247.5" + "wif_242": "1.253.1+wif_242" } } \ No newline at end of file diff --git a/_generated/NuGetAuthenticateV1_Wif/task.loc.json b/_generated/NuGetAuthenticateV1_Wif/task.loc.json index cb6cf3ca602..588b8f504c0 100644 --- a/_generated/NuGetAuthenticateV1_Wif/task.loc.json +++ b/_generated/NuGetAuthenticateV1_Wif/task.loc.json @@ -13,8 +13,13 @@ ], "version": { "Major": 1, - "Minor": 247, - "Patch": 5 + "Minor": 253, + "Patch": 1, + "Build": "wif_242" + }, + "release": { + "Sprint": 253, + "Ordinal": 1 }, "minimumAgentVersion": "2.144.0", "instanceNameFormat": "ms-resource:loc.instanceNameFormat", @@ -82,8 +87,8 @@ "Info_SuccessAddingFederatedFeedAuth": "ms-resource:loc.messages.Info_SuccessAddingFederatedFeedAuth" }, "_buildConfigMapping": { - "Default": "1.247.4", + "Default": "1.253.0", "LocalPackages": "1.249.4", - "wif_242": "1.247.5" + "wif_242": "1.253.1+wif_242" } } \ No newline at end of file