From 4580190a9a9021140be481e2b375ea78826d9454 Mon Sep 17 00:00:00 2001 From: Peter Collins Date: Fri, 11 Nov 2022 13:34:22 -0500 Subject: [PATCH 1/7] [ci] Move build stages into yaml templates As part of efforts to create an integration and release pipeline for all of MAUI we will want to "templatize" more yaml. --- build-tools/automation/azure-pipelines.yaml | 255 +----------------- .../yaml-templates/build-linux.yaml | 81 ++++++ .../yaml-templates/build-macos.yaml | 73 +++++ .../yaml-templates/build-windows.yaml | 126 +++++++++ 4 files changed, 286 insertions(+), 249 deletions(-) create mode 100644 build-tools/automation/yaml-templates/build-linux.yaml create mode 100644 build-tools/automation/yaml-templates/build-macos.yaml create mode 100644 build-tools/automation/yaml-templates/build-windows.yaml diff --git a/build-tools/automation/azure-pipelines.yaml b/build-tools/automation/azure-pipelines.yaml index 813eb4bd4be..e92b8dc70f2 100644 --- a/build-tools/automation/azure-pipelines.yaml +++ b/build-tools/automation/azure-pipelines.yaml @@ -83,258 +83,15 @@ variables: # Stage and Job "display names" are shortened because they are combined to form the name of the corresponding GitHub check. stages: -- stage: mac_build - displayName: Mac - dependsOn: [] - jobs: - # Check - "Xamarin.Android (macOS > Build)" - - job: mac_build_create_installers - displayName: macOS > Build - pool: - name: $(MacBuildPoolName) - vmImage: $(MacBuildPoolImage) - ${{ if eq(variables['MacBuildPoolName'], 'VSEng-Xamarin-RedmondMac-Android-Untrusted') }}: - demands: macOS.Name -equals Monterey - timeoutInMinutes: 240 - cancelTimeoutInMinutes: 5 - workspace: - clean: all - steps: - - checkout: self - submodules: recursive - path: s/xamarin-android - - - template: yaml-templates/install-microbuild-tooling.yaml - parameters: - condition: and(succeeded(), eq(variables['MicroBuildSignType'], 'Real')) - - - template: yaml-templates/commercial-build.yaml - parameters: - provisionatorChannel: ${{ parameters.provisionatorChannel }} - signClassicPkgContent: ${{ parameters.signClassicPkgContent }} - - - template: yaml-templates/remove-microbuild-tooling.yaml - parameters: - condition: and(succeededOrFailed(), eq(variables['MicroBuildSignType'], 'Real')) - - - script: > - mkdir -p $(System.DefaultWorkingDirectory)/xamarin-android/bin/Build$(XA.Build.Configuration)/windows-toolchain-pdb && - cd $(System.DefaultWorkingDirectory)/xamarin-android/bin/$(XA.Build.Configuration)/lib/packs/Microsoft.Android.Sdk.Darwin/*/tools/binutils/windows-toolchain-pdb && - zip -r $(System.DefaultWorkingDirectory)/xamarin-android/bin/Build$(XA.Build.Configuration)/windows-toolchain-pdb/windows-toolchain-pdb.zip . - workingDirectory: $(System.DefaultWorkingDirectory)/xamarin-android - displayName: zip Windows toolchain pdb files - - - task: PublishPipelineArtifact@1 - displayName: upload Windows toolchain pdb files - inputs: - artifactName: $(WindowsToolchainPdbArtifactName) - targetPath: $(System.DefaultWorkingDirectory)/xamarin-android/bin/Build$(XA.Build.Configuration)/windows-toolchain-pdb - - - template: yaml-templates/upload-results.yaml - parameters: - xaSourcePath: $(System.DefaultWorkingDirectory)/xamarin-android - artifactName: Build Results - macOS - includeBuildResults: true - - - template: yaml-templates/run-xaprepare.yaml - parameters: - arguments: --s=DetermineApplicableTests - xaSourcePath: $(System.DefaultWorkingDirectory)/xamarin-android - displayName: determine which test stages to run - name: TestConditions - condition: and(succeeded(), eq(variables['Build.DefinitionName'], 'Xamarin.Android-PR')) - -# This stage ensures Windows specific build steps continue to work, and runs unit tests. -- stage: win_build_test - displayName: Windows - dependsOn: [] - jobs: - # Check - "Xamarin.Android (Windows > Build & Smoke Test)" - - job: win_build_test - displayName: Windows > Build & Smoke Test - pool: $(1ESWindowsPool) - timeoutInMinutes: 360 - cancelTimeoutInMinutes: 5 - steps: - - checkout: self - submodules: recursive - - - template: yaml-templates\kill-processes.yaml - - - template: yaml-templates\clean.yaml - - - script: | - echo ##vso[task.setvariable variable=JI_JAVA_HOME]%JAVA_HOME_11_X64% - displayName: set JI_JAVA_HOME - - - template: yaml-templates\use-dot-net.yaml - parameters: - remove_dotnet: true - - # xabuild still depends on .NET Core 3 or earlier - - template: yaml-templates\use-dot-net.yaml - parameters: - version: 3.1 - quality: GA - - # 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. - # The VS installer will attempt to resume any failed or partial installation before trying to downgrade Xamarin.Android. - # VSIXInstaller.exe will exit non-zero when the downgrade attempt is a no-op, so we will allow this step to fail silently. - - powershell: | - $vsWhere = "${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe" - & "$vsWhere" -all -prerelease -latest | Out-Default - $isLatestVSLaunchable = & "$vsWhere" -all -prerelease -latest -property isLaunchable - if ($isLatestVSLaunchable -eq 0) { - $vsPath = & "$vsWhere" -all -prerelease -latest -property installationPath - Write-Host "Attempting to repair VS instance:" $vsPath - $vsInstaller = "${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vs_installer.exe" - & "$vsInstaller" resume --installPath $vsPath --quiet --norestart | Out-Default - Write-Host "vs_installer.exe resume attempt complete" - } - $vsixInstaller = "${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\resources\app\ServiceHub\Services\Microsoft.VisualStudio.Setup.Service\VSIXInstaller.exe" - $ts = Get-Date -Format FileDateTimeUniversal - $log = "xavsixdowngrade-$ts.log" - $process = Start-Process -NoNewWindow -FilePath $vsixInstaller -ArgumentList "/downgrade:Xamarin.Android.Sdk /admin /quiet /logFile:$log" -Wait -PassThru -RedirectStandardError "err.txt" - Get-Content "err.txt" | Write-Host - Get-Content "${env:TEMP}\$log" | Write-Host - Write-Host "VSInstaller.exe exited with code:" $process.ExitCode - Remove-Item "${env:TEMP}\$log" - displayName: downgrade XA to stable - ignoreLASTEXITCODE: true - - - task: DotNetCoreCLI@2 - displayName: Prepare Solution - inputs: - projects: Xamarin.Android.sln - arguments: '-c $(XA.Build.Configuration) -t:Prepare --no-restore -p:AutoProvision=true -bl:$(System.DefaultWorkingDirectory)\bin\Build$(XA.Build.Configuration)\dotnet-build-prepare.binlog' - - # Build, pack .nupkgs, and extract workload packs to dotnet preview test directory - - template: yaml-templates\run-dotnet-preview.yaml - parameters: - project: Xamarin.Android.sln - arguments: >- - -t:BuildDotNet,PackDotNet -c $(XA.Build.Configuration) -v:n - -bl:$(System.DefaultWorkingDirectory)\bin\Build$(XA.Build.Configuration)\dotnet-build.binlog - displayName: Build Solution - continueOnError: false - - - task: MSBuild@1 - displayName: msbuild create-vsix - inputs: - solution: build-tools\create-vsix\create-vsix.csproj - configuration: $(XA.Build.Configuration) - msbuildArguments: /p:CreateVsixContainer=True /p:ZipPackageCompressionLevel=Normal /bl:$(System.DefaultWorkingDirectory)\bin\Build$(XA.Build.Configuration)\dotnet-create-vsix.binlog - - - task: MSBuild@1 - displayName: msbuild xabuild - inputs: - solution: tools\xabuild\xabuild.csproj - configuration: $(XA.Build.Configuration) - msbuildArguments: /restore /bl:$(System.DefaultWorkingDirectory)\bin\Build$(XA.Build.Configuration)\dotnet-xabuild.binlog - - - task: CmdLine@1 - displayName: xabuild Xamarin.Android-Tests - inputs: - filename: bin\$(XA.Build.Configuration)\bin\xabuild.exe - arguments: Xamarin.Android-Tests.sln /restore /p:Configuration=$(XA.Build.Configuration) /bl:$(System.DefaultWorkingDirectory)\bin\Test$(XA.Build.Configuration)\dotnet-build-tests.binlog - - - template: yaml-templates\install-apkdiff.yaml - - - template: yaml-templates\run-nunit-tests.yaml - parameters: - testRunTitle: Smoke MSBuild Tests - Windows Build Tree - testAssembly: $(System.DefaultWorkingDirectory)\bin\Test$(XA.Build.Configuration)\net472\Xamarin.Android.Build.Tests.dll - testResultsFile: TestResult-SmokeMSBuildTests-WinBuildTree-$(XA.Build.Configuration).xml - nunitConsoleExtraArgs: --where "cat == SmokeTests" - - - template: yaml-templates\run-nunit-tests.yaml - parameters: - useDotNet: true - testRunTitle: Smoke MSBuild Tests - Windows Dotnet Build - testAssembly: $(System.DefaultWorkingDirectory)\bin\Test$(XA.Build.Configuration)\$(DotNetStableTargetFramework)\Xamarin.Android.Build.Tests.dll - testResultsFile: TestResult-SmokeMSBuildTests-WinDotnetBuild-$(XA.Build.Configuration).xml - dotNetTestExtraArgs: --filter "TestCategory = SmokeTests $(DotNetNUnitCategories)" - - - template: yaml-templates\upload-results.yaml - parameters: - artifactName: Build Results - Windows - includeBuildResults: true +- template: yaml-templates/build-macos.yaml + parameters: + provisionatorChannel: ${{ parameters.provisionatorChannel }} + signClassicPkgContent: ${{ parameters.signClassicPkgContent }} - - template: yaml-templates\fail-on-issue.yaml +- template: yaml-templates/build-windows.yaml # Check - "Xamarin.Android (Linux > Build)" -- stage: linux_build - displayName: Linux - dependsOn: [] - jobs: - - job: linux_build_create_sdk_pack - displayName: Linux > Build - pool: android-devdiv-ubuntu-vmss - timeoutInMinutes: 180 - cancelTimeoutInMinutes: 2 - workspace: - clean: all - variables: - CXX: g++-10 - CC: gcc-10 - steps: - - checkout: self - clean: true - submodules: recursive - path: s/xamarin-android - - - checkout: monodroid - clean: true - submodules: recursive - path: s/xamarin-android/external/monodroid - persistCredentials: true - - - script: rm -rf external/monodroid/external/xamarin-android - workingDirectory: $(System.DefaultWorkingDirectory)/xamarin-android - displayName: delete external xamarin-android submodule - - - template: yaml-templates/setup-ubuntu.yaml - - - task: NuGetAuthenticate@0 - displayName: authenticate with azure artifacts - inputs: - forceReinstallCredentialProvider: true - - - script: make prepare-external-git-dependencies PREPARE_CI=1 CONFIGURATION=$(XA.Build.Configuration) - workingDirectory: $(System.DefaultWorkingDirectory)/xamarin-android - displayName: make prepare-external-git-dependencies - - - script: make jenkins PREPARE_CI=1 PREPARE_AUTOPROVISION=1 CONFIGURATION=$(XA.Build.Configuration) - workingDirectory: $(System.DefaultWorkingDirectory)/xamarin-android - displayName: make jenkins - - - script: make create-nupkgs CONFIGURATION=$(XA.Build.Configuration) - workingDirectory: $(System.DefaultWorkingDirectory)/xamarin-android - displayName: make create-nupkgs - - - script: > - df -h && - mkdir -p $(System.DefaultWorkingDirectory)/xamarin-android/bin/Build$(XA.Build.Configuration)/nuget-linux && - ln $(System.DefaultWorkingDirectory)/xamarin-android/bin/Build$(XA.Build.Configuration)/$(NuGetArtifactName)/Microsoft.Android.Sdk.Linux*.nupkg - $(System.DefaultWorkingDirectory)/xamarin-android/bin/Build$(XA.Build.Configuration)/nuget-linux && - ln $(System.DefaultWorkingDirectory)/xamarin-android/bin/Build$(XA.Build.Configuration)/$(NuGetArtifactName)/SignList.xml - $(System.DefaultWorkingDirectory)/xamarin-android/bin/Build$(XA.Build.Configuration)/nuget-linux - workingDirectory: $(System.DefaultWorkingDirectory)/xamarin-android - displayName: copy linux sdk - - - task: PublishPipelineArtifact@1 - displayName: upload linux sdk - inputs: - artifactName: $(LinuxNuGetArtifactName) - targetPath: $(System.DefaultWorkingDirectory)/xamarin-android/bin/Build$(XA.Build.Configuration)/nuget-linux - - - template: yaml-templates/upload-results.yaml - parameters: - xaSourcePath: $(System.DefaultWorkingDirectory)/xamarin-android - artifactName: Build Results - Linux - includeBuildResults: true - - - template: yaml-templates/fail-on-issue.yaml +- template: yaml-templates/build-linux.yaml - stage: smoke_tests displayName: Smoke Tests diff --git a/build-tools/automation/yaml-templates/build-linux.yaml b/build-tools/automation/yaml-templates/build-linux.yaml new file mode 100644 index 00000000000..30fcc68b035 --- /dev/null +++ b/build-tools/automation/yaml-templates/build-linux.yaml @@ -0,0 +1,81 @@ +parameters: + buildPool: android-devdiv-ubuntu-vmss + dependsOn: [] + jobName: linux_build_create_sdk_pack + jobDisplayName: Linux > Build + repoAlias: self + stageName: linux_build + stageDisplayName: Linux + +stages: +- stage: ${{ parameters.stageName }} + displayName: ${{ parameters.stageDisplayName }} + dependsOn: ${{ parameters.dependsOn }} + jobs: + - job: ${{ parameters.jobName }} + displayName: ${{ parameters.jobDisplayName }} + pool: ${{ parameters.buildPool }} + timeoutInMinutes: 180 + workspace: + clean: all + variables: + CXX: g++-10 + CC: gcc-10 + steps: + - checkout: ${{ parameters.repoAlias }} + clean: true + submodules: recursive + path: s/xamarin-android + + - checkout: monodroid + clean: true + submodules: recursive + path: s/xamarin-android/external/monodroid + persistCredentials: true + + - script: rm -rf external/monodroid/external/xamarin-android + workingDirectory: $(System.DefaultWorkingDirectory)/xamarin-android + displayName: delete external xamarin-android submodule + + - template: setup-ubuntu.yaml + + - task: NuGetAuthenticate@0 + displayName: authenticate with azure artifacts + inputs: + forceReinstallCredentialProvider: true + + - script: make prepare-external-git-dependencies PREPARE_CI=1 CONFIGURATION=$(XA.Build.Configuration) + workingDirectory: $(System.DefaultWorkingDirectory)/xamarin-android + displayName: make prepare-external-git-dependencies + + - script: make jenkins PREPARE_CI=1 PREPARE_AUTOPROVISION=1 CONFIGURATION=$(XA.Build.Configuration) + workingDirectory: $(System.DefaultWorkingDirectory)/xamarin-android + displayName: make jenkins + + - script: make create-nupkgs CONFIGURATION=$(XA.Build.Configuration) + workingDirectory: $(System.DefaultWorkingDirectory)/xamarin-android + displayName: make create-nupkgs + + - script: > + df -h && + mkdir -p $(System.DefaultWorkingDirectory)/xamarin-android/bin/Build$(XA.Build.Configuration)/nuget-linux && + ln $(System.DefaultWorkingDirectory)/xamarin-android/bin/Build$(XA.Build.Configuration)/$(NuGetArtifactName)/Microsoft.Android.Sdk.Linux*.nupkg + $(System.DefaultWorkingDirectory)/xamarin-android/bin/Build$(XA.Build.Configuration)/nuget-linux && + ln $(System.DefaultWorkingDirectory)/xamarin-android/bin/Build$(XA.Build.Configuration)/$(NuGetArtifactName)/SignList.xml + $(System.DefaultWorkingDirectory)/xamarin-android/bin/Build$(XA.Build.Configuration)/nuget-linux + workingDirectory: $(System.DefaultWorkingDirectory)/xamarin-android + displayName: copy linux sdk + + - task: PublishPipelineArtifact@1 + displayName: upload linux sdk + inputs: + artifactName: $(LinuxNuGetArtifactName) + targetPath: $(System.DefaultWorkingDirectory)/xamarin-android/bin/Build$(XA.Build.Configuration)/nuget-linux + + - template: upload-results.yaml + parameters: + xaSourcePath: $(System.DefaultWorkingDirectory)/xamarin-android + artifactName: Build Results - Linux + includeBuildResults: true + + - template: fail-on-issue.yaml diff --git a/build-tools/automation/yaml-templates/build-macos.yaml b/build-tools/automation/yaml-templates/build-macos.yaml new file mode 100644 index 00000000000..b31de08c50c --- /dev/null +++ b/build-tools/automation/yaml-templates/build-macos.yaml @@ -0,0 +1,73 @@ +parameters: + buildPoolName: $(MacBuildPoolName) + buildPoolImage: $(MacBuildPoolImage) + dependsOn: [] + jobName: mac_build_create_installers + jobDisplayName: macOS > Build + provisionatorChannel: latest + repoAlias: self + signClassicPkgContent: false + stageName: mac_build + stageDisplayName: Mac + +stages: +- stage: ${{ parameters.stageName }} + displayName: ${{ parameters.stageDisplayName }} + dependsOn: ${{ parameters.dependsOn }} + jobs: + # Check - "Xamarin.Android (macOS > Build)" + - job: ${{ parameters.jobName }} + displayName: ${{ parameters.jobDisplayName }} + pool: + name: ${{ parameters.buildPoolName }} + vmImage: ${{ parameters.buildPoolImage }} + ${{ if eq(parameters.buildPoolName, 'VSEng-Xamarin-RedmondMac-Android-Untrusted') }}: + demands: macOS.Name -equals Monterey + timeoutInMinutes: 240 + cancelTimeoutInMinutes: 5 + workspace: + clean: all + steps: + - checkout: ${{ parameters.repoAlias }} + submodules: recursive + path: s/xamarin-android + + - template: install-microbuild-tooling.yaml + parameters: + condition: and(succeeded(), eq(variables['MicroBuildSignType'], 'Real')) + + - template: commercial-build.yaml + parameters: + provisionatorChannel: ${{ parameters.provisionatorChannel }} + signClassicPkgContent: ${{ parameters.signClassicPkgContent }} + + - template: remove-microbuild-tooling.yaml + parameters: + condition: and(succeededOrFailed(), eq(variables['MicroBuildSignType'], 'Real')) + + - script: > + mkdir -p $(System.DefaultWorkingDirectory)/xamarin-android/bin/Build$(XA.Build.Configuration)/windows-toolchain-pdb && + cd $(System.DefaultWorkingDirectory)/xamarin-android/bin/$(XA.Build.Configuration)/lib/packs/Microsoft.Android.Sdk.Darwin/*/tools/binutils/windows-toolchain-pdb && + zip -r $(System.DefaultWorkingDirectory)/xamarin-android/bin/Build$(XA.Build.Configuration)/windows-toolchain-pdb/windows-toolchain-pdb.zip . + workingDirectory: $(System.DefaultWorkingDirectory)/xamarin-android + displayName: zip Windows toolchain pdb files + + - task: PublishPipelineArtifact@1 + displayName: upload Windows toolchain pdb files + inputs: + artifactName: $(WindowsToolchainPdbArtifactName) + targetPath: $(System.DefaultWorkingDirectory)/xamarin-android/bin/Build$(XA.Build.Configuration)/windows-toolchain-pdb + + - template: upload-results.yaml + parameters: + xaSourcePath: $(System.DefaultWorkingDirectory)/xamarin-android + artifactName: Build Results - macOS + includeBuildResults: true + + - template: run-xaprepare.yaml + parameters: + arguments: --s=DetermineApplicableTests + xaSourcePath: $(System.DefaultWorkingDirectory)/xamarin-android + displayName: determine which test stages to run + name: TestConditions + condition: and(succeeded(), eq(variables['Build.DefinitionName'], 'Xamarin.Android-PR')) diff --git a/build-tools/automation/yaml-templates/build-windows.yaml b/build-tools/automation/yaml-templates/build-windows.yaml new file mode 100644 index 00000000000..aa5df372aa7 --- /dev/null +++ b/build-tools/automation/yaml-templates/build-windows.yaml @@ -0,0 +1,126 @@ +parameters: + buildPool: $(1ESWindowsPool) + dependsOn: [] + jobName: win_build_test + jobDisplayName: Windows > Build & Smoke Test + repoAlias: self + stageName: win_build_test + stageDisplayName: Windows + +# This stage ensures Windows specific build steps continue to work, and runs unit tests. +stages: +- stage: ${{ parameters.stageName }} + displayName: ${{ parameters.stageDisplayName }} + dependsOn: ${{ parameters.dependsOn }} + jobs: + # Check - "Xamarin.Android (Windows > Build & Smoke Test)" + - job: ${{ parameters.jobName }} + displayName: ${{ parameters.jobDisplayName }} + pool: ${{ parameters.buildPool }} + timeoutInMinutes: 360 + steps: + - checkout: ${{ parameters.repoAlias }} + submodules: recursive + + - template: kill-processes.yaml + + - template: clean.yaml + + - script: | + echo ##vso[task.setvariable variable=JI_JAVA_HOME]%JAVA_HOME_11_X64% + displayName: set JI_JAVA_HOME + + - template: use-dot-net.yaml + parameters: + remove_dotnet: true + + # xabuild still depends on .NET Core 3 or earlier + - template: use-dot-net.yaml + parameters: + version: 3.1 + quality: GA + + # 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. + # The VS installer will attempt to resume any failed or partial installation before trying to downgrade Xamarin.Android. + # VSIXInstaller.exe will exit non-zero when the downgrade attempt is a no-op, so we will allow this step to fail silently. + - powershell: | + $vsWhere = "${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe" + & "$vsWhere" -all -prerelease -latest | Out-Default + $isLatestVSLaunchable = & "$vsWhere" -all -prerelease -latest -property isLaunchable + if ($isLatestVSLaunchable -eq 0) { + $vsPath = & "$vsWhere" -all -prerelease -latest -property installationPath + Write-Host "Attempting to repair VS instance:" $vsPath + $vsInstaller = "${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vs_installer.exe" + & "$vsInstaller" resume --installPath $vsPath --quiet --norestart | Out-Default + Write-Host "vs_installer.exe resume attempt complete" + } + $vsixInstaller = "${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\resources\app\ServiceHub\Services\Microsoft.VisualStudio.Setup.Service\VSIXInstaller.exe" + $ts = Get-Date -Format FileDateTimeUniversal + $log = "xavsixdowngrade-$ts.log" + $process = Start-Process -NoNewWindow -FilePath $vsixInstaller -ArgumentList "/downgrade:Xamarin.Android.Sdk /admin /quiet /logFile:$log" -Wait -PassThru -RedirectStandardError "err.txt" + Get-Content "err.txt" | Write-Host + Get-Content "${env:TEMP}\$log" | Write-Host + Write-Host "VSInstaller.exe exited with code:" $process.ExitCode + Remove-Item "${env:TEMP}\$log" + displayName: downgrade XA to stable + ignoreLASTEXITCODE: true + + - task: DotNetCoreCLI@2 + displayName: Prepare Solution + inputs: + projects: Xamarin.Android.sln + arguments: '-c $(XA.Build.Configuration) -t:Prepare --no-restore -p:AutoProvision=true -bl:$(System.DefaultWorkingDirectory)\bin\Build$(XA.Build.Configuration)\dotnet-build-prepare.binlog' + + # Build, pack .nupkgs, and extract workload packs to dotnet preview test directory + - template: run-dotnet-preview.yaml + parameters: + project: Xamarin.Android.sln + arguments: >- + -t:BuildDotNet,PackDotNet -c $(XA.Build.Configuration) -v:n + -bl:$(System.DefaultWorkingDirectory)\bin\Build$(XA.Build.Configuration)\dotnet-build.binlog + displayName: Build Solution + continueOnError: false + + - task: MSBuild@1 + displayName: msbuild create-vsix + inputs: + solution: build-tools\create-vsix\create-vsix.csproj + configuration: $(XA.Build.Configuration) + msbuildArguments: /p:CreateVsixContainer=True /p:ZipPackageCompressionLevel=Normal /bl:$(System.DefaultWorkingDirectory)\bin\Build$(XA.Build.Configuration)\dotnet-create-vsix.binlog + + - task: MSBuild@1 + displayName: msbuild xabuild + inputs: + solution: tools\xabuild\xabuild.csproj + configuration: $(XA.Build.Configuration) + msbuildArguments: /restore /bl:$(System.DefaultWorkingDirectory)\bin\Build$(XA.Build.Configuration)\dotnet-xabuild.binlog + + - task: CmdLine@1 + displayName: xabuild Xamarin.Android-Tests + inputs: + filename: bin\$(XA.Build.Configuration)\bin\xabuild.exe + arguments: Xamarin.Android-Tests.sln /restore /p:Configuration=$(XA.Build.Configuration) /bl:$(System.DefaultWorkingDirectory)\bin\Test$(XA.Build.Configuration)\dotnet-build-tests.binlog + + - template: install-apkdiff.yaml + + - template: run-nunit-tests.yaml + parameters: + testRunTitle: Smoke MSBuild Tests - Windows Build Tree + testAssembly: $(System.DefaultWorkingDirectory)\bin\Test$(XA.Build.Configuration)\net472\Xamarin.Android.Build.Tests.dll + testResultsFile: TestResult-SmokeMSBuildTests-WinBuildTree-$(XA.Build.Configuration).xml + nunitConsoleExtraArgs: --where "cat == SmokeTests" + + - template: run-nunit-tests.yaml + parameters: + useDotNet: true + testRunTitle: Smoke MSBuild Tests - Windows Dotnet Build + testAssembly: $(System.DefaultWorkingDirectory)\bin\Test$(XA.Build.Configuration)\$(DotNetStableTargetFramework)\Xamarin.Android.Build.Tests.dll + testResultsFile: TestResult-SmokeMSBuildTests-WinDotnetBuild-$(XA.Build.Configuration).xml + dotNetTestExtraArgs: --filter "TestCategory = SmokeTests $(DotNetNUnitCategories)" + + - template: upload-results.yaml + parameters: + artifactName: Build Results - Windows + includeBuildResults: true + + - template: fail-on-issue.yaml From a5f762d4a9637492dea20a92610876c07f233ab1 Mon Sep 17 00:00:00 2001 From: Peter Collins Date: Fri, 11 Nov 2022 14:11:18 -0500 Subject: [PATCH 2/7] Try to fix build pool params --- build-tools/automation/azure-pipelines.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/build-tools/automation/azure-pipelines.yaml b/build-tools/automation/azure-pipelines.yaml index e92b8dc70f2..2096d4f40b9 100644 --- a/build-tools/automation/azure-pipelines.yaml +++ b/build-tools/automation/azure-pipelines.yaml @@ -85,6 +85,8 @@ variables: stages: - template: yaml-templates/build-macos.yaml parameters: + buildPoolName: $(MacBuildPoolName) + buildPoolImage: $(MacBuildPoolImage) provisionatorChannel: ${{ parameters.provisionatorChannel }} signClassicPkgContent: ${{ parameters.signClassicPkgContent }} From c1c3b672ab9f9afac3a6b86d8a0d9c9ab0a3a603 Mon Sep 17 00:00:00 2001 From: Peter Collins Date: Fri, 11 Nov 2022 14:21:40 -0500 Subject: [PATCH 3/7] Only set pool demands off of the MacBuildPoolName var --- build-tools/automation/azure-pipelines.yaml | 2 -- build-tools/automation/yaml-templates/build-macos.yaml | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/build-tools/automation/azure-pipelines.yaml b/build-tools/automation/azure-pipelines.yaml index 2096d4f40b9..e92b8dc70f2 100644 --- a/build-tools/automation/azure-pipelines.yaml +++ b/build-tools/automation/azure-pipelines.yaml @@ -85,8 +85,6 @@ variables: stages: - template: yaml-templates/build-macos.yaml parameters: - buildPoolName: $(MacBuildPoolName) - buildPoolImage: $(MacBuildPoolImage) provisionatorChannel: ${{ parameters.provisionatorChannel }} signClassicPkgContent: ${{ parameters.signClassicPkgContent }} diff --git a/build-tools/automation/yaml-templates/build-macos.yaml b/build-tools/automation/yaml-templates/build-macos.yaml index b31de08c50c..438119f52e1 100644 --- a/build-tools/automation/yaml-templates/build-macos.yaml +++ b/build-tools/automation/yaml-templates/build-macos.yaml @@ -21,7 +21,7 @@ stages: pool: name: ${{ parameters.buildPoolName }} vmImage: ${{ parameters.buildPoolImage }} - ${{ if eq(parameters.buildPoolName, 'VSEng-Xamarin-RedmondMac-Android-Untrusted') }}: + ${{ if eq(variables['MacBuildPoolName'], 'VSEng-Xamarin-RedmondMac-Android-Untrusted') }}: demands: macOS.Name -equals Monterey timeoutInMinutes: 240 cancelTimeoutInMinutes: 5 From 81e7ea471333974feddb158139b4732444b54761 Mon Sep 17 00:00:00 2001 From: Peter Collins Date: Fri, 11 Nov 2022 14:50:43 -0500 Subject: [PATCH 4/7] Use the same PR build condition for demands --- build-tools/automation/yaml-templates/build-macos.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build-tools/automation/yaml-templates/build-macos.yaml b/build-tools/automation/yaml-templates/build-macos.yaml index 438119f52e1..b399f3e2452 100644 --- a/build-tools/automation/yaml-templates/build-macos.yaml +++ b/build-tools/automation/yaml-templates/build-macos.yaml @@ -21,7 +21,7 @@ stages: pool: name: ${{ parameters.buildPoolName }} vmImage: ${{ parameters.buildPoolImage }} - ${{ if eq(variables['MacBuildPoolName'], 'VSEng-Xamarin-RedmondMac-Android-Untrusted') }}: + ${{ if or(and(ne(variables['Build.DefinitionName'],'Xamarin.Android'), ne(variables['Build.DefinitionName'], 'Xamarin.Android-Private')), eq(variables['Build.Reason'], 'PullRequest')) }}: demands: macOS.Name -equals Monterey timeoutInMinutes: 240 cancelTimeoutInMinutes: 5 From d2941a5ec8d0dce85561b112205c785b7b1a53f3 Mon Sep 17 00:00:00 2001 From: Manuel de la Pena Date: Sat, 12 Nov 2022 21:29:07 -0500 Subject: [PATCH 5/7] Allow to set the result of what we dependOn. --- build-tools/automation/yaml-templates/build-linux.yaml | 5 ++++- build-tools/automation/yaml-templates/build-macos.yaml | 5 ++++- build-tools/automation/yaml-templates/build-windows.yaml | 5 ++++- 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/build-tools/automation/yaml-templates/build-linux.yaml b/build-tools/automation/yaml-templates/build-linux.yaml index 30fcc68b035..cf1658a677c 100644 --- a/build-tools/automation/yaml-templates/build-linux.yaml +++ b/build-tools/automation/yaml-templates/build-linux.yaml @@ -1,6 +1,7 @@ parameters: buildPool: android-devdiv-ubuntu-vmss - dependsOn: [] + dependsOn: '' + dependsOnResult: '' jobName: linux_build_create_sdk_pack jobDisplayName: Linux > Build repoAlias: self @@ -11,6 +12,8 @@ stages: - stage: ${{ parameters.stageName }} displayName: ${{ parameters.stageDisplayName }} dependsOn: ${{ parameters.dependsOn }} + ${{ if and(ne(parameters.dependsOn, ''), ne(parameters.dependsOnResult, '')) }}: + condition: eq(dependencies.${{ parameters.dependsOn }}.result, '${{ parameters.dependsOnResult }}') jobs: - job: ${{ parameters.jobName }} displayName: ${{ parameters.jobDisplayName }} diff --git a/build-tools/automation/yaml-templates/build-macos.yaml b/build-tools/automation/yaml-templates/build-macos.yaml index b399f3e2452..ed439b76d55 100644 --- a/build-tools/automation/yaml-templates/build-macos.yaml +++ b/build-tools/automation/yaml-templates/build-macos.yaml @@ -1,7 +1,8 @@ parameters: buildPoolName: $(MacBuildPoolName) buildPoolImage: $(MacBuildPoolImage) - dependsOn: [] + dependsOn: '' + dependsOnResult: '' jobName: mac_build_create_installers jobDisplayName: macOS > Build provisionatorChannel: latest @@ -14,6 +15,8 @@ stages: - stage: ${{ parameters.stageName }} displayName: ${{ parameters.stageDisplayName }} dependsOn: ${{ parameters.dependsOn }} + ${{ if and(ne(parameters.dependsOn, ''), ne(parameters.dependsOnResult, '')) }}: + condition: eq(dependencies.${{ parameters.dependsOn }}.result, '${{ parameters.dependsOnResult }}') jobs: # Check - "Xamarin.Android (macOS > Build)" - job: ${{ parameters.jobName }} diff --git a/build-tools/automation/yaml-templates/build-windows.yaml b/build-tools/automation/yaml-templates/build-windows.yaml index aa5df372aa7..a7f700f74a8 100644 --- a/build-tools/automation/yaml-templates/build-windows.yaml +++ b/build-tools/automation/yaml-templates/build-windows.yaml @@ -1,6 +1,7 @@ parameters: buildPool: $(1ESWindowsPool) - dependsOn: [] + dependsOn: '' + dependsOnResult: '' jobName: win_build_test jobDisplayName: Windows > Build & Smoke Test repoAlias: self @@ -12,6 +13,8 @@ stages: - stage: ${{ parameters.stageName }} displayName: ${{ parameters.stageDisplayName }} dependsOn: ${{ parameters.dependsOn }} + ${{ if and(ne(parameters.dependsOn, ''), ne(parameters.dependsOnResult, '')) }}: + condition: eq(dependencies.${{ parameters.dependsOn }}.result, '${{ parameters.dependsOnResult }}') jobs: # Check - "Xamarin.Android (Windows > Build & Smoke Test)" - job: ${{ parameters.jobName }} From 7fefff2d63ab15ede1627bcacd642e2cf4b77dec Mon Sep 17 00:00:00 2001 From: Peter Collins Date: Mon, 14 Nov 2022 11:51:24 -0500 Subject: [PATCH 6/7] Use checkout template, feedback --- .../automation/yaml-templates/build-linux.yaml | 15 ++++++++++----- .../automation/yaml-templates/build-macos.yaml | 14 ++++++++++---- .../automation/yaml-templates/build-windows.yaml | 13 ++++++++++--- 3 files changed, 30 insertions(+), 12 deletions(-) diff --git a/build-tools/automation/yaml-templates/build-linux.yaml b/build-tools/automation/yaml-templates/build-linux.yaml index cf1658a677c..84515317dc0 100644 --- a/build-tools/automation/yaml-templates/build-linux.yaml +++ b/build-tools/automation/yaml-templates/build-linux.yaml @@ -1,10 +1,13 @@ parameters: buildPool: android-devdiv-ubuntu-vmss + checkoutCommit: '' + checkoutPath: 's/xamarin-android' + checkoutPersistCredentials: false dependsOn: '' dependsOnResult: '' jobName: linux_build_create_sdk_pack jobDisplayName: Linux > Build - repoAlias: self + repositoryAlias: self stageName: linux_build stageDisplayName: Linux @@ -25,10 +28,12 @@ stages: CXX: g++-10 CC: gcc-10 steps: - - checkout: ${{ parameters.repoAlias }} - clean: true - submodules: recursive - path: s/xamarin-android + - template: sdk-unified/steps/checkout/v1.yml@yaml-templates + parameters: + resource: ${{ parameters.repositoryAlias }} + commit: ${{ parameters.checkoutCommit }} + path: ${{ parameters.checkoutPath }} + persistCredentials: ${{ parameters.checkoutPersistCredentials }} - checkout: monodroid clean: true diff --git a/build-tools/automation/yaml-templates/build-macos.yaml b/build-tools/automation/yaml-templates/build-macos.yaml index ed439b76d55..c5526d2b52c 100644 --- a/build-tools/automation/yaml-templates/build-macos.yaml +++ b/build-tools/automation/yaml-templates/build-macos.yaml @@ -1,12 +1,15 @@ parameters: buildPoolName: $(MacBuildPoolName) buildPoolImage: $(MacBuildPoolImage) + checkoutCommit: '' + checkoutPath: 's/xamarin-android' + checkoutPersistCredentials: false dependsOn: '' dependsOnResult: '' jobName: mac_build_create_installers jobDisplayName: macOS > Build provisionatorChannel: latest - repoAlias: self + repositoryAlias: self signClassicPkgContent: false stageName: mac_build stageDisplayName: Mac @@ -31,9 +34,12 @@ stages: workspace: clean: all steps: - - checkout: ${{ parameters.repoAlias }} - submodules: recursive - path: s/xamarin-android + - template: sdk-unified/steps/checkout/v1.yml@yaml-templates + parameters: + resource: ${{ parameters.repositoryAlias }} + commit: ${{ parameters.checkoutCommit }} + path: ${{ parameters.checkoutPath }} + persistCredentials: ${{ parameters.checkoutPersistCredentials }} - template: install-microbuild-tooling.yaml parameters: diff --git a/build-tools/automation/yaml-templates/build-windows.yaml b/build-tools/automation/yaml-templates/build-windows.yaml index a7f700f74a8..ac94e348729 100644 --- a/build-tools/automation/yaml-templates/build-windows.yaml +++ b/build-tools/automation/yaml-templates/build-windows.yaml @@ -1,10 +1,13 @@ parameters: buildPool: $(1ESWindowsPool) + checkoutCommit: '' + checkoutPath: '' + checkoutPersistCredentials: false dependsOn: '' dependsOnResult: '' jobName: win_build_test jobDisplayName: Windows > Build & Smoke Test - repoAlias: self + repositoryAlias: self stageName: win_build_test stageDisplayName: Windows @@ -22,8 +25,12 @@ stages: pool: ${{ parameters.buildPool }} timeoutInMinutes: 360 steps: - - checkout: ${{ parameters.repoAlias }} - submodules: recursive + - template: sdk-unified/steps/checkout/v1.yml@yaml-templates + parameters: + resource: ${{ parameters.repositoryAlias }} + commit: ${{ parameters.checkoutCommit }} + path: ${{ parameters.checkoutPath }} + persistCredentials: ${{ parameters.checkoutPersistCredentials }} - template: kill-processes.yaml From 434f472053b903ca40e12d38b6c5b3cbd7875cca Mon Sep 17 00:00:00 2001 From: Peter Collins Date: Wed, 18 Jan 2023 18:36:00 -0500 Subject: [PATCH 7/7] Add parameters for published artifact names --- .../automation/yaml-templates/build-linux.yaml | 6 ++++-- .../automation/yaml-templates/build-macos.yaml | 12 ++++++++++-- .../automation/yaml-templates/build-windows.yaml | 3 ++- .../automation/yaml-templates/commercial-build.yaml | 11 +++++++---- 4 files changed, 23 insertions(+), 9 deletions(-) diff --git a/build-tools/automation/yaml-templates/build-linux.yaml b/build-tools/automation/yaml-templates/build-linux.yaml index 84515317dc0..9da25139e91 100644 --- a/build-tools/automation/yaml-templates/build-linux.yaml +++ b/build-tools/automation/yaml-templates/build-linux.yaml @@ -1,5 +1,6 @@ parameters: buildPool: android-devdiv-ubuntu-vmss + buildResultArtifactName: Build Results - Linux checkoutCommit: '' checkoutPath: 's/xamarin-android' checkoutPersistCredentials: false @@ -7,6 +8,7 @@ parameters: dependsOnResult: '' jobName: linux_build_create_sdk_pack jobDisplayName: Linux > Build + nugetArtifactName: $(LinuxNuGetArtifactName) repositoryAlias: self stageName: linux_build stageDisplayName: Linux @@ -77,13 +79,13 @@ stages: - task: PublishPipelineArtifact@1 displayName: upload linux sdk inputs: - artifactName: $(LinuxNuGetArtifactName) + artifactName: ${{ parameters.nugetArtifactName }} targetPath: $(System.DefaultWorkingDirectory)/xamarin-android/bin/Build$(XA.Build.Configuration)/nuget-linux - template: upload-results.yaml parameters: xaSourcePath: $(System.DefaultWorkingDirectory)/xamarin-android - artifactName: Build Results - Linux + artifactName: ${{ parameters.buildResultArtifactName }} includeBuildResults: true - template: fail-on-issue.yaml diff --git a/build-tools/automation/yaml-templates/build-macos.yaml b/build-tools/automation/yaml-templates/build-macos.yaml index c5526d2b52c..fa0a3b60db2 100644 --- a/build-tools/automation/yaml-templates/build-macos.yaml +++ b/build-tools/automation/yaml-templates/build-macos.yaml @@ -1,18 +1,23 @@ parameters: buildPoolName: $(MacBuildPoolName) buildPoolImage: $(MacBuildPoolImage) + buildResultArtifactName: Build Results - macOS checkoutCommit: '' checkoutPath: 's/xamarin-android' checkoutPersistCredentials: false dependsOn: '' dependsOnResult: '' + installerArtifactName: $(InstallerArtifactName) jobName: mac_build_create_installers jobDisplayName: macOS > Build + nugetArtifactName: $(NuGetArtifactName) provisionatorChannel: latest repositoryAlias: self signClassicPkgContent: false stageName: mac_build stageDisplayName: Mac + testAssembliesArtifactName: $(TestAssembliesArtifactName) + windowsToolchainPdbArtifactName: $(WindowsToolchainPdbArtifactName) stages: - stage: ${{ parameters.stageName }} @@ -47,8 +52,11 @@ stages: - template: commercial-build.yaml parameters: + installerArtifactName: ${{ parameters.installerArtifactName }} + nugetArtifactName: ${{ parameters.nugetArtifactName }} provisionatorChannel: ${{ parameters.provisionatorChannel }} signClassicPkgContent: ${{ parameters.signClassicPkgContent }} + testAssembliesArtifactName: ${{ parameters.testAssembliesArtifactName }} - template: remove-microbuild-tooling.yaml parameters: @@ -64,13 +72,13 @@ stages: - task: PublishPipelineArtifact@1 displayName: upload Windows toolchain pdb files inputs: - artifactName: $(WindowsToolchainPdbArtifactName) + artifactName: ${{ parameters.windowsToolchainPdbArtifactName }} targetPath: $(System.DefaultWorkingDirectory)/xamarin-android/bin/Build$(XA.Build.Configuration)/windows-toolchain-pdb - template: upload-results.yaml parameters: xaSourcePath: $(System.DefaultWorkingDirectory)/xamarin-android - artifactName: Build Results - macOS + artifactName: ${{ parameters.buildResultArtifactName }} includeBuildResults: true - template: run-xaprepare.yaml diff --git a/build-tools/automation/yaml-templates/build-windows.yaml b/build-tools/automation/yaml-templates/build-windows.yaml index ac94e348729..4de0eb8b73c 100644 --- a/build-tools/automation/yaml-templates/build-windows.yaml +++ b/build-tools/automation/yaml-templates/build-windows.yaml @@ -1,5 +1,6 @@ parameters: buildPool: $(1ESWindowsPool) + buildResultArtifactName: Build Results - Windows checkoutCommit: '' checkoutPath: '' checkoutPersistCredentials: false @@ -130,7 +131,7 @@ stages: - template: upload-results.yaml parameters: - artifactName: Build Results - Windows + artifactName: ${{ parameters.buildResultArtifactName }} includeBuildResults: true - template: fail-on-issue.yaml diff --git a/build-tools/automation/yaml-templates/commercial-build.yaml b/build-tools/automation/yaml-templates/commercial-build.yaml index 76b29f8b5b7..f5512bdb4a6 100644 --- a/build-tools/automation/yaml-templates/commercial-build.yaml +++ b/build-tools/automation/yaml-templates/commercial-build.yaml @@ -1,8 +1,11 @@ parameters: + installerArtifactName: $(InstallerArtifactName) xaSourcePath: $(System.DefaultWorkingDirectory)/xamarin-android makeMSBuildArgs: '' + nugetArtifactName: $(NuGetArtifactName) provisionatorChannel: latest signClassicPkgContent: true + testAssembliesArtifactName: $(TestAssembliesArtifactName) steps: - script: echo "##vso[task.setvariable variable=JI_JAVA_HOME]$HOME/android-toolchain/jdk-11" @@ -126,7 +129,7 @@ steps: - task: PublishPipelineArtifact@1 displayName: upload nupkgs inputs: - artifactName: $(NuGetArtifactName) + artifactName: ${{ parameters.nugetArtifactName }} targetPath: ${{ parameters.xaSourcePath }}/bin/Build$(XA.Build.Configuration)/$(NuGetArtifactName) - script: > @@ -145,7 +148,7 @@ steps: - task: PublishPipelineArtifact@1 displayName: upload installers inputs: - artifactName: $(InstallerArtifactName) + artifactName: ${{ parameters.installerArtifactName }} targetPath: ${{ parameters.xaSourcePath }}/bin/Build$(XA.Build.Configuration)/$(InstallerArtifactName) # Upload test assemblies @@ -158,11 +161,11 @@ steps: - task: PublishPipelineArtifact@1 displayName: upload test assemblies inputs: - artifactName: $(TestAssembliesArtifactName) + artifactName: ${{ parameters.testAssembliesArtifactName }} targetPath: ${{ parameters.xaSourcePath }}/bin/Test$(XA.Build.Configuration) - task: PublishPipelineArtifact@1 displayName: upload build tools inventory inputs: - artifactName: BuildToolsInventory + artifactName: AndroidBuildToolsInventory targetPath: ${{ parameters.xaSourcePath }}/bin/Build$(XA.Build.Configuration)/buildtoolsinventory.csv