name: Release_$(Build.SourceBranchName)_$(SourceTag)_$(Date:yyyyMMdd)$(Rev:.rr) parameters: - name: GitRemote displayName: "Git remote" type: string default: python values: - 'python' - 'pablogsal' - 'ambv' - '(Other)' - name: GitRemote_Other displayName: "If Other, specify Git remote" type: string default: 'python' - name: SourceTag displayName: "Git tag" type: string default: main - name: DoPublish displayName: "Publish release" type: boolean default: false - name: SigningCertificate displayName: "Code signing certificate" type: string default: 'Python Software Foundation' values: - 'Python Software Foundation' - 'TestSign' - 'Unsigned' - name: SigningDescription displayName: "Signature description" type: string default: 'Built: $(Build.BuildNumber)' - name: DoARM64 displayName: "Publish ARM64 build" type: boolean default: true - name: DoPGO displayName: "Run PGO" type: boolean default: true - name: DoLayout displayName: "Produce full layout artifact" type: boolean default: true - name: DoMSIX displayName: "Produce Store packages" type: boolean default: true - name: DoNuget displayName: "Produce Nuget packages" type: boolean default: true - name: DoEmbed displayName: "Produce embeddable package" type: boolean default: true - name: DoMSI displayName: "Produce EXE/MSI installer" type: boolean default: true - name: BuildToPublish displayName: "Build number to publish (0 to skip)" type: number default: '0' variables: __RealSigningCertificate: 'Python Software Foundation' ${{ if ne(parameters.GitRemote, '(Other)') }}: GitRemote: ${{ parameters.GitRemote }} ${{ else }}: GitRemote: ${{ parameters.GitRemote_Other }} SourceTag: ${{ parameters.SourceTag }} DoPGO: ${{ parameters.DoPGO }} ${{ if ne(parameters.SigningCertificate, 'Unsigned') }}: SigningCertificate: ${{ parameters.SigningCertificate }} SigningDescription: ${{ parameters.SigningDescription }} DoLayout: ${{ parameters.DoLayout }} DoMSIX: ${{ parameters.DoMSIX }} DoNuget: ${{ parameters.DoNuget }} DoEmbed: ${{ parameters.DoEmbed }} DoMSI: ${{ parameters.DoMSI }} DoPublish: ${{ parameters.DoPublish }} PublishARM64: ${{ parameters.DoARM64 }} # QUEUE TIME VARIABLES # PyDotOrgUsername: '' # PyDotOrgServer: '' trigger: none pr: none stages: - ${{ if eq(parameters.BuildToPublish, '0') }}: - stage: Build displayName: Build binaries jobs: - template: windows-release/stage-build.yml - stage: Sign displayName: Sign binaries dependsOn: Build jobs: - template: windows-release/stage-sign.yml - stage: Layout displayName: Generate layouts dependsOn: Sign jobs: - template: windows-release/stage-layout-full.yml - template: windows-release/stage-layout-embed.yml - template: windows-release/stage-layout-nuget.yml - stage: Pack dependsOn: Layout jobs: - template: windows-release/stage-pack-nuget.yml - stage: Test dependsOn: Pack jobs: - template: windows-release/stage-test-embed.yml - template: windows-release/stage-test-nuget.yml - stage: Layout_MSIX displayName: Generate MSIX layouts dependsOn: Sign condition: and(succeeded(), eq(variables['DoMSIX'], 'true')) jobs: - template: windows-release/stage-layout-msix.yml - stage: Pack_MSIX displayName: Package MSIX dependsOn: Layout_MSIX jobs: - template: windows-release/stage-pack-msix.yml - stage: Build_MSI displayName: Build MSI installer dependsOn: Sign condition: and(succeeded(), eq(variables['DoMSI'], 'true')) jobs: - template: windows-release/stage-msi.yml - stage: Test_MSI displayName: Test MSI installer dependsOn: Build_MSI jobs: - template: windows-release/stage-test-msi.yml - ${{ if eq(parameters.DoPublish, 'true') }}: - stage: PublishPyDotOrg displayName: Publish to python.org dependsOn: ['Test_MSI', 'Test'] jobs: - template: windows-release/stage-publish-pythonorg.yml - stage: PublishNuget displayName: Publish to nuget.org dependsOn: Test jobs: - template: windows-release/stage-publish-nugetorg.yml - stage: PublishStore displayName: Publish to Store dependsOn: Pack_MSIX jobs: - template: windows-release/stage-publish-store.yml - ${{ else }}: - stage: PublishExisting displayName: Publish existing build dependsOn: [] condition: and(succeeded(), eq(variables['DoPublish'], 'true')) jobs: - template: windows-release/stage-publish-pythonorg.yml parameters: BuildToPublish: ${{ parameters.BuildToPublish }} - template: windows-release/stage-publish-nugetorg.yml parameters: BuildToPublish: ${{ parameters.BuildToPublish }} - template: windows-release/stage-publish-store.yml parameters: BuildToPublish: ${{ parameters.BuildToPublish }}