Skip to content
| Marketplace
Sign in
Azure DevOps>Azure Pipelines>UZGVersioning
UZGVersioning

UZGVersioning

UZGent

|
7 installs
| (0) | Free
Provides tasks to extract and parse semver versions from input.
Get it free

Tasks

  • Extract SemVer task
  • UZG Nuget Versioning task

UZG Nuget Versioning task

UZGVersioning Sets nuget version based on semantic versioning in SourceBranchName.

YAML snippet

#UZG Nuget Versioning
- task: UZGVersioning@0

Task Inputs

None

Remarks

This task will attempt to parse a Semver (optionally prefixed with "v" or "V") from the Build.SourceBranchName.
On success:

  • sets $(versioningScheme) = "byEnvVar"
  • sets $(versioningPackageVersion) = the parsed semver
  • updates the BuildNumber to "$(Build.DefinitionName) - $(semver)"

On failure:

  • logs a warning
  • sets $(versioningScheme) = "byBuildNumber"
  • sets $(versioningPackageVersion) = $(Build.BuildNumber)

Examples

For more information about versioning schemes see the NuGet task documentation.

For more information about BuildNumber (set by the pipeline "name" property) requirements when using "byBuildNumber", see the Nuget task documentation on the "versioningScheme"-argument

DotNetCoreCLI pack

name: $(BuildDefinitionName)_$(Year:yyyy).$(Month).$(DayOfMonth)$(Rev:.r)
#buildname containing a semver when UZGVersioning fails to parse $(Build.SourceBranchName) and will use versioningScheme = "byBuildNumber"

steps:

#UZG Nuget Versioning
- task: UZGVersioning@0
  displayName: 'UZG Nuget Versioning'

#Pack a NuGetPackage with DotNetCoreCLI
- task: DotNetCoreCLI@2
  displayName: Pack
  inputs:
    command: 'pack'
    packagesToPack: '**/*.csproj'
    # Use the variable set in the UZGVersioning task ("byEnvVar" or "byBuildNumber")
    versioningScheme: $(versioningScheme)
    # for "byEnvVar" provide the name of the variable to use
    versionEnvVar: 'versioningPackageVersion'   

NuGetCommand pack

Using the UZGVersioning with the NuGetCommand task works exactly the same.

...
- task: UZGVersioning@0

- task: NuGetCommand@2
  inputs:
    command: 'pack'
    packagesToPack: '**/*.csproj'
    versioningScheme: $(versioningScheme)
    versionEnvVar: 'versioningPackageVersion'   
...

Input/Output examples:

git ref $(Build.SourceBranchName) $(versioningPackageVersion) $(versioningScheme)
refs/tags/release/v1.2.3 v1.2.3 1.2.3 byEnvVar
refs/tags/release/v1.2.3-preview1 v1.2.3-preview1 1.2.3-preview1 byEnvVar
release/v1.2.3 v1.2.3 1.2.3 byEnvVar
release/1.2.3 1.2.3 1.2.3 byEnvVar
v1.2.3 v1.2.3 1.2.3 byEnvVar
release/version1.2.3 version1.2.3 $(Build.BuildNumber) byBuildNumber
release/v1.2 v1.2 $(Build.BuildNumber) byBuildNumber
release/something something $(Build.BuildNumber) byBuildNumber

Extract SemVer task

ExtractSemver Extract a Semantic version (semver) from a given input.

YAML snippet

#Extract Semantic Version.
- task: ExtractSemver@0
  inputs:
    #input: $(Build.SourceBranchName) # Optional
    #inputFormat: '^[Vv]?{semver}$' # Optional
    #outputFormat: '{major}.{minor}.{patch}{prerelease}' # Optional
    #inputIgnorePrefixZero: true #Optional

Task Inputs

Parameters Description
input string

(Optional) The input to extract a semantic version from.

Default value: $(Build.SourceBranchName)
inputFormat string (Optional) A regular expression where {semver} is the semver to parse.

Default value: ^[Vv]?{semver}$
outputFormat string (Optional) Use {major}, {minor}, {patch}, {prerelease} and {buildmetadata} to refer to the respective parts of the version.

{prerelease} will always start with a "-" (when not empty).
{buildmetadata} will always start with a "+" (when not empty).

Default value: {major}.{minor}.{patch}{prerelease}
inputIgnorePrefixZero boolean

(Optional) Allow and ignore/remove prefix "0" in {minor} and {patch} parts.

Eg. the following input will be accepted when 'true':
2024.08.20: {major}=2024, {minor}=8, {patch}=20
2024.09.01: {major}=2024, {minor}=9, {patch}=1

