forked from keenlabs/keen-sdk-net
-
Notifications
You must be signed in to change notification settings - Fork 0
/
NewSemVer.ps1
113 lines (87 loc) · 3.98 KB
/
NewSemVer.ps1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
<#
NewSemVer.ps1
This utility helps to update the .NET assembly versions, rebuild the solution and create a new
NuGet package with that same version.
#>
Param(
[parameter()]
[alias('v')]
$version,
[parameter()]
[alias('h', '?')]
[switch]
$help
)
$semVerPattern = '\d+.\d+.\d+(-[a-zA-Z0-9-]+)?'
<#
Print usage info.
#>
function Usage {
"Updates the AssemblyVersion, AssemblyInformationalVersion and AssemblyFileVersion in "
"the SharedVersionInfo.cs file. Then, tries to create a new NuGet package, which will fail if "
"nuget.exe isn't in the PATH or the script's directory.`n"
".\NewSemVer.ps1 <VersionNumber>`n"
" <VersionNumber> The version number to set, for example: 1.2.3"
" If prelease/metadata info (e.g. 1.2.3-beta) is provided, only "
" AssemblyInformationalVersion will include the extra info.`n"
}
function Get-MajMinPatchVersion([string] $version) {
return $version.Split('-'.ToCharArray(), 2)[0]
}
<#
Effect version updates in SharedVersionInfo.cs.
#>
function Update-AssemblyVersionAttributes ([string] $version) {
$majMinPatchPattern = '[0-9]+(\.([0-9]+|\*)){1,3}'
$netStandardVersionPattern = "<Version>$majMinPatchPattern</Version>"
$assemblyVersionPattern = "AssemblyVersion\(`"$majMinPatchPattern`"\)"
$assemblyFileVersionPattern = "AssemblyFileVersion\(`"$majMinPatchPattern`"\)"
$assemblyInformationalVersionPattern = "AssemblyInformationalVersion\(`"$semVerPattern`"\)"
$majMinPatchVersion = Get-MajMinPatchVersion($version)
$newNetStandardVersion = "<Version>$majMinPatchVersion</Version>"
$newAssemblyVersion = "AssemblyVersion(`"$majMinPatchVersion`")"
$newAssemblyfileVersion = "AssemblyFileVersion(`"$majMinPatchVersion`")"
$newAssemblyInformationalVersion = "AssemblyInformationalVersion(`"$version`")"
Get-ChildItem -r -filter .\* -Include SharedVersionInfo.cs, Keen.NetStandard.csproj | ForEach-Object {
$filename = $_.Directory.ToString() + [IO.Path]::DirectorySeparatorChar + $_.Name
"Setting version to $version in $filename"
(Get-Content $filename) | ForEach-Object {
% {$_ -replace $netStandardVersionPattern, $newNetStandardVersion } |
% {$_ -replace $assemblyVersionPattern, $newAssemblyVersion } |
% {$_ -replace $assemblyFileVersionPattern, $newAssemblyfileVersion } |
% {$_ -replace $assemblyInformationalVersionPattern, $newAssemblyInformationalVersion }
} | Set-Content $filename
}
}
# Handle args.
if ($help -or ($version -notmatch "^$semVerPattern$")) {
Usage
return;
}
# Update the version for the .NET assemblies.
Update-AssemblyVersionAttributes $version
# Rebuild the solution to bake the new version into the assemblies. This is using the default
# VS2017 location for MSBuild, so change it as needed (Community vs Enterprise vs Preview, etc.).
#
# C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0\Bin
#
# Note that since this solution now includes a multi-targeting .NET Standard 2.0 project and a
# .NET Core test app, you'll need at least VS 2017 15.3.
$msBuildExe = (${env:ProgramFiles(x86)}, 'Microsoft Visual Studio', '2017', 'Enterprise', 'MSBuild', '15.0', 'bin', 'msbuild.exe') `
-join [IO.Path]::DirectorySeparatorChar
'MSBuild EXE: ' + $msBuildExe
& $msBuildExe ('Keen.sln','/verbosity:q','/p:configuration=Release','/t:Clean,Build')
if (-not $?) {
Write-Debug 'Failed to build solution!'
exit
}
# Execute the nuget CLI either from the script's location or the PATH.
$scriptPath = Split-Path -Path $MyInvocation.MyCommand.Path
$env:Path += ";$scriptPath"
# Create the .nupkg and pass the version to override the .nuspec token(s).
& 'nuget.exe' pack KeenClient.nuspec -properties "version=$version"
# Create another .nupkg for the .NET Standard stuff based on the .csproj, which will be the only .nupkg going forward
& pushd .\Keen.NetStandard
& dotnet clean
& dotnet pack -c Release
& popd