diff --git a/Tasks/NuGetCommandV2/nugetpack.ts b/Tasks/NuGetCommandV2/nugetpack.ts index ceed2446112e..e031084e2827 100644 --- a/Tasks/NuGetCommandV2/nugetpack.ts +++ b/Tasks/NuGetCommandV2/nugetpack.ts @@ -98,6 +98,19 @@ export async function run(nuGetPath: string): Promise { version = versionMatches[0]; break; + case "bySemVerBuildNumber": + tl.debug("Getting version number using SemVer build number"); + + let semVerBuildNumber: string = tl.getVariable("BUILD_BUILDNUMBER"); + tl.debug(`Build number: ${semVerBuildNumber}`); + + // Validate full SemVer 2.0 format + let semVerRegex = /^\d+\.\d+\.\d+(?:\.\d+)?(?:[-\w\.]+)?(?:\+[0-9A-Za-z\-\.]+)?$/; + if (!semVerRegex.test(semVerBuildNumber)) { + tl.setResult(tl.TaskResult.Failed, tl.loc("Error_InvalidSemVer")); + } + version = semVerBuildNumber; + break; } tl.debug(`Version to use: ${version}`); diff --git a/Tasks/NuGetCommandV2/task.json b/Tasks/NuGetCommandV2/task.json index 5c4494df4b6e..3a6a7151f9ad 100644 --- a/Tasks/NuGetCommandV2/task.json +++ b/Tasks/NuGetCommandV2/task.json @@ -322,7 +322,8 @@ "off": "Off", "byPrereleaseNumber": "Use the date and time", "byEnvVar": "Use an environment variable", - "byBuildNumber": "Use the build number" + "byBuildNumber": "Use the build number", + "bySemVerBuildNumber": "Use full SemVer build number" } }, { diff --git a/Tasks/NuGetCommandV2/task.loc.json b/Tasks/NuGetCommandV2/task.loc.json index 8e7e414828d3..c54adfb68a26 100644 --- a/Tasks/NuGetCommandV2/task.loc.json +++ b/Tasks/NuGetCommandV2/task.loc.json @@ -322,7 +322,8 @@ "off": "Off", "byPrereleaseNumber": "Use the date and time", "byEnvVar": "Use an environment variable", - "byBuildNumber": "Use the build number" + "byBuildNumber": "Use the build number", + "bySemVerBuildNumber": "Use full SemVer build number" } }, {