1
+ Function Get-SolutionPath
2
+ {
3
+ Split-Path $PSScriptRoot - Parent
4
+ }
5
+
6
+ Function New-Release
7
+ {
8
+ [CmdletBinding ()]
9
+ param ($newVer , $oldVer )
10
+
11
+ $isVersionGiven = $true
12
+ if ($null -eq $newVer -or $null -eq $oldVer )
13
+ {
14
+ Write-Warning " Parameters are null. Checking changelog for version..."
15
+ $isVersionGiven = $false
16
+ }
17
+
18
+ $solutionRoot = (Get-SolutionPath )
19
+
20
+ $enginePath = Join-Path $solutionRoot " Engine"
21
+ # Check if the changelog has entry for $newVer
22
+ $moduleManifestPath = Join-Path $enginePath " PSScriptAnalyzer.psd1"
23
+ $changelogPath = Join-Path $solutionRoot ' CHANGELOG.MD'
24
+ $matches = [regex ]::new(" \[(\d+\.\d+\.\d+)\]" ).Matches((get-content $changelogPath - raw))
25
+ $versions = $matches | ForEach-Object {$_.Groups [1 ].Value}
26
+ if ($versions.Count -le 2 )
27
+ {
28
+ throw " This edge condition for the number versions less that 2 is not implemented."
29
+ }
30
+
31
+ if ($isVersionGiven )
32
+ {
33
+ Function Test-IfNotPresentInChangelog
34
+ {
35
+ param ($extractedVersion , $inputVersion )
36
+ if ($extractedVersion -ne $inputVersion )
37
+ {
38
+ throw (" Version {0} does not exist in changelog. Please update changelog." -f $inputVersion )
39
+ }
40
+ }
41
+
42
+ Test-IfNotPresentInChangelog $versions [0 ] $newVer
43
+ Test-IfNotPresentInChangelog $versions [1 ] $oldVer
44
+ }
45
+ else
46
+ {
47
+ $newVer = $versions [0 ]
48
+ $oldVer = $versions [1 ]
49
+ $caption = " Version Check"
50
+ $query = " Is version {0} the next release and version {1} the previous release ?" -f $newVer , $oldVer
51
+ [bool ] $yesToAll = $false
52
+ [bool ] $noToAll = $false
53
+
54
+ if (! $PSCmdlet.ShouldContinue ($query , $caption , $false , [ref ] $yesToAll , [ref ] $noToAll ))
55
+ {
56
+ return " Aborting..."
57
+ }
58
+ }
59
+
60
+ Update-Version $newVer $oldVer $solutionRoot
61
+
62
+
63
+ $changelogRegexPattern = " ##\s\[{0}\].*\n((?:.*\n)+)##\s\[{1}\].*" `
64
+ -f [regex ]::Escape($newVer ), [regex ]::Escape($oldVer )
65
+ $changelogRegex = [regex ]::new($changelogRegexPattern )
66
+ $matches = $changelogRegex.Match ((get-content $changelogPath - raw))
67
+ $changelog = $matches.Groups [1 ].Value.Trim()
68
+ Write-Host $changelog
69
+
70
+ $releaseNotesPattern = `
71
+ " (?<releaseNotesBegin>ReleaseNotes\s*=\s*@')(?<releaseNotes>(?:.*\n)*)(?<releaseNotesEnd>'@)"
72
+ $replacement = " `$ {releaseNotesBegin}" `
73
+ + [environment ]::NewLine `
74
+ + $changelog `
75
+ + [environment ]::NewLine `
76
+ + " `$ {releaseNotesEnd}"
77
+ $r = [regex ]::new($releaseNotesPattern )
78
+ $updatedManifestContent = $r.Replace ([System.IO.File ]::ReadAllText($moduleManifestPath ), $replacement )
79
+ Set-ContentUtf8NoBom $moduleManifestPath $updatedManifestContent
80
+
81
+ # build the module
82
+ pushd $solutionRoot
83
+ remove-item out/ - recurse - force
84
+ .\buildCoreClr.ps1 - Framework net451 - Configuration Release - Build
85
+ .\buildCoreClr.ps1 - Framework net451 - Configuration PSV3Release - Build
86
+ .\buildCoreClr.ps1 - Framework netstandard1.6 - Configuration Release - Build
87
+ .\build.ps1 - BuildDocs
88
+ popd
89
+
90
+ }
91
+
92
+ function Combine-Path
93
+ {
94
+ if ($args.Count -lt 2 )
95
+ {
96
+ throw " give more than equal to 2 arguments"
97
+ }
98
+
99
+ $path = Join-Path $args [0 ] $args [1 ]
100
+ for ($k = 2 ; $k -lt $args.Count ; $k ++ )
101
+ {
102
+ $path = Join-Path $path $args [$k ]
103
+ }
104
+
105
+ $path
106
+ }
107
+
108
+ function Update-Version
109
+ {
110
+ param (
111
+ [string ] $newVer ,
112
+ [string ] $oldVer ,
113
+ [string ] $solutionPath
114
+ )
115
+
116
+ $ruleJson = Combine- Path $solutionPath ' Rules' ' project.json'
117
+ $engineJson = Combine- Path $solutionPath ' Engine' ' project.json'
118
+ $pssaManifest = Combine- Path $solutionPath ' Engine' ' PSScriptAnalyzer.psd1'
119
+
120
+ Update-PatternInFile $ruleJson ' "version": "{0}"' $oldVer $newVer
121
+ Update-PatternInFile $ruleJson ' "Engine": "{0}"' $oldVer $newVer
122
+ Update-PatternInFile $engineJson ' "version": "{0}"' $oldVer $newVer
123
+ Update-PatternInFile $pssaManifest " ModuleVersion = '{0}'" $oldVer $newVer
124
+ }
125
+
126
+ function Update-PatternInFile
127
+ {
128
+ param ($path , $unformattedPattern , $oldVal , $newVal )
129
+
130
+ $content = Get-Content $path
131
+ $newcontent = $content -replace ($unformattedPattern -f $oldVal ), ($unformattedPattern -f $newVal )
132
+ Set-ContentUtf8NoBom $path $newcontent
133
+ }
134
+
135
+ function Set-ContentUtf8NoBom {
136
+ param ($path , $content )
137
+ $utfNoBom = [System.Text.UTF8Encoding ]::new($false )
138
+ [System.IO.File ]::WriteAllLines($path , $content , $utfNoBom )
139
+ }
0 commit comments