Skip to content

Commit b6fbc85

Browse files
committed
Revise and improve build
1 parent 147153e commit b6fbc85

13 files changed

+240
-344
lines changed

windows-release/azure-pipelines.yml

Lines changed: 86 additions & 129 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ parameters:
1111
- 'Yhg1s'
1212
- 'pablogsal'
1313
- 'ambv'
14+
- 'zooba'
1415
- '(Other)'
1516
- name: GitRemote_Other
1617
displayName: "If Other, specify Git remote"
@@ -52,14 +53,6 @@ parameters:
5253
displayName: "Publish ARM64 build (3.11 and later)"
5354
type: boolean
5455
default: true
55-
# Because there is no ARM64 Tcl/Tk pre-3.11, we need a separate option
56-
# to keep those builds working when the files are going to be absent.
57-
# Eventually when we stop releasing anything that old, we can drop this
58-
# argument (and make it implicitly always 'true')
59-
- name: ARM64TclTk
60-
displayName: "Use Tcl/Tk for ARM64 (3.11 and later)"
61-
type: boolean
62-
default: true
6356
- name: DoPGO
6457
displayName: "Run PGO"
6558
type: boolean
@@ -96,6 +89,10 @@ parameters:
9689
displayName: "Build number to publish (0 to skip)"
9790
type: number
9891
default: '0'
92+
- name: BuildToRepackage
93+
displayName: "Build number to repackage and publish (0 to skip)"
94+
type: number
95+
default: '0'
9996
- name: SignNuget
10097
displayName: "Enable Nuget signing (not recommended right now)"
10198
type: boolean
@@ -109,39 +106,44 @@ variables:
109106
SourceTag: ${{ parameters.SourceTag }}
110107
${{ if ne(parameters.SourceCommit, 'empty') }}:
111108
SourceCommit: ${{ parameters.SourceCommit }}
112-
${{ else }}:
113-
SourceCommit: ''
114109
${{ if ne(parameters.SigningCertificate, 'Unsigned') }}:
115110
SigningCertificate: ${{ parameters.SigningCertificate }}
116111
SigningDescription: ${{ parameters.SigningDescription }}
117-
${{ if eq(parameters.SigningCertificate, 'PythonSoftwareFoundation') }}:
118-
IsRealSigned: true
119-
${{ else }}:
120-
IsRealSigned: false
121-
DoFreethreaded: ${{ parameters.DoFreethreaded }}
122-
DoLayout: ${{ parameters.DoLayout }}
123-
DoMSIX: ${{ parameters.DoMSIX }}
124-
DoNuget: ${{ parameters.DoNuget }}
125-
DoEmbed: ${{ parameters.DoEmbed }}
126-
DoMSI: ${{ parameters.DoMSI }}
127-
DoPyManager: ${{ parameters.DoPyManager }}
128-
DoPublish: ${{ parameters.DoPublish }}
112+
IsRealSigned: ${{ eq(parameters.SigningCertificate, 'PythonSoftwareFoundation') }}
129113
PublishARM64: ${{ parameters.DoARM64 }}
114+
${{ if ne(parameters.BuildToPublish, '0') }}:
115+
BuildToPublish: build_to_publish
116+
${{ else }}:
117+
BuildToPublish: current
118+
${{ if ne(parameters.BuildToRepackage, '0') }}:
119+
BuildToPackage: build_to_package
120+
${{ else }}:
121+
BuildToPackage: current
130122
# QUEUE TIME VARIABLES
131123
# PyDotOrgUsername: ''
132124
# PyDotOrgServer: ''
133125

126+
resources:
127+
pipelines:
128+
- ${{ if ne(parameters.BuildToPublish, '0') }}:
129+
- pipeline: build_to_publish
130+
source: $(Build.DefinitionName)
131+
version: ${{ parameters.BuildToPublish }}
132+
- ${{ if ne(parameters.BuildToRepackage, '0') }}:
133+
- pipeline: build_to_package
134+
source: $(Build.DefinitionName)
135+
version: ${{ parameters.BuildToRepackage }}
136+
134137
trigger: none
135138
pr: none
136139

