semver-buildnumber/MRPP_SemVer_BuildNumber.xml (23 lines of code) (raw):

<?xml version="1.0" encoding="UTF-8"?> <meta-runner name="SemVer Build Number"> <description>Semantic Versioning (SemVer) build number runner(e.g. 1.0.3+78.4112e01).</description> <settings> <parameters> <param name="mr.SemVer.ManualVersion" value="" spec="text description='Manual version. If included, it overrides any other method.' display='normal' label='Version:' validationMode='any'" /> <param name="mr.SemVer.NuSpecFilePath" value="" spec="text description='If included, version will be parsed from the nuspec file.' display='normal' label='NuSpec File:' validationMode='any'" /> <param name="mr.SemVer.RevisionType" value="n/a" spec="select data_1='n/a' data_2='SHA' data_3='STD' label_2='Git Style (Short Hash)' label_3='Standard (default)' description='The revision part from the VCS will be included as part of the SemVer build metadata. (e.g. short commit hash for Git, ChangeSet for TFS, etc.)' display='normal' label='Revision Type:'" /> <param name="mr.SemVer.IgnoreMetaData" value="$false" spec="checkbox checkedValue='$true' description='Skips the build metadata part (i.e. +X.X)' display='normal' label='Ignore Build Metadata:' uncheckedValue='$false'" /> <param name="mr.SemVer.Debug" value="SilentlyContinue" spec="checkbox checkedValue='Continue' description='Log debug messages?' display='normal' label='Debug:' uncheckedValue='SilentlyContinue'" /> <param name="mr.SemVer.Verbose" value="SilentlyContinue" spec="checkbox checkedValue='Continue' description='Log verbose messages?' display='normal' label='Verbose:' uncheckedValue='SilentlyContinue'" /> </parameters> <build-runners> <runner name="SemVer" type="jetbrains_powershell"> <parameters> <param name="jetbrains_powershell_execution" value="PS1" /> <param name="jetbrains_powershell_noprofile" value="true" /> <param name="jetbrains_powershell_errorToError" value="error" /> <param name="jetbrains_powershell_script_mode" value="CODE" /> <param name="jetbrains_powershell_bitness" value="x86" /> <param name="jetbrains_powershell_minVersion" value="3.0" /> <param name="teamcity.step.mode" value="default" /> <param name="jetbrains_powershell_script_code"> <![CDATA[ function Update-BuildNumber { param( [Parameter(ValueFromPipeline=$true)] [String]$BuildNumber ) Write-Verbose $("Starting: '{0}'" -f $MyInvocation.MyCommand) Write-Debug $("Build Number: {0}" -f $BuildNumber) Write-Host "##teamcity[buildNumber '$BuildNumber']" } function Get-NuSpecVersion { [CmdletBinding()] param() Write-Verbose $("Starting: '{0}'" -f $MyInvocation.MyCommand) Write-Debug $("NuSpec File: {0}" -f $mr.NuSpecFilePath) $nuspec_file = $(Get-Content $mr.NuSpecFilePath -ErrorAction:SilentlyContinue) -as [Xml] if($nuspec_file) { $version = $nuspec_file.package.metadata.version -as [System.Version] if($version) { return $version } else { Write-Error "The NuSpec file contains no valid version information" } } else { Write-Error $("NuSpec file path invalid or it wasn't a valid nuspec file.") } } function Get-BuildMetaData { Write-Verbose $("Starting: '{0}'" -f $MyInvocation.MyCommand) Write-Debug $("Revision Type: {0}" -f $mr.RevisionType) Write-Debug $("Build Counter: {0}" -f $mr.BuildCounter) switch ($mr.RevisionType) { "SHA" { Write-Debug $("VCS Build Number: {0}" -f $mr.BuildVCSNumber) $short_hash = $mr.BuildVCSNumber.SubString(0,7) Write-Debug $("ShortHash: {0}" -f $short_hash) return $("{0}.{1}" -f $mr.BuildCounter, $short_hash) } "STD" { Write-Debug $("VCS Build Number: {0}" -f $mr.BuildVCSNumber) return $("{0}.{1}" -f $mr.BuildCounter, $mr.BuildVCSNumber) } default {return $mr.BuildCounter} #same as n/a } } function Invoke-Exit { param( [Int]$ExitCode ) [System.Environment]::Exit($ExitCode) } function Get-SemVer { [CmdletBinding()] param() Write-Verbose $("Starting: '{0}'" -f $MyInvocation.MyCommand) $version = $mr.ManualVersion if($mr.NuSpecFilePath -and [String]::IsNullOrWhiteSpace($version)) { $version = Get-NuSpecVersion -ea:Stop } if([String]::IsNullOrWhiteSpace($version)) { Write-Error "SemVer creation failed. Found no valid version." return } Write-Debug $("Version: {0}" -f $version) $mr.IgnoreBuildMetaData = [Bool]::Parse($mr.IgnoreBuildMetaData) Write-Debug $("Ignore MetaData: {0}" -f $mr.IgnoreBuildMetaData) if($mr.IgnoreBuildMetaData) { return $version } $build_metadata = Get-BuildMetaData Write-Debug $("Build MetaData: {0}" -f $build_metadata) return $("{0}+{1}" -f $version, $build_metadata) } function Set-PSConsole { try { $max = $host.UI.RawUI.MaxPhysicalWindowSize if($max) { $host.UI.RawUI.BufferSize = New-Object System.Management.Automation.Host.Size(9999,9999) $host.UI.RawUI.WindowSize = New-Object System.Management.Automation.Host.Size($max.Width,$max.Height) } } catch {} } $mr = @{ NuSpecFilePath = "%mr.SemVer.NuSpecFilePath%" BuildCounter = "%build.counter%" BuildVCSNumber = "%build.vcs.number%" ManualVersion = "%mr.SemVer.ManualVersion%" RevisionType = "%mr.SemVer.RevisionType%" IgnoreBuildMetaData = "%mr.SemVer.IgnoreMetaData%" } $VerbosePreference = "%mr.SemVer.Verbose%" $DebugPreference = "%mr.SemVer.Debug%" if ($env:TEAMCITY_VERSION) { Set-PSConsole } try { Get-SemVer -ea:Stop | Update-BuildNumber } catch { Write-Error $_ Invoke-Exit 1 } ]]> </param> </parameters> </runner> </build-runners> <requirements /> </settings> </meta-runner>