1parameters:
2  ARM64TclTk: true
3
4steps:
5  - template: ./checkout.yml
6
7  - powershell: |
8      $d = (.\PCbuild\build.bat -V) | %{ if($_ -match '\s+(\w+):\s*(.+)\s*$') { @{$Matches[1] = $Matches[2];} }};
9      Write-Host "##vso[task.setvariable variable=SigningDescription]Python $($d.PythonVersion)"
10    displayName: 'Update signing description'
11    condition: and(succeeded(), not(variables['SigningDescription']))
12
13  - task: DownloadPipelineArtifact@1
14    displayName: 'Download artifact: doc'
15    inputs:
16      artifactName: doc
17      targetPath: $(Build.BinariesDirectory)\doc
18
19  - task: CopyFiles@2
20    displayName: 'Merge documentation files'
21    inputs:
22      sourceFolder: $(Build.BinariesDirectory)\doc
23      targetFolder: $(Build.SourcesDirectory)\Doc\build
24
25  - task: DownloadPipelineArtifact@1
26    displayName: 'Download artifact: bin_win32'
27    inputs:
28      artifactName: bin_win32
29      targetPath: $(Build.BinariesDirectory)\win32
30
31  - task: DownloadPipelineArtifact@1
32    displayName: 'Download artifact: bin_win32_d'
33    inputs:
34      artifactName: bin_win32_d
35      targetPath: $(Build.BinariesDirectory)\win32
36
37  - task: DownloadPipelineArtifact@1
38    displayName: 'Download artifact: bin_amd64'
39    inputs:
40      artifactName: bin_amd64
41      targetPath: $(Build.BinariesDirectory)\amd64
42
43  - task: DownloadPipelineArtifact@1
44    displayName: 'Download artifact: bin_amd64_d'
45    inputs:
46      artifactName: bin_amd64_d
47      targetPath: $(Build.BinariesDirectory)\amd64
48
49  - task: DownloadPipelineArtifact@1
50    displayName: 'Download artifact: bin_arm64'
51    condition: and(succeeded(), eq(variables['PublishARM64'], 'true'))
52    inputs:
53      artifactName: bin_arm64
54      targetPath: $(Build.BinariesDirectory)\arm64
55
56  - task: DownloadPipelineArtifact@1
57    displayName: 'Download artifact: bin_arm64_d'
58    condition: and(succeeded(), eq(variables['PublishARM64'], 'true'))
59    inputs:
60      artifactName: bin_arm64_d
61      targetPath: $(Build.BinariesDirectory)\arm64
62
63  - task: DownloadPipelineArtifact@1
64    displayName: 'Download artifact: tcltk_lib_win32'
65    inputs:
66      artifactName: tcltk_lib_win32
67      targetPath: $(Build.BinariesDirectory)\tcltk_lib_win32
68
69  - task: DownloadPipelineArtifact@1
70    displayName: 'Download artifact: tcltk_lib_amd64'
71    inputs:
72      artifactName: tcltk_lib_amd64
73      targetPath: $(Build.BinariesDirectory)\tcltk_lib_amd64
74
75  - ${{ if eq(parameters.ARM64TclTk, true) }}:
76    - task: DownloadPipelineArtifact@1
77      displayName: 'Download artifact: tcltk_lib_arm64'
78      condition: and(succeeded(), eq(variables['PublishARM64'], 'true'))
79      inputs:
80        artifactName: tcltk_lib_arm64
81        targetPath: $(Build.BinariesDirectory)\tcltk_lib_arm64
82
83  - powershell: |
84      copy $(Build.BinariesDirectory)\amd64\Activate.ps1 Lib\venv\scripts\common\Activate.ps1 -Force
85    displayName: 'Copy signed files into sources'
86    condition: and(succeeded(), variables['SigningCertificate'])
87
88  - script: |
89      call Tools\msi\get_externals.bat
90      call PCbuild\find_python.bat
91      echo ##vso[task.setvariable variable=PYTHON]%PYTHON%
92      call PCbuild/find_msbuild.bat
93      echo ##vso[task.setvariable variable=MSBUILD]%MSBUILD%
94    displayName: 'Get external dependencies'
95
96  - script: |
97      %PYTHON% -m pip install blurb
98      %PYTHON% -m blurb merge -f Misc\NEWS
99    displayName: 'Merge NEWS file'
100
101  - script: |
102      %MSBUILD% Tools\msi\launcher\launcher.wixproj
103    displayName: 'Build launcher installer'
104    env:
105      Platform: x86
106      Py_OutDir: $(Build.BinariesDirectory)
107
108  - script: |
109      %MSBUILD% Tools\msi\bundle\releaselocal.wixproj /t:Rebuild /p:RebuildAll=true
110    displayName: 'Build win32 installer'
111    env:
112      Platform: x86
113      Py_OutDir: $(Build.BinariesDirectory)
114      PYTHON: $(Build.BinariesDirectory)\win32\python.exe
115      PythonForBuild: $(Build.BinariesDirectory)\win32\python.exe
116      PYTHONHOME: $(Build.SourcesDirectory)
117      TclTkLibraryDir: $(Build.BinariesDirectory)\tcltk_lib_win32
118      BuildForRelease: true
119
120  - script: |
121      %MSBUILD% Tools\msi\bundle\releaselocal.wixproj /t:Rebuild /p:RebuildAll=true
122    displayName: 'Build amd64 installer'
123    env:
124      Platform: x64
125      Py_OutDir: $(Build.BinariesDirectory)
126      PYTHON: $(Build.BinariesDirectory)\amd64\python.exe
127      PythonForBuild: $(Build.BinariesDirectory)\amd64\python.exe
128      PYTHONHOME: $(Build.SourcesDirectory)
129      TclTkLibraryDir: $(Build.BinariesDirectory)\tcltk_lib_amd64
130      BuildForRelease: true
131
132  - script: |
133      %MSBUILD% Tools\msi\bundle\releaselocal.wixproj /t:Rebuild /p:RebuildAll=true
134    displayName: 'Build arm64 installer'
135    condition: and(succeeded(), eq(variables['PublishARM64'], 'true'))
136    env:
137      Platform: ARM64
138      Py_OutDir: $(Build.BinariesDirectory)
139      PYTHON: $(Build.BinariesDirectory)\win32\python.exe
140      PythonForBuild: $(Build.BinariesDirectory)\win32\python.exe
141      PYTHONHOME: $(Build.SourcesDirectory)
142      BuildForRelease: true
143      ${{ if eq(parameters.ARM64TclTk, true) }}:
144        TclTkLibraryDir: $(Build.BinariesDirectory)\tcltk_lib_arm64
145
146  - task: CopyFiles@2
147    displayName: 'Assemble artifact: msi (win32)'
148    inputs:
149      sourceFolder: $(Build.BinariesDirectory)\win32\en-us
150      targetFolder: $(Build.ArtifactStagingDirectory)\msi\win32
151      contents: |
152        *.msi
153        *.cab
154        *.exe
155
156  - task: CopyFiles@2
157    displayName: 'Assemble artifact: msi (amd64)'
158    inputs:
159      sourceFolder: $(Build.BinariesDirectory)\amd64\en-us
160      targetFolder: $(Build.ArtifactStagingDirectory)\msi\amd64
161      contents: |
162        *.msi
163        *.cab
164        *.exe
165
166  - task: CopyFiles@2
167    displayName: 'Assemble artifact: msi (arm64)'
168    condition: and(succeeded(), eq(variables['PublishARM64'], 'true'))
169    inputs:
170      sourceFolder: $(Build.BinariesDirectory)\arm64\en-us
171      targetFolder: $(Build.ArtifactStagingDirectory)\msi\arm64
172      contents: |
173        *.msi
174        *.cab
175        *.exe
176
177  - task: PublishPipelineArtifact@0
178    displayName: 'Publish MSI'
179    inputs:
180      targetPath: '$(Build.ArtifactStagingDirectory)\msi'
181      artifactName: msi
182