137140
stages:
138-
- ${{ if eq(parameters.BuildToPublish, '0') }}:
141+
- ${{ if and(eq(parameters.BuildToPublish, '0'), eq(parameters.BuildToRepackage, '0')) }}:
139142
- stage: Build
140143
displayName: Build binaries
141144
jobs:
142145
- template: stage-build.yml
143146
parameters:
144-
ARM64TclTk: ${{ parameters.ARM64TclTk }}
145147
DoFreethreaded: ${{ parameters.DoFreethreaded }}
146148
DoPGO: ${{ parameters.DoPGO }}
147149
DoPGOARM64: ${{ parameters.DoPGOARM64 }}
@@ -152,142 +154,97 @@ stages:
152154
jobs:
153155
- template: stage-sign.yml
154156
parameters:
155-
${{ if and(parameters.SigningCertificate, ne(parameters.SigningCertificate, 'Unsigned')) }}:
156-
SigningCertificate: ${{ parameters.SigningCertificate }}
157+
SigningCertificate: ${{ parameters.SigningCertificate }}
157158
DoFreethreaded: ${{ parameters.DoFreethreaded }}
158159

160+
- ${{ if eq(parameters.BuildToPublish, '0') }}:
159161
- stage: Layout
160-
displayName: Generate layouts
161-
dependsOn: Sign
162+
${{ if eq(parameters.BuildToRepackage, '0') }}:
163+
displayName: Generate layouts
164+
dependsOn: Sign
165+
${{ else }}:
166+
displayName: Generate layouts from build ${{ parameters.BuildToRepackage }}
167+
dependsOn: []
162168
jobs:
163169
- template: stage-layout-full.yml
164170
parameters:
165171
ARM64TclTk: ${{ parameters.ARM64TclTk }}
166172
DoFreethreaded: ${{ parameters.DoFreethreaded }}
167-
- template: stage-layout-embed.yml
168-
- template: stage-layout-nuget.yml
169-
parameters:
170-
DoFreethreaded: ${{ parameters.DoFreethreaded }}
171-
- template: stage-layout-pymanager.yml
172-
parameters:
173-
ARM64TclTk: ${{ parameters.ARM64TclTk }}
174-
DoFreethreaded: ${{ parameters.DoFreethreaded }}
175-
DoEmbed: ${{ parameters.DoEmbed }}
173+
- ${{ if eq(parameters.DoEmbed, 'true') }}:
174+
- template: stage-layout-embed.yml
175+
- ${{ if eq(parameters.DoNuget, 'true') }}:
176+
- template: stage-layout-nuget.yml
177+
parameters:
178+
DoFreethreaded: ${{ parameters.DoFreethreaded }}
179+
- ${{ if eq(parameters.DoMSIX, 'true') }}:
180+
- template: stage-layout-msix.yml
181+
- ${{ if eq(parameters.DoPyManager, 'true') }}:
182+
- template: stage-layout-pymanager.yml
183+
parameters:
184+
DoFreethreaded: ${{ parameters.DoFreethreaded }}
185+
DoEmbed: ${{ parameters.DoEmbed }}
186+
${{ if ne(parameters.BuildToRepackage, '0') }}:
187+
UseLayoutScriptFromBranch: main
176188

