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

3.2k views Asked by At

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?

2

There are 2 answers

1
SteveChapman On BEST ANSWER

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.

1
Matt Canty On

This approach works with version 10+ of TeamCity and gets around issues with Select-Xml and namespaces.

$Version = ([xml](Get-Content .\MyProject.nuspec)).package.metadata.version
$BuildCounter = %build.counter%

echo "##teamcity[setParameter name='PackageVersion' value='$Version.$BuildCounter']"