Skip to content

Commit b5d1d22

Browse files
authored
[ci] Move build stages into yaml templates (#7553)
Context: xamarin/sdk-insertions#42 Context: https://devdiv.visualstudio.com/DevDiv/_build?definitionId=17671&_a=summary As part of efforts to create an integration and release pipeline for all of MAUI we will want to "templatize" more of our YAML. Our three build stages have been moved into new templates that can be referenced by the MAUI "mega pipeline".
1 parent 097f239 commit b5d1d22

5 files changed

Lines changed: 331 additions & 253 deletions

File tree

build-tools/automation/azure-pipelines.yaml

Lines changed: 6 additions & 249 deletions
Original file line numberDiff line numberDiff line change
@@ -85,258 +85,15 @@ variables:
8585

8686
# Stage and Job "display names" are shortened because they are combined to form the name of the corresponding GitHub check.
8787
stages:
88-
- stage: mac_build
89-
displayName: Mac
90-
dependsOn: []
91-
jobs:
92-
# Check - "Xamarin.Android (macOS > Build)"
93-
- job: mac_build_create_installers
94-
displayName: macOS > Build
95-
pool:
96-
name: $(MacBuildPoolName)
97-
vmImage: $(MacBuildPoolImage)
98-
${{ if eq(variables['MacBuildPoolName'], 'VSEng-Xamarin-RedmondMac-Android-Untrusted') }}:
99-
demands: macOS.Name -equals Monterey
100-
timeoutInMinutes: 240
101-
cancelTimeoutInMinutes: 5
102-
workspace:
103-
clean: all
104-
steps:
105-
- checkout: self
106-
submodules: recursive
107-
path: s/xamarin-android
108-
109-
- template: yaml-templates/install-microbuild-tooling.yaml
110-
parameters:
111-
condition: and(succeeded(), eq(variables['MicroBuildSignType'], 'Real'))
112-
113-
- template: yaml-templates/commercial-build.yaml
114-
parameters:
115-
provisionatorChannel: ${{ parameters.provisionatorChannel }}
116-
signClassicPkgContent: ${{ parameters.signClassicPkgContent }}
117-
118-
- template: yaml-templates/remove-microbuild-tooling.yaml
119-
parameters:
120-
condition: and(succeededOrFailed(), eq(variables['MicroBuildSignType'], 'Real'))
121-
122-
- script: >
123-
mkdir -p $(System.DefaultWorkingDirectory)/xamarin-android/bin/Build$(XA.Build.Configuration)/windows-toolchain-pdb &&
124-
cd $(System.DefaultWorkingDirectory)/xamarin-android/bin/$(XA.Build.Configuration)/lib/packs/Microsoft.Android.Sdk.Darwin/*/tools/binutils/windows-toolchain-pdb &&
125-
zip -r $(System.DefaultWorkingDirectory)/xamarin-android/bin/Build$(XA.Build.Configuration)/windows-toolchain-pdb/windows-toolchain-pdb.zip .
126-
workingDirectory: $(System.DefaultWorkingDirectory)/xamarin-android
127-
displayName: zip Windows toolchain pdb files
128-
129-
- task: PublishPipelineArtifact@1
130-
displayName: upload Windows toolchain pdb files
131-
inputs:
132-
artifactName: $(WindowsToolchainPdbArtifactName)
133-
targetPath: $(System.DefaultWorkingDirectory)/xamarin-android/bin/Build$(XA.Build.Configuration)/windows-toolchain-pdb
134-
135-
- template: yaml-templates/upload-results.yaml
136-
parameters:
137-
xaSourcePath: $(System.DefaultWorkingDirectory)/xamarin-android
138-
artifactName: Build Results - macOS
139-
includeBuildResults: true
140-
141-
- template: yaml-templates/run-xaprepare.yaml
142-
parameters:
143-
arguments: --s=DetermineApplicableTests
144-
xaSourcePath: $(System.DefaultWorkingDirectory)/xamarin-android
145-
displayName: determine which test stages to run
146-
name: TestConditions
147-
condition: and(succeeded(), eq(variables['Build.DefinitionName'], 'Xamarin.Android-PR'))
148-
149-
# This stage ensures Windows specific build steps continue to work, and runs unit tests.
150-
- stage: win_build_test
151-
displayName: Windows
152-
dependsOn: []
153-
jobs:
154-
# Check - "Xamarin.Android (Windows > Build & Smoke Test)"
155-
- job: win_build_test
156-
displayName: Windows > Build & Smoke Test
157-
pool: $(1ESWindowsPool)
158-
timeoutInMinutes: 360
159-
cancelTimeoutInMinutes: 5
160-
steps:
161-
- checkout: self
162-
submodules: recursive
163-
164-
- template: yaml-templates\kill-processes.yaml
165-
166-
- template: yaml-templates\clean.yaml
167-
168-
- script: |
169-
echo ##vso[task.setvariable variable=JI_JAVA_HOME]%JAVA_HOME_11_X64%
170-
displayName: set JI_JAVA_HOME
171-
172-
- template: yaml-templates\use-dot-net.yaml
173-
parameters:
174-
remove_dotnet: true
175-
176-
# xabuild still depends on .NET Core 3 or earlier
177-
- template: yaml-templates\use-dot-net.yaml
178-
parameters:
179-
version: 3.1
180-
quality: GA
181-
182-
# Downgrade the XA .vsix installed into the instance of VS that we are building with so that we don't restore/build against a test version.
183-
# The VS installer will attempt to resume any failed or partial installation before trying to downgrade Xamarin.Android.
184-
# VSIXInstaller.exe will exit non-zero when the downgrade attempt is a no-op, so we will allow this step to fail silently.
185-
- powershell: |
186-
$vsWhere = "${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe"
187-
& "$vsWhere" -all -prerelease -latest | Out-Default
188-
$isLatestVSLaunchable = & "$vsWhere" -all -prerelease -latest -property isLaunchable
189-
if ($isLatestVSLaunchable -eq 0) {
190-
$vsPath = & "$vsWhere" -all -prerelease -latest -property installationPath
191-
Write-Host "Attempting to repair VS instance:" $vsPath
192-
$vsInstaller = "${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vs_installer.exe"
193-
& "$vsInstaller" resume --installPath $vsPath --quiet --norestart | Out-Default
194-
Write-Host "vs_installer.exe resume attempt complete"
195-
}
196-
$vsixInstaller = "${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\resources\app\ServiceHub\Services\Microsoft.VisualStudio.Setup.Service\VSIXInstaller.exe"
197-
$ts = Get-Date -Format FileDateTimeUniversal
198-
$log = "xavsixdowngrade-$ts.log"
199-
$process = Start-Process -NoNewWindow -FilePath $vsixInstaller -ArgumentList "/downgrade:Xamarin.Android.Sdk /admin /quiet /logFile:$log" -Wait -PassThru -RedirectStandardError "err.txt"
200-
Get-Content "err.txt" | Write-Host
201-
Get-Content "${env:TEMP}\$log" | Write-Host
202-
Write-Host "VSInstaller.exe exited with code:" $process.ExitCode
203-
Remove-Item "${env:TEMP}\$log"
204-
displayName: downgrade XA to stable
205-
ignoreLASTEXITCODE: true
206-
207-
- task: DotNetCoreCLI@2
208-
displayName: Prepare Solution
209-
inputs:
210-
projects: Xamarin.Android.sln
211-
arguments: '-c $(XA.Build.Configuration) -t:Prepare --no-restore -p:AutoProvision=true -bl:$(System.DefaultWorkingDirectory)\bin\Build$(XA.Build.Configuration)\dotnet-build-prepare.binlog'
212-
213-
# Build, pack .nupkgs, and extract workload packs to dotnet preview test directory
214-
- template: yaml-templates\run-dotnet-preview.yaml
215-
parameters:
216-
project: Xamarin.Android.sln
217-
arguments: >-
218-
-t:BuildDotNet,PackDotNet -c $(XA.Build.Configuration) -v:n
219-
-bl:$(System.DefaultWorkingDirectory)\bin\Build$(XA.Build.Configuration)\dotnet-build.binlog
220-
displayName: Build Solution
221-
continueOnError: false
222-
223-
- task: MSBuild@1
224-
displayName: msbuild create-vsix
225-
inputs:
226-
solution: build-tools\create-vsix\create-vsix.csproj
227-
configuration: $(XA.Build.Configuration)
228-
msbuildArguments: /p:CreateVsixContainer=True /p:ZipPackageCompressionLevel=Normal /bl:$(System.DefaultWorkingDirectory)\bin\Build$(XA.Build.Configuration)\dotnet-create-vsix.binlog
229-
230-
- task: MSBuild@1
231-
displayName: msbuild xabuild
232-
inputs:
233-
solution: tools\xabuild\xabuild.csproj
234-
configuration: $(XA.Build.Configuration)
235-
msbuildArguments: /restore /bl:$(System.DefaultWorkingDirectory)\bin\Build$(XA.Build.Configuration)\dotnet-xabuild.binlog
236-
237-
- task: CmdLine@1
238-
displayName: xabuild Xamarin.Android-Tests
239-
inputs:
240-
filename: bin\$(XA.Build.Configuration)\bin\xabuild.exe
241-
arguments: Xamarin.Android-Tests.sln /restore /p:Configuration=$(XA.Build.Configuration) /bl:$(System.DefaultWorkingDirectory)\bin\Test$(XA.Build.Configuration)\dotnet-build-tests.binlog
242-
243-
- template: yaml-templates\install-apkdiff.yaml
244-
245-
- template: yaml-templates\run-nunit-tests.yaml
246-
parameters:
247-
testRunTitle: Smoke MSBuild Tests - Windows Build Tree
248-
testAssembly: $(System.DefaultWorkingDirectory)\bin\Test$(XA.Build.Configuration)\net472\Xamarin.Android.Build.Tests.dll
249-
testResultsFile: TestResult-SmokeMSBuildTests-WinBuildTree-$(XA.Build.Configuration).xml
250-
nunitConsoleExtraArgs: --where "cat == SmokeTests"
251-
252-
- template: yaml-templates\run-nunit-tests.yaml
253-
parameters:
254-
useDotNet: true
255-
testRunTitle: Smoke MSBuild Tests - Windows Dotnet Build
256-
testAssembly: $(System.DefaultWorkingDirectory)\bin\Test$(XA.Build.Configuration)\$(DotNetStableTargetFramework)\Xamarin.Android.Build.Tests.dll
257-
testResultsFile: TestResult-SmokeMSBuildTests-WinDotnetBuild-$(XA.Build.Configuration).xml
258-
dotNetTestExtraArgs: --filter "TestCategory = SmokeTests $(DotNetNUnitCategories)"
259-
260-
- template: yaml-templates\upload-results.yaml
261-
parameters:
262-
artifactName: Build Results - Windows
263-
includeBuildResults: true
88+
- template: yaml-templates/build-macos.yaml
89+
parameters:
90+
provisionatorChannel: ${{ parameters.provisionatorChannel }}
91+
signClassicPkgContent: ${{ parameters.signClassicPkgContent }}
26492

265-
- template: yaml-templates\fail-on-issue.yaml
93+
- template: yaml-templates/build-windows.yaml
26694

26795
# Check - "Xamarin.Android (Linux > Build)"
268-
- stage: linux_build
269-
displayName: Linux
270-
dependsOn: []
271-
jobs:
272-
- job: linux_build_create_sdk_pack
273-
displayName: Linux > Build
274-
pool: android-devdiv-ubuntu-vmss
275-
timeoutInMinutes: 180
276-
cancelTimeoutInMinutes: 2
277-
workspace:
278-
clean: all
279-
variables:
280-
CXX: g++-10
281-
CC: gcc-10
282-
steps:
283-
- checkout: self
284-
clean: true
285-
submodules: recursive
286-
path: s/xamarin-android
287-
288-
- checkout: monodroid
289-
clean: true
290-
submodules: recursive
291-
path: s/xamarin-android/external/monodroid
292-
persistCredentials: true
293-
294-
- script: rm -rf external/monodroid/external/xamarin-android
295-
workingDirectory: $(System.DefaultWorkingDirectory)/xamarin-android
296-
displayName: delete external xamarin-android submodule
297-
298-
- template: yaml-templates/setup-ubuntu.yaml
299-
300-
- task: NuGetAuthenticate@0
301-
displayName: authenticate with azure artifacts
302-
inputs:
303-
forceReinstallCredentialProvider: true
304-
305-
- script: make prepare-external-git-dependencies PREPARE_CI=1 CONFIGURATION=$(XA.Build.Configuration)
306-
workingDirectory: $(System.DefaultWorkingDirectory)/xamarin-android
307-
displayName: make prepare-external-git-dependencies
308-
309-
- script: make jenkins PREPARE_CI=1 PREPARE_AUTOPROVISION=1 CONFIGURATION=$(XA.Build.Configuration)
310-
workingDirectory: $(System.DefaultWorkingDirectory)/xamarin-android
311-
displayName: make jenkins
312-
313-
- script: make create-nupkgs CONFIGURATION=$(XA.Build.Configuration)
314-
workingDirectory: $(System.DefaultWorkingDirectory)/xamarin-android
315-
displayName: make create-nupkgs
316-
317-
- script: >
318-
df -h &&
319-
mkdir -p $(System.DefaultWorkingDirectory)/xamarin-android/bin/Build$(XA.Build.Configuration)/nuget-linux &&
320-
ln $(System.DefaultWorkingDirectory)/xamarin-android/bin/Build$(XA.Build.Configuration)/$(NuGetArtifactName)/Microsoft.Android.Sdk.Linux*.nupkg
321-
$(System.DefaultWorkingDirectory)/xamarin-android/bin/Build$(XA.Build.Configuration)/nuget-linux &&
322-
ln $(System.DefaultWorkingDirectory)/xamarin-android/bin/Build$(XA.Build.Configuration)/$(NuGetArtifactName)/SignList.xml
323-
$(System.DefaultWorkingDirectory)/xamarin-android/bin/Build$(XA.Build.Configuration)/nuget-linux
324-
workingDirectory: $(System.DefaultWorkingDirectory)/xamarin-android
325-
displayName: copy linux sdk
326-
327-
- task: PublishPipelineArtifact@1
328-
displayName: upload linux sdk
329-
inputs:
330-
artifactName: $(LinuxNuGetArtifactName)
331-
targetPath: $(System.DefaultWorkingDirectory)/xamarin-android/bin/Build$(XA.Build.Configuration)/nuget-linux
332-
333-
- template: yaml-templates/upload-results.yaml
334-
parameters:
335-
xaSourcePath: $(System.DefaultWorkingDirectory)/xamarin-android
336-
artifactName: Build Results - Linux
337-
includeBuildResults: true
338-
339-
- template: yaml-templates/fail-on-issue.yaml
96+
- template: yaml-templates/build-linux.yaml
34097

34198
- stage: smoke_tests
34299
displayName: Smoke Tests
Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
parameters:
2+
buildPool: android-devdiv-ubuntu-vmss
3+
buildResultArtifactName: Build Results - Linux
4+
checkoutCommit: ''
5+
checkoutPath: 's/xamarin-android'
6+
checkoutPersistCredentials: false
7+
dependsOn: ''
8+
dependsOnResult: ''
9+
jobName: linux_build_create_sdk_pack
10+
jobDisplayName: Linux > Build
11+
nugetArtifactName: $(LinuxNuGetArtifactName)
12+
repositoryAlias: self
13+
stageName: linux_build
14+
stageDisplayName: Linux
15+
16+
stages:
17+
- stage: ${{ parameters.stageName }}
18+
displayName: ${{ parameters.stageDisplayName }}
19+
dependsOn: ${{ parameters.dependsOn }}
20+
${{ if and(ne(parameters.dependsOn, ''), ne(parameters.dependsOnResult, '')) }}:
21+
condition: eq(dependencies.${{ parameters.dependsOn }}.result, '${{ parameters.dependsOnResult }}')
22+
jobs:
23+
- job: ${{ parameters.jobName }}
24+
displayName: ${{ parameters.jobDisplayName }}
25+
pool: ${{ parameters.buildPool }}
26+
timeoutInMinutes: 180
27+
workspace:
28+
clean: all
29+
variables:
30+
CXX: g++-10
31+
CC: gcc-10
32+
steps:
33+
- template: sdk-unified/steps/checkout/v1.yml@yaml-templates
34+
parameters:
35+
resource: ${{ parameters.repositoryAlias }}
36+
commit: ${{ parameters.checkoutCommit }}
37+
path: ${{ parameters.checkoutPath }}
38+
persistCredentials: ${{ parameters.checkoutPersistCredentials }}
39+
40+
- checkout: monodroid
41+
clean: true
42+
submodules: recursive
43+
path: s/xamarin-android/external/monodroid
44+
persistCredentials: true
45+
46+
- script: rm -rf external/monodroid/external/xamarin-android
47+
workingDirectory: $(System.DefaultWorkingDirectory)/xamarin-android
48+
displayName: delete external xamarin-android submodule
49+
50+
- template: setup-ubuntu.yaml
51+
52+
- task: NuGetAuthenticate@0
53+
displayName: authenticate with azure artifacts
54+
inputs:
55+
forceReinstallCredentialProvider: true
56+
57+
- script: make prepare-external-git-dependencies PREPARE_CI=1 CONFIGURATION=$(XA.Build.Configuration)
58+
workingDirectory: $(System.DefaultWorkingDirectory)/xamarin-android
59+
displayName: make prepare-external-git-dependencies
60+
61+
- script: make jenkins PREPARE_CI=1 PREPARE_AUTOPROVISION=1 CONFIGURATION=$(XA.Build.Configuration)
62+
workingDirectory: $(System.DefaultWorkingDirectory)/xamarin-android
63+
displayName: make jenkins
64+
65+
- script: make create-nupkgs CONFIGURATION=$(XA.Build.Configuration)
66+
workingDirectory: $(System.DefaultWorkingDirectory)/xamarin-android
67+
displayName: make create-nupkgs
68+
69+
- script: >
70+
df -h &&
71+
mkdir -p $(System.DefaultWorkingDirectory)/xamarin-android/bin/Build$(XA.Build.Configuration)/nuget-linux &&
72+
ln $(System.DefaultWorkingDirectory)/xamarin-android/bin/Build$(XA.Build.Configuration)/$(NuGetArtifactName)/Microsoft.Android.Sdk.Linux*.nupkg
73+
$(System.DefaultWorkingDirectory)/xamarin-android/bin/Build$(XA.Build.Configuration)/nuget-linux &&
74+
ln $(System.DefaultWorkingDirectory)/xamarin-android/bin/Build$(XA.Build.Configuration)/$(NuGetArtifactName)/SignList.xml
75+
$(System.DefaultWorkingDirectory)/xamarin-android/bin/Build$(XA.Build.Configuration)/nuget-linux
76+
workingDirectory: $(System.DefaultWorkingDirectory)/xamarin-android
77+
displayName: copy linux sdk
78+
79+
- task: PublishPipelineArtifact@1
80+
displayName: upload linux sdk
81+
inputs:
82+
artifactName: ${{ parameters.nugetArtifactName }}
83+
targetPath: $(System.DefaultWorkingDirectory)/xamarin-android/bin/Build$(XA.Build.Configuration)/nuget-linux
84+
85+
- template: upload-results.yaml
86+
parameters:
87+
xaSourcePath: $(System.DefaultWorkingDirectory)/xamarin-android
88+
artifactName: ${{ parameters.buildResultArtifactName }}
89+
includeBuildResults: true
90+
91+
- template: fail-on-issue.yaml

0 commit comments

Comments
 (0)