177189
- stage: Pack
178190
dependsOn: Layout
191+
displayName: Pack
179192
jobs:
180-
- template: stage-pack-nuget.yml
181-
parameters:
182-
${{ if and(parameters.SigningCertificate, ne(parameters.SigningCertificate, 'Unsigned')) }}:
183-
${{ if eq(parameters.SignNuget, 'true') }}:
184-
SigningCertificate: ${{ parameters.SigningCertificate }}
185-
DoFreethreaded: ${{ parameters.DoFreethreaded }}
186-
187-
- stage: Test
188-
dependsOn: Pack
189-
jobs:
190-
- template: stage-test-embed.yml
191-
- template: stage-test-nuget.yml
192-
parameters:
193-
DoFreethreaded: ${{ parameters.DoFreethreaded }}
194-
195-
- ${{ if eq(parameters.DoMSIX, 'true') }}:
196-
- stage: Layout_MSIX
197-
displayName: Generate MSIX layouts
198-
dependsOn: Sign
199-
jobs:
200-
- template: stage-layout-msix.yml
193+
- ${{ if eq(parameters.DoEmbed, 'true') }}:
194+
- template: stage-pack-embed.yml
195+
- ${{ if eq(parameters.DoMSI, 'true') }}:
196+
- template: stage-msi.yml
201197
parameters:
202-
ARM64TclTk: ${{ parameters.ARM64TclTk }}
203-
204-
- stage: Pack_MSIX
205-
displayName: Package MSIX
206-
dependsOn: Layout_MSIX
207-
jobs:
198+
DoARM64: ${{ parameters.DoARM64}}
199+
DoFreethreaded: ${{ parameters.DoFreethreaded }}
200+
- ${{ if eq(parameters.DoMSIX, 'true') }}:
208201
- template: stage-pack-msix.yml
209202
parameters:
210203
${{ if and(parameters.SigningCertificate, ne(parameters.SigningCertificate, 'Unsigned')) }}:
211204
SigningCertificate: ${{ parameters.SigningCertificate }}
212-
213-
- ${{ if eq(parameters.DoMSI, 'true') }}:
214-
- stage: Build_MSI
215-
displayName: Build MSI installer
216-
dependsOn: Sign
217-
jobs:
218-
- template: stage-msi.yml
205+
- ${{ if eq(parameters.DoNuget, 'true') }}:
206+
- template: stage-pack-nuget.yml
219207
parameters:
220-
ARM64TclTk: ${{ parameters.ARM64TclTk }}
221-
${{ if and(parameters.SigningCertificate, ne(parameters.SigningCertificate, 'Unsigned')) }}:
222-
SigningCertificate: ${{ parameters.SigningCertificate }}
223-
DoARM64: ${{ parameters.DoARM64}}
208+
${{ if eq(parameters.SignNuget, 'true') }}:
209+
${{ if and(parameters.SigningCertificate, ne(parameters.SigningCertificate, 'Unsigned')) }}:
210+
SigningCertificate: ${{ parameters.SigningCertificate }}
224211
DoFreethreaded: ${{ parameters.DoFreethreaded }}
225212

226-
- stage: Test_MSI
227-
displayName: Test MSI installer
228-
dependsOn: Build_MSI
229-
jobs:
213+
- stage: Test
214+
dependsOn: Pack
215+
jobs:
216+
- ${{ if eq(parameters.DoEmbed, 'true') }}:
217+
- template: stage-test-embed.yml
218+
- ${{ if eq(parameters.DoMSI, 'true') }}:
230219
- template: stage-test-msi.yml
231220
parameters:
232221
DoFreethreaded: ${{ parameters.DoFreethreaded }}
233-
234-
- ${{ if eq(parameters.DoPublish, 'true') }}:
235-
- ${{ if eq(parameters.DoPyManager, 'true') }}:
236-
- stage: PublishPyManager
237-
displayName: Publish for PyManager
238-
dependsOn: ['Test_MSI', 'Test']
239-
jobs:
240-
- template: stage-publish-pymanager.yml
241-
242-
- ${{ if eq(parameters.DoMSI, 'true') }}:
243-
- stage: PublishPyDotOrg
244-
displayName: Publish to python.org
245-
dependsOn: ['Test_MSI', 'Test']
246-
jobs:
247-
- template: stage-publish-pythonorg.yml
248-
parameters:
249-
IncludeGPG: ${{ parameters.DoGPG }}
250-
251222
- ${{ if eq(parameters.DoNuget, 'true') }}:
252-
- stage: PublishNuget
253-
displayName: Publish to nuget.org
254-
${{ if eq(parameters.DoMSI, 'true') }}:
255-
dependsOn: ['Test_MSI', 'Test']
256-
${{ else }}:
257-
dependsOn: 'Test'
258-
jobs:
259-
- template: stage-publish-nugetorg.yml
260-
261-
- ${{ if eq(parameters.DoMSIX, 'true') }}:
262-
- stage: PublishStore
263-
displayName: Publish to Store
264-
${{ if eq(parameters.DoMSI, 'true') }}:
265-
dependsOn: ['Test_MSI', 'Pack_MSIX']
266-
${{ else }}:
267-
dependsOn: 'Pack_MSIX'
268-
jobs:
269-
- template: stage-publish-store.yml
223+
- template: stage-test-nuget.yml
224+
parameters:
225+
DoFreethreaded: ${{ parameters.DoFreethreaded }}
226+
- ${{ if eq(parameters.DoPyManager, 'true') }}:
227+
- template: stage-test-pymanager.yml
228+
parameters:
229+
DoEmbed: ${{ parameters.DoEmbed }}
230+
DoFreethreaded: ${{ parameters.DoFreethreaded }}
270231

