2020-09-29 13:15:20 +03:00
trigger :
branches :
include :
- main
2021-04-24 20:06:28 +03:00
- release/*
2021-05-05 20:56:05 +03:00
- loc
2021-03-11 19:23:29 +03:00
tags :
include :
- '*'
2020-09-29 13:15:20 +03:00
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
2021-04-24 21:19:50 +03:00
- release/*
2020-09-29 13:15:20 +03:00
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
2022-02-08 17:50:58 +03:00
- template : templates/common/vs-release-vars.yml@sdk-insertions
2020-09-29 13:15:20 +03:00
2021-03-17 05:35:08 +03:00
parameters :
2022-02-14 17:49:38 +03:00
- 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
2021-03-17 05:35:08 +03:00
- name : BuildEverything
type : boolean
default : false
- name : BuildConfigurations
type : object
default :
- Debug
- Release
- name : BuildPlatforms
type : object
default :
2021-08-06 19:45:26 +03:00
- name : Windows
2021-06-17 14:20:48 +03:00
poolName : $(windowsNet6VmPool)
vmImage : $(windowsNet6VmImage)
2021-03-17 05:35:08 +03:00
bootsAndroid : $(Android.Msi)
bootsiOS : $(iOS.Msi)
artifact : net6-windows
2021-08-06 19:45:26 +03:00
- name : macOS
2021-03-17 05:35:08 +03:00
poolName : $(macOSXNet6VmPool)
vmImage : $(macOSXNet6VmImage)
bootsAndroid : $(Android.Pkg)
bootsiOS : $(iOS.Pkg)
bootsMacCatalyst : $(MacCatalyst.Pkg)
artifact : net6-macos
- name : PackPlatforms
type : object
default :
2021-08-06 19:45:26 +03:00
- name : Windows
2021-06-17 14:20:48 +03:00
poolName : $(windowsNet6VmPool)
vmImage : $(windowsNet6VmImage)
2021-03-17 05:35:08 +03:00
bootsAndroid : $(Android.Msi)
bootsiOS : $(iOS.Msi)
2021-04-07 01:16:25 +03:00
artifact : nuget
2021-08-06 19:45:26 +03:00
- name : macOS
2021-06-17 14:20:48 +03:00
poolName : $(macOSXNet6VmPool)
vmImage : $(macOSXNet6VmImage)
2021-03-17 05:35:08 +03:00
bootsAndroid : $(Android.Pkg)
bootsiOS : $(iOS.Pkg)
bootsMacCatalyst : $(MacCatalyst.Pkg)
2021-04-07 01:16:25 +03:00
artifact : nuget-macos
2021-03-17 05:35:08 +03:00
2020-09-29 13:15:20 +03:00
resources :
repositories :
- repository : xamarin-templates
type : github
name : xamarin/yaml-templates
endpoint : xamarin
2022-02-10 04:39:51 +03:00
ref : refs/heads/main
2022-02-08 17:50:58 +03:00
- repository : sdk-insertions
type : github
name : xamarin/sdk-insertions
ref : refs/heads/main
endpoint : xamarin
2020-09-29 13:15:20 +03:00
stages :
2021-03-17 05:35:08 +03:00
2021-08-06 19:45:26 +03:00
- stage : build_net6
displayName : Build .NET 6
2021-03-17 21:59:35 +03:00
dependsOn : [ ]
jobs :
2021-08-06 19:45:26 +03:00
- ${{ 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 }}
2022-03-28 20:20:40 +03:00
demands :
- macOS.Name -equals Monterey
- macOS.Architecture -equals x64
- Agent.HasDevices -equals False
- Agent.IsPaired -equals False
2021-08-06 19:45:26 +03:00
steps :
2022-01-26 13:50:07 +03:00
- ${{ if eq(BuildPlatform.name, 'macOS') }}:
- template : agent-cleanser/v1.yml@xamarin-templates
parameters :
UninstallMono : false
UninstallXamarinMac : false
2022-02-10 00:52:02 +03:00
CleanseAgentToolsDotNet : true # Cleanse all .NET versions under the agent tools directory and use only those provisioned by the pipeline
2021-08-06 19:45:26 +03:00
- template : common/provision.yml
parameters :
platform : ${{ BuildPlatform.name }}
2022-01-26 13:50:07 +03:00
poolName : ${{ BuildPlatform.poolName }}
2022-02-14 17:49:38 +03:00
provisionatorChannel : ${{ parameters.provisionatorChannel }}
2021-08-06 19:45:26 +03:00
- pwsh : ./build.ps1 --target=dotnet --configuration="${{ BuildConfiguration }}" --verbosity=diagnostic
displayName : 'Install .NET'
2022-02-16 09:59:06 +03:00
retryCountOnTaskFailure : 3
2022-02-11 12:57:09 +03:00
env :
DOTNET_TOKEN : $(dotnetbuilds-internal-container-read-token)
PRIVATE_BUILD : $(PrivateBuild)
2021-08-06 19:45:26 +03:00
- 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 }}
2021-03-17 21:59:35 +03:00
2021-03-06 04:12:14 +03:00
- stage : pack_net6
displayName : Pack .NET 6
2021-03-02 20:36:17 +03:00
dependsOn : [ ]
jobs :
2022-02-22 20:09:46 +03:00
- ${{ each PackPlatform in parameters.PackPlatforms }}:
- job : pack_net6_${{ PackPlatform.name }}
2021-03-17 05:35:08 +03:00
workspace :
clean : all
2022-02-22 20:09:46 +03:00
displayName : ${{ PackPlatform.name }}
2021-03-17 05:35:08 +03:00
timeoutInMinutes : 120
pool :
2022-02-22 20:09:46 +03:00
name : ${{ PackPlatform.poolName }}
vmImage : ${{ PackPlatform.vmImage }}
2022-03-28 20:20:40 +03:00
demands :
- macOS.Name -equals Monterey
- macOS.Architecture -equals x64
- Agent.HasDevices -equals False
- Agent.IsPaired -equals False
2021-03-17 05:35:08 +03:00
steps :
2022-02-22 20:09:46 +03:00
- template : common/pack.yml
2021-08-06 19:45:26 +03:00
parameters :
2022-02-22 20:09:46 +03:00
platform : ${{ PackPlatform.name }}
poolName : ${{ PackPlatform.poolName }}
2022-02-14 17:49:38 +03:00
provisionatorChannel : ${{ parameters.provisionatorChannel }}
2022-02-22 20:09:46 +03:00
artifact : ${{ PackPlatform.artifact }}
2021-03-06 04:12:14 +03:00
2021-08-06 19:45:26 +03:00
- stage : samples_net6
displayName : Build .NET 6 Samples
2021-06-16 19:59:53 +03:00
dependsOn : pack_net6
2021-02-11 01:24:09 +03:00
jobs :
2021-03-17 05:35:08 +03:00
- ${{ each BuildPlatform in parameters.BuildPlatforms }}:
2021-08-06 19:45:26 +03:00
- ${{ each BuildConfiguration in parameters.BuildConfigurations }}:
- job : build_net6_${{ BuildPlatform.name }}_${{ BuildConfiguration }}
2021-03-17 05:35:08 +03:00
workspace :
clean : all
2021-08-06 19:45:26 +03:00
displayName : ${{ BuildPlatform.name }} (${{ BuildConfiguration }})
2021-03-17 05:35:08 +03:00
timeoutInMinutes : 120
condition : or(
${{ parameters.BuildEverything }},
ne(variables['Build.Reason'], 'PullRequest'),
2021-08-06 19:45:26 +03:00
eq('${{ BuildConfiguration }}', 'Release'))
2021-03-17 05:35:08 +03:00
pool :
name : ${{ BuildPlatform.poolName }}
vmImage : ${{ BuildPlatform.vmImage }}
2022-03-28 20:20:40 +03:00
demands :
- macOS.Name -equals Monterey
- macOS.Architecture -equals x64
- Agent.HasDevices -equals False
- Agent.IsPaired -equals False
2021-03-17 05:35:08 +03:00
steps :
2022-01-26 13:50:07 +03:00
- ${{ if eq(BuildPlatform.name, 'macOS') }}:
- template : agent-cleanser/v1.yml@xamarin-templates
parameters :
UninstallMono : false
UninstallXamarinMac : false
2022-02-10 00:52:02 +03:00
CleanseAgentToolsDotNet : true # Cleanse all .NET versions under the agent tools directory and use only those provisioned by the pipeline
2021-08-06 19:45:26 +03:00
- template : common/provision.yml
parameters :
platform : ${{ BuildPlatform.name }}
2022-01-26 13:50:07 +03:00
poolName : ${{ BuildPlatform.poolName }}
2022-02-14 17:49:38 +03:00
provisionatorChannel : ${{ parameters.provisionatorChannel }}
2021-08-06 19:45:26 +03:00
- task : DownloadBuildArtifacts@0
displayName : 'Download Packages'
2021-06-16 19:59:53 +03:00
inputs :
2021-08-06 19:45:26 +03:00
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)'
2022-02-16 09:59:06 +03:00
retryCountOnTaskFailure : 3
2022-02-11 12:57:09 +03:00
env :
DOTNET_TOKEN : $(dotnetbuilds-internal-container-read-token)
PRIVATE_BUILD : $(PrivateBuild)
2021-08-06 19:45:26 +03:00
- pwsh : ./build.ps1 --target=dotnet-samples --configuration="${{ BuildConfiguration }}" --verbosity=diagnostic
displayName : 'Build .NET 6 Samples'
2021-08-26 01:51:03 +03:00
- 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 }}
2022-03-28 20:20:40 +03:00
demands :
- macOS.Name -equals Monterey
- macOS.Architecture -equals x64
- Agent.HasDevices -equals False
- Agent.IsPaired -equals False
2021-08-26 01:51:03 +03:00
steps :
2022-01-26 13:50:07 +03:00
- ${{ if eq(BuildPlatform.name, 'macOS') }}:
- template : agent-cleanser/v1.yml@xamarin-templates
parameters :
UninstallMono : false
UninstallXamarinMac : false
2022-02-10 00:52:02 +03:00
CleanseAgentToolsDotNet : true # Cleanse all .NET versions under the agent tools directory and use only those provisioned by the pipeline
2021-08-26 01:51:03 +03:00
- template : common/provision.yml
parameters :
platform : ${{ BuildPlatform.name }}
2022-01-26 13:50:07 +03:00
poolName : ${{ BuildPlatform.poolName }}
2022-02-14 17:49:38 +03:00
provisionatorChannel : ${{ parameters.provisionatorChannel }}
2021-08-26 01:51:03 +03:00
- 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)'
2022-02-16 09:59:06 +03:00
retryCountOnTaskFailure : 3
2022-02-11 12:57:09 +03:00
env :
DOTNET_TOKEN : $(dotnetbuilds-internal-container-read-token)
PRIVATE_BUILD : $(PrivateBuild)
2021-08-26 01:51:03 +03:00
- pwsh : ./build.ps1 --target=dotnet-templates --configuration="${{ BuildConfiguration }}" --verbosity=diagnostic
displayName : 'Build .NET 6 Templates'
2021-03-17 05:35:08 +03:00
- task : PublishBuildArtifacts@1
condition : always()
displayName : publish artifacts
inputs :
ArtifactName : ${{ BuildPlatform.artifact }}
2021-03-04 22:41:31 +03:00
2022-02-22 20:09:46 +03:00
- template : common/security-compliance.yml
2021-08-25 13:16:03 +03:00
- ${{ 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]
2022-03-25 14:22:09 +03:00
- template : common/merge-translations-update.yml # Validating incoming translations strings and merge PR [Localization Handback]