-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathInvoke-Generate.ps1
81 lines (70 loc) · 3.24 KB
/
Invoke-Generate.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
[CmdletBinding()]
param(
[Parameter(Mandatory=$false)]
[ValidateScript({Test-Path -Path $_ -PathType Container})]
[string]$ProjectDirectory
,
[Parameter(Mandatory=$true)]
[ValidateNotNullOrEmpty()]
[string]$ReleaseTagRef
,
[Parameter(Mandatory=$false)]
[ValidateNotNullOrEmpty()]
[string]$ReleaseNotesVariant
,
[Parameter(Mandatory=$false)]
[ValidateNotNullOrEmpty()]
[string]$ReleaseNotesPath
<# Examples
# Maximum defaults
./Invoke-Generate.ps1 -ReleaseTagRef v1.0.12
# Default -ReleaseNotesVariant and -ReleaseNotesPath
./Invoke-Generate.ps1 -ProjectDirectory '/path/to/repository' -ReleaseTagRef v1.0.12
# Default -ReleaseNotesPath
./Invoke-Generate.ps1 -ProjectDirectory '/path/to/repository' -ReleaseTagRef v1.0.12 -ReleaseNotesVariant 'Changes-HashSubject-NoMerges'
# Custom -ReleaseNotesPath relative to -ProjectDirectory
./Invoke-Generate.ps1 -ProjectDirectory '/path/to/repository' -ReleaseTagRef v1.0.12 -ReleaseNotesVariant 'Changes-HashSubject-NoMerges' -ReleaseNotesPath 'my-custom-release-notes.md'
# No defaults
./Invoke-Generate.ps1 -ProjectDirectory '/path/to/repository' -ReleaseTagRef v1.0.12 -ReleaseNotesVariant 'Changes-HashSubject-NoMerges' -ReleaseNotesPath '/path/to/repository/.release-notes.md'
#>
)
$ErrorActionPreference = 'Stop'
$ErrorView = 'NormalView'
$VerbosePreference = 'Continue'
Set-StrictMode -Version Latest
try {
Push-Location $PSScriptRoot
Import-Module "$(git rev-parse --show-toplevel)\src\PSRepositoryReleaseManager\PSRepositoryReleaseManager.psm1" -Force -Verbose
# Generate release notes
if ($private:ProjectDirectory) {
$private:ProjectDir = $private:ProjectDirectory
}else {
$private:superProjectDir = git rev-parse --show-superproject-working-tree
if ($private:superProjectDir) {
$private:ProjectDir = $private:superProjectDir
"Using superproject path '$private:ProjectDir'" | Write-Verbose
}else {
$private:ProjectDir = git rev-parse --show-toplevel
"Superproject does not exist. Using project path '$private:ProjectDir'" | Write-Verbose
}
}
$private:generateArgs = @{
Path = $private:ProjectDir
TagName = $private:ReleaseTagRef
Variant = if ($private:ReleaseNotesVariant) { $private:ReleaseNotesVariant } else { 'VersionDate-HashSubject-NoMerges' }
ReleaseNotesPath = if ($private:ReleaseNotesPath) {
"Using specified release notes path '$private:ReleaseNotesPath'" | Write-Verbose
if ([System.IO.Path]::IsPathRooted($private:ReleaseNotesPath)) { $private:ReleaseNotesPath }
else { "$private:ProjectDir/$private:ReleaseNotesPath" }
}else {
$private:defaultReleaseNotesPath = "$(git rev-parse --show-toplevel)/.release-notes.md"
"Using the default release notes path '$private:defaultReleaseNotesPath'" | Write-Verbose
$private:defaultReleaseNotesPath
}
}
Generate-ReleaseNotes @private:generateArgs
}catch {
throw
}finally {
Pop-Location
}