forked from PowerShell/PowerShell
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsetReleaseTag.ps1
More file actions
160 lines (131 loc) · 5.58 KB
/
setReleaseTag.ps1
File metadata and controls
160 lines (131 loc) · 5.58 KB
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
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
param(
[Parameter(HelpMessage='ReleaseTag from the job. Set to "fromBranch" or $null to update using the branch name')]
[string]$ReleaseTag,
[Parameter(HelpMessage='The branch name used to update the release tag.')]
[string]$Branch=$env:BUILD_SOURCEBRANCH,
[Parameter(HelpMessage='The variable name to put the new release tagin.')]
[string]$Variable='ReleaseTag',
[switch]$CreateJson
)
function New-BuildInfoJson {
param(
[parameter(Mandatory = $true)]
[string]
$ReleaseTag,
[switch] $IsDaily
)
$blobName = $ReleaseTag -replace '\.', '-'
$isPreview = $ReleaseTag -like '*-*'
$filename = 'stable.json'
if($isPreview)
{
$filename = 'preview.json'
}
if($IsDaily.IsPresent)
{
$filename = 'daily.json'
}
## Get the UTC time and round up to the second.
$dateTime = [datetime]::UtcNow
$dateTime = [datetime]::new($dateTime.Ticks - ($dateTime.Ticks % [timespan]::TicksPerSecond), $dateTime.Kind)
@{
ReleaseTag = $ReleaseTag
ReleaseDate = $dateTime
BlobName = $blobName
} | ConvertTo-Json | Out-File -Encoding ascii -Force -FilePath $filename
$resolvedPath = (Resolve-Path -Path $filename).ProviderPath
$vstsCommandString = "vso[task.setvariable variable=BuildInfoPath]$resolvedPath"
Write-Verbose -Message "$vstsCommandString" -Verbose
Write-Host -Object "##$vstsCommandString"
# Upload for ADO pipelines
Write-Host "##vso[artifact.upload containerfolder=BuildInfoJson;artifactname=BuildInfoJson]$resolvedPath"
# Copy to location where OneBranch Pipelines uploads from
# if the environment variable does not exist, we are not in OneBranch. So just return.
if (-not $env:ob_outputDirectory) {
return
}
if (-not (Test-Path $env:ob_outputDirectory)) {
$null = New-Item -Path $env:ob_outputDirectory -ItemType Directory -Force -Verbose
}
Copy-Item $resolvedPath -Destination $env:ob_outputDirectory -Force -Verbose
}
# Script to set the release tag based on the branch name if it is not set or it is "fromBranch"
# the branch name is expected to be release-<semver> or <previewname>
# VSTS passes it as 'refs/heads/release-v6.0.2'
$branchOnly = $Branch -replace '^refs/heads/';
$branchOnly = $branchOnly -replace '[_\-]'
$msixType = 'preview'
$isDaily = $false
if($ReleaseTag -eq 'fromBranch' -or !$ReleaseTag)
{
# Branch is named release-<semver>
$releaseBranchRegex = '^.*((release/|rebuild/.*rebuild))'
if($Branch -match $releaseBranchRegex)
{
$msixType = 'release'
Write-Verbose "release branch:" -Verbose
$releaseTag = $Branch -replace '^.*((release|rebuild)/)'
$vstsCommandString = "vso[task.setvariable variable=$Variable]$releaseTag"
Write-Verbose -Message "setting $Variable to $releaseTag" -Verbose
Write-Host -Object "##$vstsCommandString"
if ($CreateJson.IsPresent)
{
New-BuildInfoJson -ReleaseTag $releaseTag
}
}
elseif(($branchOnly -eq 'master' -and $env:BUILD_REASON -ne 'Manual') -or $branchOnly -like '*dailytest*')
{
$isDaily = $true
Write-Verbose "daily build" -Verbose
$jsonPath = "${env:SYSTEM_ARTIFACTSDIRECTORY}\BuildInfoJson\daily.json"
if (test-path -Path $jsonPath) {
Write-Verbose "restoring from buildinfo json..." -Verbose
$buildInfo = Get-Content -Path $jsonPath | ConvertFrom-Json
$releaseTag = $buildInfo.ReleaseTag
} else {
Write-Verbose "creating from branch counter and metadata.json..." -Verbose
$metaDataJsonPath = Join-Path $PSScriptRoot -ChildPath '..\metadata.json'
$metadata = Get-Content $metaDataJsonPath | ConvertFrom-Json
$versionPart = $metadata.PreviewReleaseTag
if ($versionPart -match '-.*$') {
$versionPart = $versionPart -replace '-.*$'
}
$releaseTag = "$versionPart-daily$((Get-Date).ToString('yyyyMMdd')).$($env:BRANCHCOUNTER)"
}
$vstsCommandString = "vso[task.setvariable variable=$Variable]$releaseTag"
Write-Verbose -Message "setting $Variable to $releaseTag" -Verbose
Write-Host -Object "##$vstsCommandString"
if ($CreateJson.IsPresent)
{
New-BuildInfoJson -ReleaseTag $releaseTag -IsDaily
}
}
else
{
Write-Verbose "non-release branch" -Verbose
# Branch is named <previewname>
# Get version from metadata and append -<previewname>
$metaDataJsonPath = Join-Path $PSScriptRoot -ChildPath '..\metadata.json'
$metadata = Get-Content $metaDataJsonPath | ConvertFrom-Json
$versionPart = $metadata.PreviewReleaseTag
if($versionPart -match '-.*$')
{
$versionPart = $versionPart -replace '-.*$'
}
$releaseTag = "$versionPart-$branchOnly"
$vstsCommandString = "vso[task.setvariable variable=$Variable]$releaseTag"
Write-Verbose -Message "setting $Variable to $releaseTag" -Verbose
Write-Host -Object "##$vstsCommandString"
if ($CreateJson.IsPresent)
{
New-BuildInfoJson -ReleaseTag $releaseTag
}
}
}
$vstsCommandString = "vso[task.setvariable variable=IS_DAILY]$($isDaily.ToString().ToLowerInvariant())"
Write-Verbose -Message "$vstsCommandString" -Verbose
Write-Host -Object "##$vstsCommandString"
$vstsCommandString = "vso[task.setvariable variable=MSIX_TYPE]$msixType"
Write-Verbose -Message "$vstsCommandString" -Verbose
Write-Host -Object "##$vstsCommandString"
Write-Output $releaseTag