1name: Release_$(Build.SourceBranchName)_$(SourceTag)_$(Date:yyyyMMdd)$(Rev:.rr) 2 3parameters: 4- name: GitRemote 5 displayName: "Git remote" 6 type: string 7 default: python 8 values: 9 - 'python' 10 - 'pablogsal' 11 - 'ambv' 12 - '(Other)' 13- name: GitRemote_Other 14 displayName: "If Other, specify Git remote" 15 type: string 16 default: 'python' 17- name: SourceTag 18 displayName: "Git tag" 19 type: string 20 default: main 21- name: DoPublish 22 displayName: "Publish release" 23 type: boolean 24 default: false 25- name: SigningCertificate 26 displayName: "Code signing certificate" 27 type: string 28 default: 'Python Software Foundation' 29 values: 30 - 'Python Software Foundation' 31 - 'TestSign' 32 - 'Unsigned' 33- name: SigningDescription 34 displayName: "Signature description" 35 type: string 36 default: 'Built: $(Build.BuildNumber)' 37- name: DoARM64 38 displayName: "Publish ARM64 build" 39 type: boolean 40 default: true 41# Because there is no ARM64 Tcl/Tk pre-3.11, we need a separate option 42# to keep those builds working when the files are going to be absent. 43# Eventually when we stop releasing anything that old, we can drop this 44# argument (and make it implicitly always 'true') 45- name: ARM64TclTk 46 displayName: "Use Tcl/Tk for ARM64 (3.11 and later)" 47 type: boolean 48 default: true 49- name: DoPGO 50 displayName: "Run PGO" 51 type: boolean 52 default: true 53- name: DoCHM 54 displayName: "Produce compiled help document (pre-3.11)" 55 type: boolean 56 default: false 57- name: DoLayout 58 displayName: "Produce full layout artifact" 59 type: boolean 60 default: true 61- name: DoMSIX 62 displayName: "Produce Store packages" 63 type: boolean 64 default: true 65- name: DoNuget 66 displayName: "Produce Nuget packages" 67 type: boolean 68 default: true 69- name: DoEmbed 70 displayName: "Produce embeddable package" 71 type: boolean 72 default: true 73- name: DoMSI 74 displayName: "Produce EXE/MSI installer" 75 type: boolean 76 default: true 77- name: BuildToPublish 78 displayName: "Build number to publish (0 to skip)" 79 type: number 80 default: '0' 81 82variables: 83 __RealSigningCertificate: 'Python Software Foundation' 84 ${{ if ne(parameters.GitRemote, '(Other)') }}: 85 GitRemote: ${{ parameters.GitRemote }} 86 ${{ else }}: 87 GitRemote: ${{ parameters.GitRemote_Other }} 88 SourceTag: ${{ parameters.SourceTag }} 89 DoPGO: ${{ parameters.DoPGO }} 90 ${{ if ne(parameters.SigningCertificate, 'Unsigned') }}: 91 SigningCertificate: ${{ parameters.SigningCertificate }} 92 SigningDescription: ${{ parameters.SigningDescription }} 93 DoCHM: ${{ parameters.DoCHM }} 94 DoLayout: ${{ parameters.DoLayout }} 95 DoMSIX: ${{ parameters.DoMSIX }} 96 DoNuget: ${{ parameters.DoNuget }} 97 DoEmbed: ${{ parameters.DoEmbed }} 98 DoMSI: ${{ parameters.DoMSI }} 99 DoPublish: ${{ parameters.DoPublish }} 100 PublishARM64: ${{ parameters.DoARM64 }} 101# QUEUE TIME VARIABLES 102# PyDotOrgUsername: '' 103# PyDotOrgServer: '' 104 105trigger: none 106pr: none 107 108stages: 109- ${{ if eq(parameters.BuildToPublish, '0') }}: 110 - stage: Build 111 displayName: Build binaries 112 jobs: 113 - template: windows-release/stage-build.yml 114 parameters: 115 ARM64TclTk: ${{ parameters.ARM64TclTk }} 116 117 - stage: Sign 118 displayName: Sign binaries 119 dependsOn: Build 120 jobs: 121 - template: windows-release/stage-sign.yml 122 123 - stage: Layout 124 displayName: Generate layouts 125 dependsOn: Sign 126 jobs: 127 - template: windows-release/stage-layout-full.yml 128 parameters: 129 ARM64TclTk: ${{ parameters.ARM64TclTk }} 130 - template: windows-release/stage-layout-embed.yml 131 - template: windows-release/stage-layout-nuget.yml 132 133 - stage: Pack 134 dependsOn: Layout 135 jobs: 136 - template: windows-release/stage-pack-nuget.yml 137 138 - stage: Test 139 dependsOn: Pack 140 jobs: 141 - template: windows-release/stage-test-embed.yml 142 - template: windows-release/stage-test-nuget.yml 143 144 - ${{ if eq(parameters.DoMSIX, 'true') }}: 145 - stage: Layout_MSIX 146 displayName: Generate MSIX layouts 147 dependsOn: Sign 148 jobs: 149 - template: windows-release/stage-layout-msix.yml 150 parameters: 151 ARM64TclTk: ${{ parameters.ARM64TclTk }} 152 153 - stage: Pack_MSIX 154 displayName: Package MSIX 155 dependsOn: Layout_MSIX 156 jobs: 157 - template: windows-release/stage-pack-msix.yml 158 159 - ${{ if eq(parameters.DoMSI, 'true') }}: 160 - stage: Build_MSI 161 displayName: Build MSI installer 162 dependsOn: Sign 163 jobs: 164 - template: windows-release/stage-msi.yml 165 parameters: 166 ARM64TclTk: ${{ parameters.ARM64TclTk }} 167 168 - stage: Test_MSI 169 displayName: Test MSI installer 170 dependsOn: Build_MSI 171 jobs: 172 - template: windows-release/stage-test-msi.yml 173 174 - ${{ if eq(parameters.DoPublish, 'true') }}: 175 - ${{ if eq(parameters.DoMSI, 'true') }}: 176 - stage: PublishPyDotOrg 177 displayName: Publish to python.org 178 dependsOn: ['Test_MSI', 'Test'] 179 jobs: 180 - template: windows-release/stage-publish-pythonorg.yml 181 182 - ${{ if eq(parameters.DoNuget, 'true') }}: 183 - stage: PublishNuget 184 displayName: Publish to nuget.org 185 ${{ if eq(parameters.DoMSI, 'true') }}: 186 dependsOn: ['Test_MSI', 'Test'] 187 ${{ else }}: 188 dependsOn: 'Test' 189 jobs: 190 - template: windows-release/stage-publish-nugetorg.yml 191 192 - ${{ if eq(parameters.DoMSIX, 'true') }}: 193 - stage: PublishStore 194 displayName: Publish to Store 195 ${{ if eq(parameters.DoMSI, 'true') }}: 196 dependsOn: ['Test_MSI', 'Pack_MSIX'] 197 ${{ else }}: 198 dependsOn: 'Pack_MSIX' 199 jobs: 200 - template: windows-release/stage-publish-store.yml 201 202- ${{ else }}: 203 - stage: PublishExisting 204 displayName: Publish existing build 205 dependsOn: [] 206 jobs: 207 - ${{ if eq(parameters.DoMSI, 'true') }}: 208 - template: windows-release/stage-publish-pythonorg.yml 209 parameters: 210 BuildToPublish: ${{ parameters.BuildToPublish }} 211 212 - ${{ if eq(parameters.DoNuget, 'true') }}: 213 - template: windows-release/stage-publish-nugetorg.yml 214 parameters: 215 BuildToPublish: ${{ parameters.BuildToPublish }} 216 217 - ${{ if eq(parameters.DoMSIX, 'true') }}: 218 - template: windows-release/stage-publish-store.yml 219 parameters: 220 BuildToPublish: ${{ parameters.BuildToPublish }} 221