xamarin-macios/tools/devops/build-samples.yml

220 строки
7.7 KiB
YAML

# Xamarin
# Build samples
variables:
azure_build_url: '$(System.CollectionUri)/$(System.TeamProject)/_build/results?buildId=$(Build.BuildId)'
macOSVersion: 'Hosted Mac Internal Mojave'
debug_filter: '^.*Debug.*$'
release_filter: '^.*Release.*$'
iphone_filter: '^iPhone$'
iphonesimulator_filter: '^iPhoneSimulator$'
mac_platform_filter: '^$'
name_filter_af: '^[A-Fa-f].*$'
name_filter_gr: '^[G-Rg-r].*$'
name_filter_rest: '^[^A-Ra-r].*$'
resources:
repositories:
- repository: xamarin-macios-data
type: github
name: xamarin/xamarin-macios-data
ref: refs/heads/master
endpoint: xamarin
- repository: maccore
type: github
name: xamarin/maccore
ref: refs/heads/master
endpoint: xamarin
###
### Tell GitHub we're starting working on this commit
###
jobs:
- job: ReportStartToGitHub
displayName: Set pending GitHub status
pool:
name: '$(macOSVersion)'
steps:
- bash: ./jenkins/add-commit-status.sh "--token=$(github-pat)" "--hash=$BUILD_SOURCEVERSION" "--state=pending" --target-url="$AZURE_BUILD_URL" --description="$BUILD_DEFINITIONNAME" --context="$BUILD_DEFINITIONNAME"
displayName: Set pending GitHub status
###
### Run the sample tests.
###
### They're split over multiple bots to make them run faster (and not hit the
### max job time duration for a single job).
###
- job: macOS
dependsOn: ReportStartToGitHub
displayName: Build samples
timeoutInMinutes: 360
strategy:
matrix:
# We have rougly 900 tests, which take a while to build for device.
# So in that case, we split them in 3 buckets of roughly 300 tests each,
# based on the first letter of the project's filename.
Debug_iPhone_AF:
TEST_PLATFORM_FILTER_EXPRESSION: $(iphone_filter)
TEST_CONFIG_FILTER_EXPRESSION: $(debug_filter)
TEST_NAME_FILTER_EXPRESSION: $(name_filter_af)
Debug_iPhone_GR:
TEST_PLATFORM_FILTER_EXPRESSION: $(iphone_filter)
TEST_CONFIG_FILTER_EXPRESSION: $(debug_filter)
TEST_NAME_FILTER_EXPRESSION: $(name_filter_gr)
Debug_iPhone_SZ:
TEST_PLATFORM_FILTER_EXPRESSION: $(iphone_filter)
TEST_CONFIG_FILTER_EXPRESSION: $(debug_filter)
TEST_NAME_FILTER_EXPRESSION: $(name_filter_rest)
Debug_iPhoneSimulator:
TEST_PLATFORM_FILTER_EXPRESSION: $(iphonesimulator_filter)
TEST_CONFIG_FILTER_EXPRESSION: $(debug_filter)
Release_iPhone_AF:
TEST_PLATFORM_FILTER_EXPRESSION: $(iphone_filter)
TEST_CONFIG_FILTER_EXPRESSION: $(release_filter)
TEST_NAME_FILTER_EXPRESSION: $(name_filter_af)
Release_iPhone_GR:
TEST_PLATFORM_FILTER_EXPRESSION: $(iphone_filter)
TEST_CONFIG_FILTER_EXPRESSION: $(release_filter)
TEST_NAME_FILTER_EXPRESSION: $(name_filter_gr)
Release_iPhone_SZ:
TEST_PLATFORM_FILTER_EXPRESSION: $(iphone_filter)
TEST_CONFIG_FILTER_EXPRESSION: $(release_filter)
TEST_NAME_FILTER_EXPRESSION: $(name_filter_rest)
Release_iPhoneSimulator:
TEST_PLATFORM_FILTER_EXPRESSION: $(iphonesimulator_filter)
TEST_CONFIG_FILTER_EXPRESSION: $(release_filter)
Debug_Mac:
TEST_PLATFORM_FILTER_EXPRESSION: $(mac_platform_filter)
TEST_CONFIG_FILTER_EXPRESSION: $(debug_filter)
Release_Mac:
TEST_PLATFORM_FILTER_EXPRESSION: $(mac_platform_filter)
TEST_CONFIG_FILTER_EXPRESSION: $(release_filter)
pool:
name: '$(macOSVersion)'
steps:
- checkout: self
- checkout: xamarin-macios-data
persistCredentials: true
- checkout: maccore
persistCredentials: true
- bash: ./xamarin-macios/tools/devops/system-info.sh
displayName: System Info
- bash: ./xamarin-macios/tools/devops/fetch-maccore.sh
displayName: Fetch correct maccore hash
- task: provisionator@2
displayName: Xcode
inputs:
provisionator_uri: '$(provisionator-uri)'
github_token: '$(github-pat)'
provisioning_script: $(System.DefaultWorkingDirectory)/xamarin-macios/tools/devops/provision-xcode.csx
- task: provisionator@2
displayName: Provision XI/XM/Mono/Objective-Sharpie
inputs:
provisionator_uri: '$(provisionator-uri)'
github_token: '$(github-pat)'
provisioning_script: $(System.DefaultWorkingDirectory)/xamarin-macios/tools/devops/build-samples.csx
- bash: ./xamarin-macios/tools/devops/system-info.sh
displayName: System Info post provisioning
- bash: ./xamarin-macios/tools/devops/build-samples.sh
displayName: Run tests
- task: PublishTestResults@2
displayName: Publish test results
condition: always()
inputs:
testResultsFormat: NUnit
testResultsFiles: '**/TestResult*.xml'
testRunTitle: Sample tests (build)
publishRunAttachments: true
mergeTestResults: true
- bash: ./xamarin-macios/tools/devops/prepare-performance-data.sh
displayName: Prepare performance data
condition: always()
- publish: logs
displayName: 'Upload perf data'
condition: always()
artifact: logs-$(System.JobId)
- bash: echo "##vso[task.setvariable variable=JobStatus;isOutput=true]$AGENT_JOBSTATUS"
name: ExportedVariables
displayName: Export status
condition: always()
###
### Push performance data to the xamarin-macios-data repository
###
- job: PublishPerformanceData
displayName: Publish Performance Data
condition: always()
dependsOn: macOS
pool:
name: '$(macOSVersion)'
steps:
- checkout: self
- checkout: xamarin-macios-data
persistCredentials: true
- task: DownloadPipelineArtifact@2
displayName: Download performance data
inputs:
source: current
path: logs
- bash: ./xamarin-macios/tools/devops/push-performance-data.sh
displayName: Publish perf data
- bash: echo "##vso[task.setvariable variable=JobStatus;isOutput=true]$AGENT_JOBSTATUS"
name: ExportedVariables
displayName: Export status
condition: always()
###
### Report final results to GitHub
###
- job: ReportResultsToGitHub
displayName: Report status/results to GitHub
dependsOn:
- PublishPerformanceData
- macOS
condition: always()
pool:
name: '$(macOSVersion)'
variables:
jobResultDebugiPhoneAF: $[ dependencies.macOS.outputs['Debug_iPhone_AF.ExportedVariables.JobStatus'] ]
jobResultDebugiPhoneGR: $[ dependencies.macOS.outputs['Debug_iPhone_GR.ExportedVariables.JobStatus'] ]
jobResultDebugiPhoneSZ: $[ dependencies.macOS.outputs['Debug_iPhone_SZ.ExportedVariables.JobStatus'] ]
jobResultDebugiPhoneSimulator: $[ dependencies.macOS.outputs['Debug_iPhoneSimulator.ExportedVariables.JobStatus'] ]
jobResultReleaseiPhoneAF: $[ dependencies.macOS.outputs['Release_iPhone_AF.ExportedVariables.JobStatus'] ]
jobResultReleaseiPhoneGR: $[ dependencies.macOS.outputs['Release_iPhone_GR.ExportedVariables.JobStatus'] ]
jobResultReleaseiPhoneSZ: $[ dependencies.macOS.outputs['Release_iPhone_SZ.ExportedVariables.JobStatus'] ]
jobResultReleaseiPhoneSimulator: $[ dependencies.macOS.outputs['Release_iPhoneSimulator.ExportedVariables.JobStatus'] ]
jobResultDebugMac: $[ dependencies.macOS.outputs['Debug_Mac.ExportedVariables.JobStatus'] ]
jobResultReleaseMac: $[ dependencies.macOS.outputs['Release_Mac.ExportedVariables.JobStatus'] ]
jobResultPublishPerformanceData: $[ dependencies.PublishPerformanceData.outputs['ExportedVariables.JobStatus'] ]
steps:
- bash: |
./tools/devops/build-samples-report-to-github.sh "$(github-pat)" \
"Debug_iPhone_AF" "Debug_iPhone_GR" "Debug_iPhone_SZ" \
"Debug_iPhoneSimulator" \
"Release_iPhone_AF" "Release_iPhone_GR" "Release_iPhone_SZ" \
"Release_iPhoneSimulator" \
"Debug_Mac" \
"Release_Mac" \
"PublishPerformanceData"
displayName: Report results to GitHub as comment / status
condition: always()