зеркало из https://github.com/microsoft/psi.git
108 строки
4.0 KiB
PowerShell
108 строки
4.0 KiB
PowerShell
## Copyright (c) Microsoft Corporation. All rights reserved.
|
|
## Licensed under the MIT License.
|
|
|
|
##-----------------------------------------------------------------------
|
|
## <copyright file="ApplyVersionToAssemblies.ps1">(c) http://TfsBuildExtensions.codeplex.com/. This source is subject to the Microsoft Permissive License. See http://www.microsoft.com/resources/sharedsource/licensingbasics/sharedsourcelicenses.mspx. All other rights reserved.</copyright>
|
|
##-----------------------------------------------------------------------
|
|
# Look for a 1.0.0.0 pattern in the build number.
|
|
# If found use it to version the assemblies.
|
|
#
|
|
# For example, if the 'Build number format' build process parameter
|
|
# $(BuildDefinitionName)_$(Year:yyyy).$(Month).$(DayOfMonth)$(Rev:.r)
|
|
# then your build numbers come out like this:
|
|
# "Build HelloWorld_2013.07.19.1"
|
|
# This script would then apply version 2013.07.19.1 to your assemblies.
|
|
|
|
# Enable -Verbose option
|
|
[CmdletBinding]
|
|
|
|
# Regular expression pattern to find the version in the build number
|
|
# and then apply it to the assemblies
|
|
$VersionStringRegex = "\d+\.\d+\.\d+\.\d+"
|
|
$VersionRegex = "\d+\,\d+\,\d+\,\d+"
|
|
|
|
# If this script is not running on a build server, remind user to
|
|
# set environment variables so that this script can be debugged
|
|
if(-not ($Env:BUILD_SOURCESDIRECTORY -and $Env:BUILD_BUILDNUMBER))
|
|
{
|
|
Write-Error "You must set the following environment variables"
|
|
Write-Error "to test this script interactively."
|
|
Write-Host '$Env:BUILD_SOURCESDIRECTORY - For example, enter something like:'
|
|
Write-Host '$Env:BUILD_SOURCESDIRECTORY = "C:\code\FabrikamTFVC\HelloWorld"'
|
|
Write-Host '$Env:BUILD_BUILDNUMBER - For example, enter something like:'
|
|
Write-Host '$Env:BUILD_BUILDNUMBER = "Build HelloWorld_0000.00.00.0"'
|
|
exit 1
|
|
}
|
|
|
|
# Make sure path to source code directory is available
|
|
if (-not $Env:BUILD_SOURCESDIRECTORY)
|
|
{
|
|
Write-Error ("BUILD_SOURCESDIRECTORY environment variable is missing.")
|
|
exit 1
|
|
}
|
|
elseif (-not (Test-Path $Env:BUILD_SOURCESDIRECTORY))
|
|
{
|
|
Write-Error "BUILD_SOURCESDIRECTORY does not exist: $Env:BUILD_SOURCESDIRECTORY"
|
|
exit 1
|
|
}
|
|
Write-Verbose "BUILD_SOURCESDIRECTORY: $Env:BUILD_SOURCESDIRECTORY"
|
|
|
|
# Make sure there is a build number
|
|
if (-not $Env:BUILD_BUILDNUMBER)
|
|
{
|
|
Write-Error ("BUILD_BUILDNUMBER environment variable is missing.")
|
|
exit 1
|
|
}
|
|
Write-Verbose "BUILD_BUILDNUMBER: $Env:BUILD_BUILDNUMBER"
|
|
|
|
# Get and validate the version data
|
|
$VersionData = [regex]::matches($Env:BUILD_BUILDNUMBER, $VersionStringRegex)
|
|
switch($VersionData.Count)
|
|
{
|
|
0
|
|
{
|
|
Write-Error "Could not find version number data in BUILD_BUILDNUMBER."
|
|
exit 1
|
|
}
|
|
1 {}
|
|
default
|
|
{
|
|
Write-Warning "Found more than instance of version data in BUILD_BUILDNUMBER."
|
|
Write-Warning "Will assume first instance is version."
|
|
}
|
|
}
|
|
$NewStringVersion = $VersionData[0]
|
|
$NewVersion = $NewStringVersion -replace "\.", ","
|
|
Write-Verbose "Version: $NewVersion, VersionString: $NewStringVersion"
|
|
|
|
# Apply the version to the assembly property files
|
|
$files = gci $Env:BUILD_SOURCESDIRECTORY -recurse -include AssemblyInfo.cpp,AssemblyInfo.cs,Directory.Build.props
|
|
if($files)
|
|
{
|
|
Write-Verbose "Will apply $NewStringVersion to $($files.count) files."
|
|
|
|
foreach ($file in $files) {
|
|
$filecontent = Get-Content($file)
|
|
attrib $file -r
|
|
$filecontent -replace $VersionStringRegex, $NewStringVersion -replace $VersionRegex, $NewVersion | Out-File -Encoding "UTF8" $file
|
|
Write-Verbose "$file.FullName - version applied"
|
|
}
|
|
}
|
|
else
|
|
{
|
|
Write-Warning "Found no files."
|
|
}
|
|
|
|
$files = gci $Env:BUILD_SOURCESDIRECTORY -recurse -include AssemblyInfo.rc
|
|
if($files)
|
|
{
|
|
Write-Verbose "Will apply $NewStringVersion to $($files.count) files."
|
|
|
|
foreach ($file in $files) {
|
|
$filecontent = Get-Content($file)
|
|
attrib $file -r
|
|
$filecontent -replace $VersionStringRegex, $NewStringVersion -replace $VersionRegex, $NewVersion | Out-File $file
|
|
Write-Verbose "$file.FullName - version applied"
|
|
}
|
|
}
|