Skip to content

Commit 1b86687

Browse files
authored
Convert release build to use generated matrix (PowerShell#361)
1 parent 889f6dc commit 1b86687

4 files changed

Lines changed: 178 additions & 137 deletions

File tree

.vsts-ci/phase.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ jobs:
4545
condition: and( succeededOrFailed(), ne(variables['Channel'],''))
4646
4747
- pwsh: |
48-
./build.ps1 -build -name '$(ImageName)' -IncludeKnownIssues -Channel '$(Channel)' -TestLogPostfix '$(ImageName)-stable' ${{ parameters.ciParameter }} -Repository stable/powershell
48+
./build.ps1 -build -name '$(ImageName)' -IncludeKnownIssues -Channel '$(Channel)' -TestLogPostfix '$(ImageName)-$(Channel)' ${{ parameters.ciParameter }} -Repository $(Channel)/powershell
4949
displayName: $(ImageName) $(Channel)
5050
condition: and( succeededOrFailed(), ne(variables['Channel'],''))
5151
continueOnError: ${{ parameters.continueonerror }}

.vsts-ci/releasePhase.yml

Lines changed: 46 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,26 @@
11
parameters:
2-
pool: 'Hosted Ubuntu 1604'
3-
channel: 'stable'
2+
vmImage: 'ubuntu-16.04'
43
jobName: 'none'
54
releaseTag: ''
65
ACR: 'no'
6+
maxParallel: 5
7+
dependsOn: []
78

89
jobs:
910
- job: ${{ parameters.jobName }}
11+
dependsOn:
12+
${{ parameters.dependsOn }}
13+
strategy:
14+
matrix: $[ ${{ parameters.matrix }} ]
15+
maxParallel: ${{ parameters.maxParallel }}
1016
variables:
1117
dockerImage: 'powershell'
1218
Channel: ${{ parameters.channel }}
1319
ACR: ${{ parameters.ACR }}
1420
releaseTag: ${{ parameters.releaseTag }}
1521

16-
pool: ${{ parameters.pool }}
22+
pool:
23+
vmImage: ${{ parameters.vmImage }}
1724
timeoutInMinutes: 135
1825

1926
displayName: ${{ parameters.jobName }}
@@ -22,35 +29,56 @@ jobs:
2229
- pwsh: |
2330
Write-Host "##vso[task.setvariable variable=ACR_NAME;]$env:ACR_NAME_VAR"
2431
displayName: 'Enable ACR'
25-
26-
- pwsh: |
27-
$version = '$(releaseTag)' -replace '^v', ''
28-
Write-Host "##vso[task.setvariable variable=Version;]$version"
32+
condition: and( succeededOrFailed(), ne(variables['Channel'],''))
33+
34+
- powershell: |
35+
switch('$(Channel)') {
36+
'stable' {
37+
$releaseTag = '$(stableReleaseTag)'
38+
$version = '$(stableReleaseTag)' -replace '^v', ''
39+
}
40+
'preview' {
41+
$releaseTag = '$(previewReleaseTag)'
42+
$version = '$(previewReleaseTag)' -replace '^v', ''
43+
}
44+
default {
45+
throw "Unknown channel '$(Channel)'"
46+
}
47+
}
48+
$namespace = $releaseTag.ToLowerInvariant()
49+
Write-Host "##vso[task.setvariable variable=dockerNamespace;]$namespace"
50+
$version = $releaseTag -replace '^v', ''
51+
$command = "vso[task.setvariable variable=version]$version"
52+
Write-Host $command
53+
Write-Host "##$command"
2954
displayName: 'Set Version'
55+
name: get
56+
condition: and( succeededOrFailed(), ne(variables['Channel'],''))
3057
3158
- pwsh: |
32-
$namespace = '$(releaseTag)'.ToLowerInvariant()
33-
Write-Host "##vso[task.setvariable variable=dockerNamespace;]$namespace"
34-
displayName: 'Set dockerNamespace'
35-
36-
- pwsh: 'Get-ChildItem env:'
59+
Get-ChildItem env: | Out-String -Width 1000
3760
displayName: 'Capture Environment'
61+
condition: and( succeededOrFailed(), ne(variables['Channel'],''))
3862
3963
- pwsh: 'docker login $(dockerHost) -u $(dockerUserName) -p $(dockerKey)'
4064
displayName: 'docker login'
65+
condition: and( succeededOrFailed(), ne(variables['Channel'],''))
4166

4267
- pwsh: ' az login --service-principal -u $(az_url) -p $(az_key) --tenant $(az_name)'
4368
displayName: 'az login'
69+
condition: and( succeededOrFailed(), ne(variables['Channel'],''))
4470

4571
- pwsh: |
4672
az account set --subscription $(StorageSubscriptionName)
47-
$querystring = az storage account generate-sas --account-name $(StorageAccount) --services b --resource-types o --expiry ((get-date).AddDays(2).ToString("yyyy-MM-dd")) --permission r --https-only | convertfrom-json
73+
$querystring = az storage account generate-sas --account-name $(StorageAccount) --services b --resource-types o --expiry ((get-date).AddDays(1).ToString("yyyy-MM-dd")) --permission r --https-only | convertfrom-json
4874
$url = "https://$(StorageAccount).blob.core.windows.net/?$querystring"
4975
Write-Host "##vso[task.setvariable variable=SasUrl;]$url"
5076
displayName: 'Set SasUrl variable'
77+
condition: and( succeededOrFailed(), ne(variables['Channel'],''))
5178
5279
- pwsh: 'Install-module pester -Scope CurrentUser -Force -SkipPublisherCheck'
5380
displayName: 'Install Pester'
81+
condition: and( succeededOrFailed(), ne(variables['Channel'],''))
5482

5583
- pwsh: |
5684
az account set --subscription $(AcrSubscriptionName)
@@ -72,25 +100,21 @@ jobs:
72100
$extraParams.Add('SasUrl',$env:SASURL)
73101
}
74102
75-
if($env:$(Channel) -eq 'true')
76-
{
77-
./build.ps1 -Build -ImageName $(dockerHost) -All -Channel $(channel) @extraParams -version '$(Version)' -Repository $(dockerNamespace)/$(dockerImage)
78-
}
79-
else
80-
{
81-
Write-Host 'Current channel disabled, skipping ...'
82-
}
103+
./build.ps1 -Build -ImageName $(dockerHost) -name '$(ImageName)' -Channel $(channel) -TestLogPostfix '$(ImageName)-$(Channel)' @extraParams -version '$(Version)' -Repository $(dockerNamespace)/$(dockerImage)
83104
displayName: 'Build All $(Channel)'
105+
condition: and( succeededOrFailed(), ne(variables['Channel'],''))
84106
85107
- pwsh: 'docker logout $(dockerHost)'
86108
displayName: 'docker logout'
87-
condition: always()
109+
condition: and( always(), ne(variables['Channel'],''))
88110