271-
- ${{ else }}:
272-
- stage: PublishExisting
273-
displayName: Publish existing build
274-
dependsOn: []
232+
- ${{ if eq(parameters.DoPublish, 'true') }}:
233+
- stage: Publish
234+
displayName: Publish
235+
dependsOn:
236+
- ${{ if eq(parameters.BuildToPublish, '0') }}:
237+
- Test
275238
jobs:
276239
- ${{ if eq(parameters.DoPyManager, 'true') }}:
277240
- template: stage-publish-pymanager.yml
278-
241+
parameters:
242+
DoEmbed: ${{ parameters.DoEmbed }}
243+
DoFreethreaded: ${{ parameters.DoFreethreaded }}
279244
- ${{ if eq(parameters.DoMSI, 'true') }}:
280245
- template: stage-publish-pythonorg.yml
281246
parameters:
282-
BuildToPublish: ${{ parameters.BuildToPublish }}
247+
DoEmbed: ${{ parameters.DoEmbed }}
283248
IncludeGPG: ${{ parameters.DoGPG }}
284-
285249
- ${{ if eq(parameters.DoNuget, 'true') }}:
286250
- template: stage-publish-nugetorg.yml
287-
parameters:
288-
BuildToPublish: ${{ parameters.BuildToPublish }}
289-
290-
- ${{ if eq(parameters.DoMSIX, 'true') }}:
291-
- template: stage-publish-store.yml
292-
parameters:
293-
BuildToPublish: ${{ parameters.BuildToPublish }}

windows-release/layout-command.yml

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,10 @@ parameters:
33
Sources: $(Build.SourcesDirectory)
44
Temp: $(Build.BinariesDirectory)\layout-temp
55
Docs: $(Build.BinariesDirectory)\doc
6+
LayoutSources:
67

78
steps:
8-
- download: current
9+
- download: $(BuildToPackage)
910
artifact: bin_$(HostArch)
1011
displayName: 'Download artifact: bin_$(HostArch)'
1112
condition: and(succeeded(), variables['HostArch'])
@@ -23,15 +24,20 @@ steps:
2324
- powershell: >
2425
$layout_cmd = '&
2526
"$(Python)"
26-
"{1}\PC\layout"
27+
"{4}\PC\layout"
2728
-vv
2829
--source "{1}"
2930
--build "{0}"
3031
--arch "$(Arch)"
3132
--temp "{2}"
3233
--include-cat "{0}\python.cat"
3334
--doc-build "{3}"'
34-
-f ("${{ parameters.Binaries }}", "${{ parameters.Sources }}", "${{ parameters.Temp }}", "${{ parameters.Docs}}");
35+
-f (
36+
"${{ parameters.Binaries }}",
37+
"${{ parameters.Sources }}",
38+
"${{ parameters.Temp }}",
39+
"${{ parameters.Docs}}",
40+
"${{ coalesce(parameters.LayoutSources, parameters.Sources) }}");
3541
Write-Host "##vso[task.setvariable variable=LayoutCmd]$layout_cmd";
3642
Write-Host "Setting LayoutCmd=$layout_cmd"
3743
displayName: 'Set LayoutCmd'

windows-release/stage-layout-embed.yml

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ jobs:
2828
steps:
2929
- template: ./checkout.yml
3030

31-
- download: current
31+
- download: $(BuildToPackage)
3232
artifact: bin_$(Name)
3333
displayName: 'Download artifact: bin_$(Name)'
3434

@@ -72,14 +72,10 @@ jobs:
7272
artifact: layout_embed_$(Name)
7373
displayName: 'Publish Artifact: layout_embed_$(Name)'
7474

75-
- task: PublishBuildArtifacts@1
75+
- publishBuild: $(Build.ArtifactStagingDirectory)\embed
76+
artifact: embed
7677
displayName: 'Publish Artifact: embed'
77-
inputs:
78-
PathtoPublish: '$(Build.ArtifactStagingDirectory)\embed'
79-
ArtifactName: embed
8078

81-
- task: PublishBuildArtifacts@1
79+
- publishBuild: $(Build.ArtifactStagingDirectory)\sbom
80+
artifact: sbom
8281
displayName: 'Publish Artifact: sbom'
83-
inputs:
84-
PathtoPublish: '$(Build.ArtifactStagingDirectory)\sbom'
85-
ArtifactName: sbom

0 commit comments

Comments
 (0)