Skip to content

Commit 9651bd9

Browse files
committed
[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 4916088 commit 9651bd9

File tree

5 files changed

+330
-252
lines changed

5 files changed

+330
-252
lines changed

build-tools/automation/azure-pipelines.yaml

Lines changed: 6 additions & 248 deletions
Original file line numberDiff line numberDiff line change
@@ -85,257 +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.417
180-
181-
# 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.
182-
# The VS installer will attempt to resume any failed or partial installation before trying to downgrade Xamarin.Android.
183-
# VSIXInstaller.exe will exit non-zero when the downgrade attempt is a no-op, so we will allow this step to fail silently.
184-
- powershell: |
185-
$vsWhere = "${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe"
186-
& "$vsWhere" -all -prerelease -latest | Out-Default
187-
$isLatestVSLaunchable = & "$vsWhere" -all -prerelease -latest -property isLaunchable
188-
if ($isLatestVSLaunchable -eq 0) {
189-
$vsPath = & "$vsWhere" -all -prerelease -latest -property installationPath
190-
Write-Host "Attempting to repair VS instance:" $vsPath
191-
$vsInstaller = "${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vs_installer.exe"
192-
& "$vsInstaller" resume --installPath $vsPath --quiet --norestart | Out-Default
193-
Write-Host "vs_installer.exe resume attempt complete"
194-
}
195-
$vsixInstaller = "${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\resources\app\ServiceHub\Services\Microsoft.VisualStudio.Setup.Service\VSIXInstaller.exe"
196-
$ts = Get-Date -Format FileDateTimeUniversal
197-
$log = "xavsixdowngrade-$ts.log"
198-
$process = Start-Process -NoNewWindow -FilePath $vsixInstaller -ArgumentList "/downgrade:Xamarin.Android.Sdk /admin /quiet /logFile:$log" -Wait -PassThru -RedirectStandardError "err.txt"
199-
Get-Content "err.txt" | Write-Host
200-
Get-Content "${env:TEMP}\$log" | Write-Host
201-
Write-Host "VSInstaller.exe exited with code:" $process.ExitCode
202-
Remove-Item "${env:TEMP}\$log"
203-
displayName: downgrade XA to stable
204-
ignoreLASTEXITCODE: true
205-
206-
- task: DotNetCoreCLI@2
207-
displayName: Prepare Solution
208-
inputs:
209-
projects: Xamarin.Android.sln
210-
arguments: '-c $(XA.Build.Configuration) -t:Prepare --no-restore -p:AutoProvision=true -bl:$(System.DefaultWorkingDirectory)\bin\Build$(XA.Build.Configuration)\dotnet-build-prepare.binlog'
211-
212-
# Build, pack .nupkgs, and extract workload packs to dotnet preview test directory
213-
- template: yaml-templates\run-dotnet-preview.yaml
214-
parameters:
215-
project: Xamarin.Android.sln
216-
arguments: >-
217-
-t:BuildDotNet,PackDotNet -c $(XA.Build.Configuration) -v:n
218-
-bl:$(System.DefaultWorkingDirectory)\bin\Build$(XA.Build.Configuration)\dotnet-build.binlog
219-
displayName: Build Solution
220-
continueOnError: false
221-
222-
- task: MSBuild@1
223-
displayName: msbuild create-vsix
224-
inputs:
225-
solution: build-tools\create-vsix\create-vsix.csproj
226-
configuration: $(XA.Build.Configuration)
227-
msbuildArguments: /p:CreateVsixContainer=True /p:ZipPackageCompressionLevel=Normal /bl:$(System.DefaultWorkingDirectory)\bin\Build$(XA.Build.Configuration)\dotnet-create-vsix.binlog
228-
229-
- task: MSBuild@1
230-
displayName: msbuild xabuild
231-
inputs:
232-
solution: tools\xabuild\xabuild.csproj
233-
configuration: $(XA.Build.Configuration)
234-
msbuildArguments: /restore /bl:$(System.DefaultWorkingDirectory)\bin\Build$(XA.Build.Configuration)\dotnet-xabuild.binlog
235-
236-
- task: CmdLine@1
237-
displayName: xabuild Xamarin.Android-Tests
238-
inputs:
239-
filename: bin\$(XA.Build.Configuration)\bin\xabuild.exe
240-
arguments: Xamarin.Android-Tests.sln /restore /p:Configuration=$(XA.Build.Configuration) /bl:$(System.DefaultWorkingDirectory)\bin\Test$(XA.Build.Configuration)\dotnet-build-tests.binlog
241-
242-
- template: yaml-templates\install-apkdiff.yaml
243-
244-
- template: yaml-templates\run-nunit-tests.yaml
245-
parameters:
246-
testRunTitle: Smoke MSBuild Tests - Windows Build Tree
247-
testAssembly: $(System.DefaultWorkingDirectory)\bin\Test$(XA.Build.Configuration)\net472\Xamarin.Android.Build.Tests.dll
248-
testResultsFile: TestResult-SmokeMSBuildTests-WinBuildTree-$(XA.Build.Configuration).xml
249-
nunitConsoleExtraArgs: --where "cat == SmokeTests"
250-
251-
- template: yaml-templates\run-nunit-tests.yaml
252-
parameters:
253-
useDotNet: true
254-
testRunTitle: Smoke MSBuild Tests - Windows Dotnet Build
255-
testAssembly: $(System.DefaultWorkingDirectory)\bin\Test$(XA.Build.Configuration)\$(DotNetStableTargetFramework)\Xamarin.Android.Build.Tests.dll
256-
testResultsFile: TestResult-SmokeMSBuildTests-WinDotnetBuild-$(XA.Build.Configuration).xml
257-
dotNetTestExtraArgs: --filter "TestCategory = SmokeTests $(DotNetNUnitCategories)"
258-
259-
- template: yaml-templates\upload-results.yaml
260-
parameters:
261-
artifactName: Build Results - Windows
262-
includeBuildResults: true
88+
- template: yaml-templates/build-macos.yaml
89+
parameters:
90+
provisionatorChannel: ${{ parameters.provisionatorChannel }}
91+
signClassicPkgContent: ${{ parameters.signClassicPkgContent }}
26392

264-
- template: yaml-templates\fail-on-issue.yaml
93+
- template: yaml-templates/build-windows.yaml
26594

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

34098
- stage: smoke_tests
34199
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)