89111
- pwsh: 'az logout'
90112
displayName: 'az logout'
113+
condition: and( succeededOrFailed(), ne(variables['Channel'],''))
91114

92115
- task: ms.vss-governance-buildtask.governance-build-task-component-detection.ComponentGovernanceComponentDetection@0
93116
displayName: 'Component Detection'
117+
condition: and( succeededOrFailed(), ne(variables['Channel'],''))
94118
inputs:
95119
sourceScanPath: '$(Build.SourcesDirectory)'
96120
snapshotForceEnabled: true

.vsts-ci/releaseStage.yml

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
parameters:
2+
channel: 'preview'
3+
vmImage: 'ubuntu-16.04'
4+
acr: 'All'
5+
useacr: 'false'
6+
osFilter: 'All'
7+
8+
stages:
9+
- stage: GenerateYaml_${{ parameters.channel }}
10+
dependsOn: []
11+
displayName: Build ${{ parameters.channel }}
12+
jobs:
13+
- job: GenerateYaml_${{ parameters.channel }}
14+
pool:
15+
vmImage: ubuntu-16.04
16+
displayName: Generate Matrix YAML ${{ parameters.channel }}
17+
steps:
18+
- pwsh: |
19+
./build.ps1 -GenerateMatrixJson -Channel ${{ parameters.channel }} -Verbose -Acr ${{ parameters.acr }} -OsFilter ${{ parameters.osFilter }}
20+
displayName: Generate Matrix YAML
21+
condition: succeededOrFailed()
22+
name: matrix
23+
- pwsh: |
24+
dir env:matrix_* | out-string -Width 1000
25+
displayName: Capture Matrix YAML
26+
condition: succeededOrFailed()
27+
- template: releasePhase.yml
28+
parameters:
29+
matrix: dependencies.GenerateYaml_${{ parameters.channel }}.outputs['matrix.matrix_${{ parameters.channel }}_linux']
30+
dependsOn:
31+
- GenerateYaml_${{ parameters.channel }}
32+
jobName: Build_Linux
33+
- template: releasePhase.yml
34+
parameters:
35+
matrix: dependencies.GenerateYaml_${{ parameters.channel }}.outputs['matrix.matrix_${{ parameters.channel }}_windows']
36+
dependsOn:
37+
- GenerateYaml_${{ parameters.channel }}
38+
jobName: Build_Win
39+
vmImage: windows-2019
40+
ACR: yes
41+
# failure rate is High in ACR for Windows and we have few images.
42+
# No reason to stress the system.
43+
maxParallel: 1

