Skip to content

Instantly share code, notes, and snippets.

@alkampfergit
Created July 9, 2015 10:16
Show Gist options
  • Save alkampfergit/5d7448fb7b65e70f83bd to your computer and use it in GitHub Desktop.
Save alkampfergit/5d7448fb7b65e70f83bd to your computer and use it in GitHub Desktop.
Metarunner used to install teamcity gitversion plugin
<?xml version="1.0" encoding="UTF-8"?>
<meta-runner name="GitVersion">
<description>Execute GitVersion</description>
<settings>
<parameters>
<param name="mr.GitVersion.gitCheckoutDir" value="" spec="text description='The directory containing .git relative to the working directory. Leave blank for the working directory itself.' display='normal' label='Git Repository Directory:'" />
<param name="mr.GitVersion.output" value="buildserver" spec="checkbox checkedValue='buildserver' description='Update the TeamCity build number or output JSON?' display='normal' label='Update TeamCity build version:' uncheckedValue='json'" />
<param name="mr.GitVersion.outputFile" value="" spec="text description='Optional path to a file relative to the working directory to output the json into if you selected JSON above.' display='normal' label='Json output file:'" />
<param name="mr.GitVersion.url" value="" spec="text description='Optional URL to remote git repository if you have not already checked one out.' display='normal' label='Remote Git Repository:'" />
<param name="mr.GitVersion.branch" value="" spec="text description='Remote branch to use.' display='normal' label='Remote Git Branch:'" />
<param name="mr.GitVersion.username" value="" spec="text description='Remote git repo username (if private).' display='normal' label='Remote Git Username:'" />
<param name="mr.GitVersion.password" value="" spec="password description='Remote git repo password (if private).' display='normal' label='Remote Git Password:'" />
<param name="mr.GitVersion.logFile" value="" spec="text description='Optional path to a file relative to the working directory to log output messages to.' display='normal' label='Log File:'" />
<param name="mr.GitVersion.exec" value="" spec="text description='Optional executable relative to the working directory to run using GitVersion - environment vars will be available to the process.' display='normal' label='Executable:'" />
<param name="mr.GitVersion.execArgs" value="" spec="text description='If an Executable is specified then arguments to pass to the executable.' display='normal' label='Executable Arguments:'" />
<param name="mr.GitVersion.proj" value="" spec="text description='Optional MSBuild file relative to the working directory to run using GitVersion - environment vars will be available to the process.' display='normal' label='MSBuild File:'" />
<param name="mr.GitVersion.projArgs" value="" spec="text description='If an MSBuild file is specified then arguments to pass to MSBuild.' display='normal' label='MSBuild Arguments:'" />
<param name="mr.GitVersion.updateAssemblyInfo" value="false" spec="checkbox checkedValue='true' description='Update any AssemblyInfo files while running the Executable or MSBuild file?' display='normal' label='Update AssemblyInfo Files:' uncheckedValue='false'" />
<param name="mr.GitVersion.updateGitVersion" value="false" spec="checkbox checkedValue='true' description='Use Chocolatey to check whether a new version of GitVersion is available?' display='normal' label='Update GitVersion:' uncheckedValue='false'" />
</parameters>
<build-runners>
<runner name="GitVersion" 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="teamcity.step.mode" value="default" />
<param name="jetbrains_powershell_script_code"><![CDATA[[CmdletBinding()]
Param (
[string] $workingDir = (Join-Path "%teamcity.build.workingDir%" "%mr.GitVersion.gitCheckoutDir%"),
[string] $output = '%mr.GitVersion.output%',
[string] $outputFile = '%mr.GitVersion.outputFile%',
[string] $url = '%mr.GitVersion.url%',
[string] $branch = '%mr.GitVersion.branch%',
[string] $username = '%mr.GitVersion.username%',
[string] $password = '%mr.GitVersion.password%',
[string] $logFile = '%mr.GitVersion.logFile%',
[string] $exec = '%mr.GitVersion.exec%',
[string] $execArgs = '%mr.GitVersion.execArgs%',
[string] $proj = '%mr.GitVersion.proj%',
[string] $projArgs = '%mr.GitVersion.projArgs%',
[string] $updateAssemblyInfo = '%mr.GitVersion.updateAssemblyInfo%',
[string] $updateGitVersion = '%mr.GitVersion.updateGitVersion%'
)
$ErrorActionPreference = "Stop"
function Join-ToWorkingDirectoryIfSpecified($path) {
$workingDir = "%teamcity.build.workingDir%"
if ($workingDir -match "teamcity.build.workingDir") {
return $path
}
if (Test-IsSpecified $path) {
return Join-Path $workingDir $path
}
return $path
}
function Test-IsSpecified ($value) {
if ($value -ne $null -and $value -ne "" -and -not ($value -match "mr.GitVersion.")) {
return $true
}
return $false
}
function Append-IfSpecified($appendTo, $command, $value) {
if (Test-IsSpecified $value) {
return "$appendTo /$command '$value'"
}
return $appendTo
}
function Build-Arguments() {
$args = "";
if (Test-IsSpecified $workingDir) {
$workingDir = $workingDir.TrimEnd('\')
$args = """$workingDir"""
}
$args = Append-IfSpecified $args "url" $url
$args = Append-IfSpecified $args "b" $branch
$args = Append-IfSpecified $args "u" $username
$args = Append-IfSpecified $args "p" $password
$args = Append-IfSpecified $args "output" $output
$args = Append-IfSpecified $args "l" $logFile
if (Test-IsSpecified $exec) {
$args = Append-IfSpecified $args "exec" $exec
$args = Append-IfSpecified $args "execargs" $execargs
}
if (Test-IsSpecified $proj) {
$args = Append-IfSpecified $args "proj" $proj
$args = Append-IfSpecified $args "projargs" $projargs
}
if ($updateAssemblyInfo -eq "true") {
$args = "$args /UpdateAssemblyInfo true"
}
if ($output -eq "json" -and (Test-IsSpecified $outputFile)) {
$args = "$args > ""$outputFile"""
}
return $args
}
try {
$chocolateyDir = $null
if ($env:ChocolateyInstall -ne $null) {
$chocolateyDir = $env:ChocolateyInstall
} elseif (Test-Path (Join-Path $env:SYSTEMDRIVE Chocolatey)) {
$chocolateyDir = Join-Path $env:SYSTEMDRIVE Chocolatey
} elseif (Test-Path (Join-Path ([Environment]::GetFolderPath("CommonApplicationData")) Chocolatey)) {
$chocolateyDir = Join-Path ([Environment]::GetFolderPath("CommonApplicationData")) Chocolatey
}
if ($chocolateyDir -eq $null) {
Write-Host "##teamcity[progressMessage 'Chocolatey not installed; installing Chocolatey']"
iex ((new-object net.webclient).DownloadString('https://chocolatey.org/install.ps1'))
$chocolateyDir = Join-Path ([Environment]::GetFolderPath("CommonApplicationData")) Chocolatey
if (-not (Test-Path $chocolateyDir)) {
throw "Error installing Chocolatey"
}
} else {
Write-Host "Chocolatey already installed"
}
$chocolateyBinDir = Join-Path $chocolateyDir "bin"
$gitversion = Join-Path $chocolateyBinDir "gitversion.bat"
if (-not (Test-Path $gitversion)) {
$gitversion = Join-Path $chocolateyBinDir "gitversion.exe"
}
$choco = Join-Path $chocolateyDir "choco.exe"
if (-not (Test-Path $gitversion)) {
Write-Host "##teamcity[progressMessage 'GitVersion not installed; installing GitVersion']"
iex "$choco install gitversion.portable -y"
if ($LASTEXITCODE -ne 0) {
throw "Error installing GitVersion"
}
} else {
Write-Host "GitVersion already installed"
}
if ($updateGitVersion -eq "true") {
Write-Host "##teamcity[progressMessage 'Checking for updated version of GitVersion']"
iex "$choco update gitversion.portable -y"
if ($LASTEXITCODE -ne 0) {
throw "Error updating GitVersion"
}
} else {
Write-Host "GitVersion will not be updated"
}
$outputFile = Join-ToWorkingDirectoryIfSpecified $outputFile
$logFile = Join-ToWorkingDirectoryIfSpecified $logFile
$exec = Join-ToWorkingDirectoryIfSpecified $exec
$proj = Join-ToWorkingDirectoryIfSpecified $proj
$arguments = Build-Arguments
$safeArgs = $arguments.Replace("'", """")
if($password) {
$safeArgs = $arguments.Replace($password, "*****")
}
Write-Host "##teamcity[progressMessage 'Running: $gitversion $safeArgs']"
iex "$gitversion $arguments"
if ($LASTEXITCODE -ne 0) {
throw "Error running GitVersion"
}
}
catch {
Write-Host "##teamcity[buildStatus text='$_' status='FAILURE']"
Write-Host "##teamcity[message text='$_' status='ERROR']"
exit 1
}]]></param>
</parameters>
</runner>
</build-runners>
<requirements />
</settings>
</meta-runner>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment