309 строки
11 KiB
YAML
309 строки
11 KiB
YAML
trigger:
|
|
branches:
|
|
include:
|
|
- main
|
|
- release/*
|
|
- net7.0
|
|
- net8.0
|
|
- net9.0
|
|
- 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/*
|
|
- net7.0
|
|
- net8.0
|
|
- net9.0
|
|
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: RunCompliance
|
|
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)
|
|
artifact: build-windows
|
|
- name: macOS
|
|
poolName: $(macOSXNet6VmPool)
|
|
vmImage: $(macOSXNet6VmImage)
|
|
bootsAndroid: $(Android.Pkg)
|
|
bootsMacCatalyst: $(MacCatalyst.Pkg)
|
|
artifact: build-macos
|
|
|
|
- name: PackPlatforms
|
|
type: object
|
|
default:
|
|
- name: Windows
|
|
poolName: $(windowsNet6VmPool)
|
|
vmImage: $(windowsNet6VmImage)
|
|
bootsAndroid: $(Android.Msi)
|
|
artifact: nuget
|
|
- name: macOS
|
|
poolName: $(macOSXNet6VmPool)
|
|
vmImage: $(macOSXNet6VmImage)
|
|
bootsAndroid: $(Android.Pkg)
|
|
bootsMacCatalyst: $(MacCatalyst.Pkg)
|
|
artifact: nuget-macos
|
|
|
|
- name: RunTemplatePlatforms
|
|
type: object
|
|
default:
|
|
- name: $(androidTestsVmPool)
|
|
vmImage: $(androidTestsVmImage)
|
|
demands:
|
|
- macOS.Name -equals Ventura
|
|
- macOS.Architecture -equals x64
|
|
- Agent.OSVersion -equals 13.5
|
|
testName: RunOnAndroid
|
|
artifact: templates-run-android
|
|
- name: $(iosTestsVmPool)
|
|
vmImage: $(iosTestsVmImage)
|
|
demands:
|
|
- macOS.Name -equals Ventura
|
|
- macOS.Architecture -equals x64
|
|
- Agent.OSVersion -equals 13.5
|
|
testName: RunOniOS
|
|
artifact: templates-run-ios
|
|
|
|
- name: TestTargetFrameworks
|
|
type: object
|
|
default:
|
|
- name: default
|
|
tfm: default
|
|
# - name: net6
|
|
# tfm: net6.0
|
|
- name: net9
|
|
tfm: net9.0
|
|
|
|
resources:
|
|
repositories:
|
|
- repository: yaml-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_net
|
|
displayName: Build .NET MAUI
|
|
dependsOn: []
|
|
jobs:
|
|
- ${{ each BuildPlatform in parameters.BuildPlatforms }}:
|
|
- ${{ each BuildConfiguration in parameters.BuildConfigurations }}:
|
|
- job: build_net_${{ BuildPlatform.name }}_${{ BuildConfiguration }}
|
|
workspace:
|
|
clean: all
|
|
displayName: ${{ BuildPlatform.name }} (${{ BuildConfiguration }})
|
|
timeoutInMinutes: 240
|
|
condition: or(
|
|
${{ parameters.BuildEverything }},
|
|
ne(variables['Build.Reason'], 'PullRequest'),
|
|
eq('${{ BuildConfiguration }}', 'Release'))
|
|
pool:
|
|
name: ${{ BuildPlatform.poolName }}
|
|
vmImage: ${{ BuildPlatform.vmImage }}
|
|
demands:
|
|
- macOS.Name -equals Ventura
|
|
- macOS.Architecture -equals x64
|
|
- Agent.OSVersion -equals 13.5
|
|
steps:
|
|
- template: common/provision.yml
|
|
parameters:
|
|
poolName: ${{ BuildPlatform.poolName }}
|
|
gitHubToken: $(github--pat--vs-mobiletools-engineering-service2)
|
|
- 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_net
|
|
displayName: Pack .NET MAUI
|
|
dependsOn: []
|
|
jobs:
|
|
- ${{ each PackPlatform in parameters.PackPlatforms }}:
|
|
- job: pack_net_${{ PackPlatform.name }}
|
|
workspace:
|
|
clean: all
|
|
displayName: ${{ PackPlatform.name }}
|
|
timeoutInMinutes: 240
|
|
pool:
|
|
name: ${{ PackPlatform.poolName }}
|
|
vmImage: ${{ PackPlatform.vmImage }}
|
|
demands:
|
|
- macOS.Name -equals Ventura
|
|
- macOS.Architecture -equals x64
|
|
- Agent.OSVersion -equals 13.5
|
|
steps:
|
|
- template: common/pack.yml
|
|
parameters:
|
|
platform: ${{ PackPlatform.name }}
|
|
poolName: ${{ PackPlatform.poolName }}
|
|
provisionatorChannel: ${{ parameters.provisionatorChannel }}
|
|
artifact: ${{ PackPlatform.artifact }}
|
|
artifactBinaries: 'pack-binaries'
|
|
gitHubToken: $(github--pat--vs-mobiletools-engineering-service2)
|
|
|
|
- stage: samples_net
|
|
displayName: Test .NET MAUI Samples
|
|
dependsOn: pack_net
|
|
jobs:
|
|
- ${{ each BuildPlatform in parameters.BuildPlatforms }}:
|
|
- job: build_net_${{ BuildPlatform.name }}_samples
|
|
workspace:
|
|
clean: all
|
|
displayName: ${{ BuildPlatform.name }}
|
|
timeoutInMinutes: 120
|
|
pool:
|
|
name: ${{ BuildPlatform.poolName }}
|
|
vmImage: ${{ BuildPlatform.vmImage }}
|
|
demands:
|
|
- macOS.Name -equals Ventura
|
|
- macOS.Architecture -equals x64
|
|
- Agent.OSVersion -equals 13.5
|
|
steps:
|
|
- template: common/provision.yml
|
|
parameters:
|
|
poolName: ${{ BuildPlatform.poolName }}
|
|
|
|
- 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 --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-integration-build --verbosity=diagnostic
|
|
displayName: Build Microsoft.Maui.IntegrationTests
|
|
- pwsh: ./build.ps1 --target=dotnet-integration-test --filter="FullyQualifiedName=Microsoft.Maui.IntegrationTests.SampleTests" --resultsfilename="integration-samples" --verbosity=diagnostic
|
|
displayName: Run ${{ BuildPlatform.name }} sample build tests
|
|
- task: PublishTestResults@2
|
|
displayName: Publish the ${{ BuildPlatform.name }} sample build tests
|
|
condition: always()
|
|
inputs:
|
|
testRunner: VSTest
|
|
testResultsFiles: '$(build.artifactstagingdirectory)/**/*.trx'
|
|
testRunTitle: ${{ BuildPlatform.name }} sample build tests
|
|
|
|
- stage: templates_net
|
|
displayName: Test Templates
|
|
dependsOn: pack_net
|
|
jobs:
|
|
- template: common/maui-templates.yml
|
|
parameters:
|
|
RunPlatforms: ${{ parameters.RunTemplatePlatforms }}
|
|
BuildPlatforms: ${{ parameters.BuildPlatforms }}
|
|
|
|
- ${{ 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]
|
|
- ${{ if or(eq(variables['Build.Reason'], 'Schedule'), parameters.RunCompliance) }}:
|
|
- template: security/full/v1.yml@yaml-templates
|
|
parameters:
|
|
stageDependsOn: 'pack_net'
|
|
complianceEnabled: true
|
|
complianceTimeoutInMinutes: 480
|
|
scanArtifacts: ['pack-binaries']
|
|
antiMalwareEnabled: true
|
|
binSkimEnabled: true
|
|
#binSkimTargetGlob: '$(Build.ArtifactStagingDirectory)\binaries-to-scan\pack-binaries\src\Controls\src\Nuget\bin\Release\net8.0\*.dll'
|
|
sourceGdnSuppressionFile: $(Build.SourcesDirectory)\eng\automation\guardian\source.gdnsuppress
|
|
tsaConfigFile: '$(Build.SourcesDirectory)\eng\automation\guardian\tsaoptions-v2.json'
|
|
policheckExclusionFile: '$(System.DefaultWorkingDirectory)\eng\automation\guardian\PoliCheck.Exclusions.xml'
|
|
policheckGdnSuppressionFilesFolder: '$(System.DefaultWorkingDirectory)\eng\automation\guardian'
|
|
credScanEnabled: true
|
|
credScanSuppressionFile: '$(System.DefaultWorkingDirectory)\eng\automation\guardian\CredScanSuppressions.json'
|
|
enableCodeInspector: true
|
|
apiScanEnabled: true
|
|
apiScanSoftwareName: 'MAUI'
|
|
apiScanSoftwareVersionNum: $(Build.BuildNumber) |