.vsts-ci/releasebuild.yml

Lines changed: 88 additions & 114 deletions
Original file line numberDiff line numberDiff line change
@@ -7,117 +7,91 @@ resources:
77
variables:
88
POWERSHELL_TELEMETRY_OPTOUT: 1
99

10-
jobs:
11-
- template: releasePhase.yml
12-
parameters:
13-
channel: STABLE
14-
jobName: stableLinux
15-
releaseTag: $(stableReleaseTag)
16-
pool: Hosted Ubuntu 1604
17-
ACR: no
18-
19-
- template: releasePhase.yml
20-
parameters:
21-
channel: PREVIEW
22-
jobName: previewLinux
23-
releaseTag: $(previewReleaseTag)
24-
pool: Hosted Ubuntu 1604
25-
ACR: no
26-
27-
- template: releasePhase.yml
28-
parameters:
29-
channel: STABLE
30-
jobName: stableWindows
31-
releaseTag: $(stableReleaseTag)
32-
pool: Hosted VS2017
33-
ACR: yes
34-
35-
- template: releasePhase.yml
36-
parameters:
37-
channel: PREVIEW
38-
jobName: previewWindows
39-
releaseTag: $(previewReleaseTag)
40-
pool: Hosted VS2017
41-
ACR: yes
42-
43-
- job: PreviewManifestPhase
44-
variables:
45-
releaseTag: $(previewReleaseTag)
46-
channel: PREVIEW
47-
48-
displayName: Create Preview Manifest Lists
49-
50-
dependsOn:
51-
- previewLinux
52-
- previewWindows
53-
condition: succeededOrFailed()
54-
pool:
55-
name: PowerShell
56-
timeoutInMinutes: 30
57-
58-
steps:
59-
- template: manifestSteps.yml
60-
61-
- job: StableManifestPhase
62-
variables:
63-
releaseTag: $(stableReleaseTag)
64-
channel: STABLE
65-
66-
displayName: Create Stable Manifest Lists
67-
68-
dependsOn:
69-
- stableWindows
70-
- stableLinux
71-
condition: succeededOrFailed()
72-
pool:
73-
name: PowerShell
74-
timeoutInMinutes: 30
75-
76-
steps:
77-
- template: manifestSteps.yml
78-
79-
- job: GenerateTagsYaml
80-
81-
displayName: Generate Tags YAML
82-
83-
condition: succeededOrFailed()
84-
pool:
85-
name: Hosted Ubuntu 1604
86-
timeoutInMinutes: 30
87-
88-
steps:
89-
- powershell: |
90-
$stableVersion = '$(stableReleaseTag)' -replace '^v', ''
91-
Write-Host "##vso[task.setvariable variable=StableVersion;]$stableVersion"
92-
$previewVersion = '$(previewReleaseTag)' -replace '^v', ''
93-
Write-Host "##vso[task.setvariable variable=PreviewVersion;]$previewVersion"
94-
displayName: 'Set Versions'
95-
96-
- powershell: 'Get-ChildItem env:'
97-
displayName: 'Capture Environment'
98-
99-
- powershell: 'Install-module pester -Scope CurrentUser -Force -SkipPublisherCheck'
100-
displayName: 'Install Pester'
101-
102-
- powershell: |
103-
$yaml = ./build.ps1 -GenerateTagsYaml -Channel stable, preview -StableVersion $(StableVersion) -PreviewVersion $(PreviewVersion)
104-
$yaml | Out-File -Encoding ascii -Path ./tagsmetadata.yaml
105-
Get-ChildItem -Path ./tagsmetadata.yaml | Select-Object -ExpandProperty FullName | ForEach-Object {
106-
Write-Host "##vso[artifact.upload containerfolder=artifacts;artifactname=artifacts]$_"
107-
}
108-
displayName: Generate Tags YAML
109-
110-
- powershell: |
111-
$path = '$(SYSTEM.DEFAULTWORKINGDIRECTORY)/releaseTags.json'
112-
@{
113-
'previewReleaseTag' = '$(previewReleaseTag)'
114-
'stableReleaseTag' = '$(stableReleaseTag)'
115-
}|convertto-json | out-file -FilePath $path -Encoding ascii
116-
Write-Host "##vso[artifact.upload containerfolder=releaseTags;artifactname=releaseTags]$path"
117-
displayName: Save release Tags
118-
119-
- task: ms.vss-governance-buildtask.governance-build-task-component-detection.ComponentGovernanceComponentDetection@0
120-
displayName: 'Component Detection'
121-
inputs:
122-
sourceScanPath: '$(Build.SourcesDirectory)'
123-
snapshotForceEnabled: true
10+
stages:
11+
- template: releaseStage.yml
12+
parameters:
13+
channel: stable
14+
- template: releaseStage.yml
15+
parameters:
16+
channel: preview
17+
18+
- stage: GenerateManifests
19+
dependsOn:
20+
- GenerateYaml_stable
21+
- GenerateYaml_preview
22+
jobs:
23+
- job: PreviewManifestPhase
24+
variables:
25+
releaseTag: $(previewReleaseTag)
26+
channel: PREVIEW
27+
28+
displayName: Create Preview Manifest Lists
29+
condition: succeededOrFailed()
30+
pool:
31+
name: PowerShell
32+
timeoutInMinutes: 30
33+
34+
steps:
35+
- template: manifestSteps.yml
36+
- job: StableManifestPhase
37+
variables:
38+
releaseTag: $(stableReleaseTag)
39+
channel: STABLE
40+
41+
displayName: Create Stable Manifest Lists
42+
43+
condition: succeededOrFailed()
44+
pool:
45+
name: PowerShell
46+
timeoutInMinutes: 30
47+
48+
steps:
49+
- template: manifestSteps.yml
50+
- stage: GenerateTagsYaml
51+
dependsOn: []
52+
jobs:
53+
- job: GenerateTagsYaml
54+
55+
displayName: Generate Tags YAML
56+
57+
condition: succeededOrFailed()
58+
pool:
59+
name: Hosted Ubuntu 1604
60+
timeoutInMinutes: 30
61+
62+
steps:
63+
- powershell: |
64+
$stableVersion = '$(stableReleaseTag)' -replace '^v', ''
65+
Write-Host "##vso[task.setvariable variable=StableVersion;]$stableVersion"
66+
$previewVersion = '$(previewReleaseTag)' -replace '^v', ''
67+
Write-Host "##vso[task.setvariable variable=PreviewVersion;]$previewVersion"
68+
displayName: 'Set Versions'
69+
70+
- powershell: 'Get-ChildItem env:'
71+
displayName: 'Capture Environment'
72+
73+
- powershell: 'Install-module pester -Scope CurrentUser -Force -SkipPublisherCheck'
74+
displayName: 'Install Pester'
75+
76+
- powershell: |
77+
$yaml = ./build.ps1 -GenerateTagsYaml -Channel stable, preview -StableVersion $(StableVersion) -PreviewVersion $(PreviewVersion)
78+
$yaml | Out-File -Encoding ascii -Path ./tagsmetadata.yaml
79+
Get-ChildItem -Path ./tagsmetadata.yaml | Select-Object -ExpandProperty FullName | ForEach-Object {
80+
Write-Host "##vso[artifact.upload containerfolder=artifacts;artifactname=artifacts]$_"
81+
}
82+
displayName: Generate Tags YAML
83+
84+
- powershell: |
85+
$path = '$(SYSTEM.DEFAULTWORKINGDIRECTORY)/releaseTags.json'
86+
@{
87+
'previewReleaseTag' = '$(previewReleaseTag)'
88+
'stableReleaseTag' = '$(stableReleaseTag)'
89+
}|convertto-json | out-file -FilePath $path -Encoding ascii
90+
Write-Host "##vso[artifact.upload containerfolder=releaseTags;artifactname=releaseTags]$path"
91+
displayName: Save release Tags
92+
93+
- task: ms.vss-governance-buildtask.governance-build-task-component-detection.ComponentGovernanceComponentDetection@0
94+
displayName: 'Component Detection'
95+
inputs:
96+
sourceScanPath: '$(Build.SourcesDirectory)'
97+
snapshotForceEnabled: true

0 commit comments

Comments
 (0)