Search code examples
teamcitynugetteamcity-8.0

How do you extract a version number from nuspec into TeamCity?


How do you extract a version number from nuspec into TeamCity?

We have a csproj file with this corresponding nuspec node:

1.3.2

In TeamCity I'd like to do a build of this project and create a NuGet package with version 1.3.2.%build.counter%. For example, 1.3.2.322. It is important the version number is coming from a file within source control (the NuSpec) and I don't want to duplicate this as a variable in TeamCity. Is there a way to extract 1.3.2 from the NuSpec file and use it as a TeamCity variable?


Solution

  • A couple of approaches I can think of spring to mind, both using TeamCity service messages:

    Use a PowerShell build step, something like this (apologies my PS isn't great):

    $buildcounter = %build.counter%
    $node = Select-Xml -XPath "/package/metadata/version" -Path /path/to/nuspec.nuspec
    $version = $node.Node.InnerText
    Write-Output "##teamcity[buildNumber '$version.$buildcounter']"
    

    Or, similarly, bootstrap a tool like XmlStarlet:

    $buildcounter = "1231"
    $version = xml sel -T -t -v "/package/metadata/version" Package.nuspec
    Write-Output "##teamcity[buildNumber '$version.$buildcounter']"
    

    This step would need to be added before any other step requiring the build number.