Default value: true

Task Output Variables

ParametersDescription
isValidA valid semver was found and parsed.
matchThe fully matched (non-formatted) semver from input.
formattedThe formatted semver assembled with outputformat.
major The major version.
minor The minor version.
patch The patch version.
prerelease The pre-release label. This does not include the "-"-prefix.
buildmetadata The build metadata label. This does not include the "+"-prefix.

Examples

PowerShell Write-Host

  1. Extract semver from the exampleInput-variable
  2. Display the resulting output variables (with PowerShell Write-Host).
variables:
  exampleInput: 'v1.2.3-preview42'

steps:
  # Extract semver from $(exampleInput)
  - task: ExtractSemver@0
    name: GetSemver
    inputs:
      input: '$(exampleInput)'
      
  # Output the result 
  - powershell: |
        Write-Host "isValid: $(GetSemver.isValid)"
        Write-Host "match: $(GetSemver.match)"
        Write-Host "formatted: $(GetSemver.formatted)"
        Write-Host "major: $(GetSemver.major)"
        Write-Host "minor: $(GetSemver.minor)"
        Write-Host "patch: $(GetSemver.patch)"
        Write-Host "prerelease: $(GetSemver.prerelease)"
        Write-Host "buildmetadata: $(GetSemver.buildmetadata)"

The powershell task output:

isValid: True
match: 1.2.3-preview42
formatted: 1.2.3-preview42
major: 1
minor: 2
patch: 3
prerelease: preview42
buildmetadata: 

DotNetCoreCLI Pack

  1. Extract semver from the exampleInput-variable
  2. Choose version control scheme depending on the GetSemver.isValid variable
  3. Use the versioningScheme and versioningPackageVersion variables with DotNetCoreCLI "pack".
name: $(BuildDefinitionName)_$(Year:yyyy).$(Month).$(DayOfMonth)$(Rev:.r)

variables:
  exampleInput: 'v1.2.3-preview42'

steps:
# Extract semver from $(exampleInput)
- task: ExtractSemver@0
  name: GetSemver
  inputs:
    input: '$(exampleInput)'

# decide the 'versioningScheme'. If semver isValid; use versioningScheme="byEnvVar" otherwise, use "byBuildNumber"
- powershell: |
      if ("$(GetSemver.isValid)" -eq $true) {
        Write-Host "##vso[task.setvariable variable=versioningScheme]byEnvVar"
        Write-Host "##vso[task.setvariable variable=versioningPackageVersion]$(GetSemver.formatted)"
      } else {
        Write-Host "##vso[task.setvariable variable=versioningScheme]byBuildNumber"
      }
 
- task: DotNetCoreCLI@2
  displayName: Pack
  inputs:
    command: 'pack'
    packagesToPack: '**/*.csproj'
    # Use the variable set in the UZGVersioning task ("byEnvVar" or "byBuildNumber")    
    versioningScheme: "$(versioningScheme)"
    # for "byEnvVar" provide the name of the variable to use
    versionEnvVar: 'versioningPackageVersion'

npm-version

  1. Extract semver from the exampleInput-variable
  2. Update package.json if the semver isValid
name: $(BuildDefinitionName)_$(Year:yyyy).$(Month).$(DayOfMonth)$(Rev:.r)

variables:
  exampleInput: 'v1.2.3-preview42'

steps:
- task: ExtractSemver@0
  name: PackageVersion
  inputs:
    input: '$(exampleInput)'

- task: Npm@1
  condition: and(succeeded(), eq(variables['PackageVersion.isValid'], 'True'))
  inputs:
    command: 'custom'
    customCommand: 'version $(PackageVersion.formatted) --no-git-tag-version --allow-same-version'

Input/Output examples:

Using the default inputFormat and outputFormat, given input:

input isValid match formatted major minor patch prerelease buildmetadata
v1.2.3 True 1.2.3 1.2.3 1 2 3
v1.2.3‑preview1 True 1.2.3‑preview1 1.2.3‑preview1 1 2 3 preview1
v1.2.3‑preview1+build.123 True 1.2.3‑preview1+build.123 1.2.3‑preview1
(*)
1 2 3 preview1 build.123
1.2.3 True 1.2.3
v2024.09.03 (**) True 2024.9.3 2024.9.3 2024 9 3
version1.2.3 False
v1.2 False
something False

(*) the default outputFormat doesn't output {buildmetadata}) (**) assuming inputIgnorePrefixZero is (the default value); true

  • Contact us
  • Jobs
  • Privacy
  • Manage cookies
  • Terms of use
  • Trademarks
© 2025 Microsoft