trigger: branches: include: - main - release/* - loc tags: include: - '*' paths: include: - '*' exclude: - .github/* - docs/* - CODE-OF-CONDUCT.md - CONTRIBUTING.md - LICENSE.TXT - PATENTS.TXT - README.md - SECURITY.md - THIRD-PARTY-NOTICES.TXT pr: branches: include: - main - release/* paths: include: - '*' exclude: - .github/* - docs/* - CODE-OF-CONDUCT.md - CONTRIBUTING.md - LICENSE.TXT - PATENTS.TXT - README.md - SECURITY.md - THIRD-PARTY-NOTICES.TXT schedules: - cron: "0 0 * * *" displayName: Daily midnight build branches: include: - main variables: - template: /eng/pipelines/common/variables.yml - template: templates/common/vs-release-vars.yml@sdk-insertions parameters: - name: provisionatorChannel displayName: 'Provisionator channel' type: string default: 'latest' # Support for launching a build against a Provisionator PR (e.g., pr/[github-account-name]/[pr-number]) as a means to test in-progress Provisionator changes - name: BuildEverything type: boolean default: false - name: BuildConfigurations type: object default: - Debug - Release - name: BuildPlatforms type: object default: - name: Windows poolName: $(windowsNet6VmPool) vmImage: $(windowsNet6VmImage) bootsAndroid: $(Android.Msi) bootsiOS: $(iOS.Msi) artifact: net6-windows - name: macOS poolName: $(macOSXNet6VmPool) vmImage: $(macOSXNet6VmImage) bootsAndroid: $(Android.Pkg) bootsiOS: $(iOS.Pkg) bootsMacCatalyst: $(MacCatalyst.Pkg) artifact: net6-macos - name: PackPlatforms type: object default: - name: Windows poolName: $(windowsNet6VmPool) vmImage: $(windowsNet6VmImage) bootsAndroid: $(Android.Msi) bootsiOS: $(iOS.Msi) artifact: nuget - name: macOS poolName: $(macOSXNet6VmPool) vmImage: $(macOSXNet6VmImage) bootsAndroid: $(Android.Pkg) bootsiOS: $(iOS.Pkg) bootsMacCatalyst: $(MacCatalyst.Pkg) artifact: nuget-macos resources: repositories: - repository: xamarin-templates type: github name: xamarin/yaml-templates endpoint: xamarin ref: refs/heads/main - repository: sdk-insertions type: github name: xamarin/sdk-insertions ref: refs/heads/main endpoint: xamarin stages: - stage: build_net6 displayName: Build .NET 6 dependsOn: [] jobs: - ${{ each BuildPlatform in parameters.BuildPlatforms }}: - ${{ each BuildConfiguration in parameters.BuildConfigurations }}: - job: build_net6_${{ BuildPlatform.name }}_${{ BuildConfiguration }} workspace: clean: all displayName: ${{ BuildPlatform.name }} (${{ BuildConfiguration }}) timeoutInMinutes: 120 condition: or( ${{ parameters.BuildEverything }}, ne(variables['Build.Reason'], 'PullRequest'), eq('${{ BuildConfiguration }}', 'Release')) pool: name: ${{ BuildPlatform.poolName }} vmImage: ${{ BuildPlatform.vmImage }} demands: - macOS.Name -equals Monterey - macOS.Architecture -equals x64 - Agent.HasDevices -equals False - Agent.IsPaired -equals False steps: - ${{ if eq(BuildPlatform.name, 'macOS') }}: - template: agent-cleanser/v1.yml@xamarin-templates parameters: UninstallMono: false UninstallXamarinMac: false CleanseAgentToolsDotNet: true # Cleanse all .NET versions under the agent tools directory and use only those provisioned by the pipeline - template: common/provision.yml parameters: platform: ${{ BuildPlatform.name }} poolName: ${{ BuildPlatform.poolName }} provisionatorChannel: ${{ parameters.provisionatorChannel }} - pwsh: ./build.ps1 --target=dotnet --configuration="${{ BuildConfiguration }}" --verbosity=diagnostic displayName: 'Install .NET' retryCountOnTaskFailure: 3 env: DOTNET_TOKEN: $(dotnetbuilds-internal-container-read-token) PRIVATE_BUILD: $(PrivateBuild) - pwsh: ./build.ps1 --target=dotnet-build --configuration="${{ BuildConfiguration }}" --verbosity=diagnostic displayName: 'Build .NET Maui' - pwsh: ./build.ps1 --target=dotnet-test --configuration="${{ BuildConfiguration }}" --verbosity=diagnostic displayName: 'Run Unit Tests' - task: PublishTestResults@2 condition: always() inputs: testRunner: VSTest testResultsFiles: '$(build.artifactstagingdirectory)/**/*.trx' - task: PublishBuildArtifacts@1 condition: always() displayName: Publish Artifacts (${{ BuildPlatform.artifact }}) inputs: ArtifactName: ${{ BuildPlatform.artifact }} - stage: pack_net6 displayName: Pack .NET 6 dependsOn: [] jobs: - ${{ each PackPlatform in parameters.PackPlatforms }}: - job: pack_net6_${{ PackPlatform.name }} workspace: clean: all displayName: ${{ PackPlatform.name }} timeoutInMinutes: 120 pool: name: ${{ PackPlatform.poolName }} vmImage: ${{ PackPlatform.vmImage }} demands: - macOS.Name -equals Monterey - macOS.Architecture -equals x64 - Agent.HasDevices -equals False - Agent.IsPaired -equals False steps: - template: common/pack.yml parameters: platform: ${{ PackPlatform.name }} poolName: ${{ PackPlatform.poolName }} provisionatorChannel: ${{ parameters.provisionatorChannel }} artifact: ${{ PackPlatform.artifact }} - stage: samples_net6 displayName: Build .NET 6 Samples dependsOn: pack_net6 jobs: - ${{ each BuildPlatform in parameters.BuildPlatforms }}: - ${{ each BuildConfiguration in parameters.BuildConfigurations }}: - job: build_net6_${{ BuildPlatform.name }}_${{ BuildConfiguration }} workspace: clean: all displayName: ${{ BuildPlatform.name }} (${{ BuildConfiguration }}) timeoutInMinutes: 120 condition: or( ${{ parameters.BuildEverything }}, ne(variables['Build.Reason'], 'PullRequest'), eq('${{ BuildConfiguration }}', 'Release')) pool: name: ${{ BuildPlatform.poolName }} vmImage: ${{ BuildPlatform.vmImage }} demands: - macOS.Name -equals Monterey - macOS.Architecture -equals x64 - Agent.HasDevices -equals False - Agent.IsPaired -equals False steps: - ${{ if eq(BuildPlatform.name, 'macOS') }}: - template: agent-cleanser/v1.yml@xamarin-templates parameters: UninstallMono: false UninstallXamarinMac: false CleanseAgentToolsDotNet: true # Cleanse all .NET versions under the agent tools directory and use only those provisioned by the pipeline - template: common/provision.yml parameters: platform: ${{ BuildPlatform.name }} poolName: ${{ BuildPlatform.poolName }} provisionatorChannel: ${{ parameters.provisionatorChannel }} - task: DownloadBuildArtifacts@0 displayName: 'Download Packages' inputs: artifactName: nuget itemPattern: '**/*.nupkg' downloadPath: $(System.DefaultWorkingDirectory)/artifacts - pwsh: Move-Item -Path artifacts\nuget\*.nupkg -Destination artifacts -Force displayName: Move the downloaded artifacts - pwsh: ./build.ps1 --target=dotnet-local-workloads --configuration="${{ BuildConfiguration }}" --verbosity=diagnostic displayName: 'Install .NET (Local Workloads)' retryCountOnTaskFailure: 3 env: DOTNET_TOKEN: $(dotnetbuilds-internal-container-read-token) PRIVATE_BUILD: $(PrivateBuild) - pwsh: ./build.ps1 --target=dotnet-samples --configuration="${{ BuildConfiguration }}" --verbosity=diagnostic displayName: 'Build .NET 6 Samples' - task: PublishBuildArtifacts@1 condition: always() displayName: publish artifacts inputs: ArtifactName: ${{ BuildPlatform.artifact }} - stage: templates_net6 displayName: Build .NET 6 Templates dependsOn: pack_net6 jobs: - ${{ each BuildPlatform in parameters.BuildPlatforms }}: - ${{ each BuildConfiguration in parameters.BuildConfigurations }}: - job: build_net6_${{ BuildPlatform.name }}_${{ BuildConfiguration }} workspace: clean: all displayName: ${{ BuildPlatform.name }} (${{ BuildConfiguration }}) timeoutInMinutes: 120 condition: or( ${{ parameters.BuildEverything }}, ne(variables['Build.Reason'], 'PullRequest'), eq('${{ BuildConfiguration }}', 'Release')) pool: name: ${{ BuildPlatform.poolName }} vmImage: ${{ BuildPlatform.vmImage }} demands: - macOS.Name -equals Monterey - macOS.Architecture -equals x64 - Agent.HasDevices -equals False - Agent.IsPaired -equals False steps: - ${{ if eq(BuildPlatform.name, 'macOS') }}: - template: agent-cleanser/v1.yml@xamarin-templates parameters: UninstallMono: false UninstallXamarinMac: false CleanseAgentToolsDotNet: true # Cleanse all .NET versions under the agent tools directory and use only those provisioned by the pipeline - template: common/provision.yml parameters: platform: ${{ BuildPlatform.name }} poolName: ${{ BuildPlatform.poolName }} provisionatorChannel: ${{ parameters.provisionatorChannel }} - task: DownloadBuildArtifacts@0 displayName: 'Download Packages' inputs: artifactName: nuget itemPattern: '**/*.nupkg' downloadPath: $(System.DefaultWorkingDirectory)/artifacts - pwsh: Move-Item -Path artifacts\nuget\*.nupkg -Destination artifacts -Force displayName: Move the downloaded artifacts - pwsh: ./build.ps1 --target=dotnet-local-workloads --configuration="${{ BuildConfiguration }}" --verbosity=diagnostic displayName: 'Install .NET (Local Workloads)' retryCountOnTaskFailure: 3 env: DOTNET_TOKEN: $(dotnetbuilds-internal-container-read-token) PRIVATE_BUILD: $(PrivateBuild) - pwsh: ./build.ps1 --target=dotnet-templates --configuration="${{ BuildConfiguration }}" --verbosity=diagnostic displayName: 'Build .NET 6 Templates' - task: PublishBuildArtifacts@1 condition: always() displayName: publish artifacts inputs: ArtifactName: ${{ BuildPlatform.artifact }} - template: common/security-compliance.yml - ${{ if eq(variables['System.TeamProject'], 'devdiv') }}: - template: common/localization-handoff.yml # Process outgoing strings [Localization Handoff] - template: common/localization-handback.yml # Process incoming translations and Create PR to main [Localization Handback] - template: common/merge-translations-update.yml # Validating incoming translations strings and merge PR [Localization Handback]