Skip to content

Commit 33ede80

Browse files
committed
Split test in separate agents
1 parent 33a8b15 commit 33ede80

File tree

2 files changed

+180
-48
lines changed

2 files changed

+180
-48
lines changed

.vsts-ci.yml

Lines changed: 160 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,162 @@
11
jobs:
2+
- job: build
3+
strategy:
4+
matrix:
5+
linux:
6+
osName: 'Linux'
7+
imageName: 'ubuntu-22.04'
8+
mac:
9+
osName: 'macOS'
10+
imageName: 'macOS-latest'
11+
windows:
12+
osName: 'Windows'
13+
imageName: 'windows-latest'
214

3-
################################################################################
4-
- job: Windows
5-
################################################################################
6-
displayName: Windows
7-
timeoutInMinutes: 180
8-
pool:
9-
vmImage: windows-latest
10-
steps:
11-
- template: eng/steps.yml
12-
parameters:
13-
os: 'Windows'
14-
15-
################################################################################
16-
- job: Linux
17-
################################################################################
18-
displayName: Linux (Ubuntu)
19-
timeoutInMinutes: 180
20-
pool:
21-
vmImage: ubuntu-22.04
22-
steps:
23-
- template: eng/steps.yml
24-
parameters:
25-
os: 'Linux'
26-
27-
################################################################################
28-
- job: macOS
29-
################################################################################
30-
displayName: macOS
31-
timeoutInMinutes: 180
32-
pool:
33-
vmImage: macOS-latest
34-
steps:
35-
- template: eng/steps.yml
36-
parameters:
37-
os: 'macOS'
15+
displayName: Build
16+
timeoutInMinutes: 180
17+
pool:
18+
vmImage: $(imageName)
19+
20+
steps:
21+
- checkout: self
22+
submodules: true
23+
24+
- task: Bash@3
25+
displayName: Install tools
26+
inputs:
27+
targetType: inline
28+
script: |
29+
sudo apt-get -yq install dos2unix
30+
condition: eq(variables.osName, 'Linux')
31+
32+
- task: UseDotNet@2
33+
displayName: Install .NET 9.0 SDK for build
34+
inputs:
35+
packageType: 'sdk'
36+
version: '9.0.x'
37+
38+
# Dump version info
39+
- task: PowerShell@2
40+
displayName: Version Information
41+
inputs:
42+
targetType: inline
43+
script: |
44+
dotnet --info
45+
try { msbuild -version } catch { }
46+
try { mono --version } catch { }
47+
48+
- powershell: ./make.ps1
49+
displayName: Build
50+
51+
- powershell: ./make.ps1 package
52+
displayName: Package
53+
54+
- task: CopyFiles@2
55+
displayName: Copy Packages
56+
inputs:
57+
SourceFolder: '$(Build.Repository.LocalPath)/Package/Release/Packages'
58+
Contents: |
59+
**/*.nupkg
60+
**/*.snupkg
61+
**/*.zip
62+
**/*.msi
63+
**/*.deb
64+
**/*.pkg
65+
TargetFolder: '$(Build.ArtifactStagingDirectory)'
66+
condition: and(succeededOrFailed(), eq(variables['system.pullrequest.isfork'], false))
67+
68+
- task: CopyFiles@2
69+
displayName: Copy Build Logs
70+
inputs:
71+
Contents: '*.binlog'
72+
TargetFolder: '$(Build.ArtifactStagingDirectory)'
73+
condition: and(succeededOrFailed(), eq(variables['system.pullrequest.isfork'], false))
74+
75+
- task: PublishBuildArtifacts@1
76+
displayName: Publish Artifacts
77+
inputs:
78+
ArtifactName: '$(osName) Artifacts'
79+
condition: and(succeededOrFailed(), eq(variables['system.pullrequest.isfork'], false))
80+
81+
- job: test
82+
strategy:
83+
matrix:
84+
linux_net462:
85+
osName: Linux
86+
imageName: ubuntu-22.04
87+
framework: net462
88+
linux_net6_0:
89+
osName: Linux
90+
imageName: ubuntu-22.04
91+
framework: net6.0
92+
linux_net8_0:
93+
osName: Linux
94+
imageName: ubuntu-22.04
95+
framework: net8.0
96+
macos_net462:
97+
osName: macOS
98+
imageName: macOS-latest
99+
framework: net462
100+
macos_net6_0:
101+
osName: macOS
102+
imageName: macOS-latest
103+
framework: net6.0
104+
macos_net8_0:
105+
osName: macOS
106+
imageName: macOS-latest
107+
framework: net8.0
108+
windows_net462:
109+
osName: Windows
110+
imageName: windows-latest
111+
framework: net462
112+
windows_net6_0:
113+
osName: Windows
114+
imageName: windows-latest
115+
framework: net6.0
116+
windows_net8_0:
117+
osName: Windows
118+
imageName: windows-latest
119+
framework: net8.0
120+
121+
condition: false
122+
displayName: Test
123+
timeoutInMinutes: 180
124+
pool:
125+
vmImage: $(imageName)
126+
127+
steps:
128+
# Prerequisites
129+
- checkout: self
130+
submodules: true
131+
132+
# Setup .NET
133+
- task: UseDotNet@2
134+
displayName: Install .NET 6.0 runtime for testing
135+
inputs:
136+
packageType: 'runtime'
137+
version: '6.0.x'
138+
- task: UseDotNet@2
139+
displayName: Install .NET 8.0 runtime for testing
140+
inputs:
141+
packageType: 'runtime'
142+
version: '8.0.x'
143+
- task: UseDotNet@2
144+
displayName: Install .NET 9.0 SDK for build
145+
inputs:
146+
packageType: 'sdk'
147+
version: '9.0.x'
148+
149+
# Build & Test
150+
- powershell: ./make.ps1
151+
displayName: Build
152+
- powershell: ./make.ps1 -frameworks $(framework) test-all
153+
displayName: Test ($(framework))
154+
155+
- task: PublishTestResults@2
156+
displayName: Publish Test Results
157+
inputs:
158+
testRunner: VSTest
159+
testResultsFiles: '**/*.trx'
160+
mergeTestResults: true
161+
testRunTitle: $(osName) - $(framework)
162+
condition: succeededOrFailed()

eng/steps.yml

Lines changed: 20 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,16 @@
11
parameters:
2-
os: ''
2+
- name: os
3+
type: string
34

45
steps:
56
- checkout: self
67
submodules: true
78

89
- powershell: |
10+
Write-Host "'${{ parameters.os }}'"
11+
Write-Host "'${{ parameters.os }}'"
12+
Write-Host "${{ eq(parameters.os, 'macOS') }}"
13+
Write-Host "$[ eq(parameters.os, 'macOS') ]"
914
1015
$xml = [xml] (Get-Content CurrentVersion.props)
1116
$major = $xml.Project.PropertyGroup.MajorVersion
@@ -56,6 +61,20 @@ steps:
5661
echo "##vso[task.setvariable variable=PKG_CONFIG_PATH;]$MONOPREFIX/lib/pkgconfig:$MONOPREFIX/share/pkgconfig:$PKG_CONFIG_PATH"
5762
echo "##vso[task.setvariable variable=PATH;]$MONOPREFIX/bin:$PATH"
5863
64+
# Set Mono version on macOS
65+
- task: Bash@3
66+
displayName: Set Mono Version 2
67+
inputs:
68+
targetType: inline
69+
script: |
70+
# use Mono 6.4.0 version
71+
SYMLINK=6.4.0
72+
MONOPREFIX=/Library/Frameworks/Mono.framework/Versions/$SYMLINK
73+
echo "##vso[task.setvariable variable=DYLD_FALLBACK_LIBRARY_PATH;]$MONOPREFIX/lib:/lib:/usr/lib:$DYLD_LIBRARY_FALLBACK_PATH"
74+
echo "##vso[task.setvariable variable=PKG_CONFIG_PATH;]$MONOPREFIX/lib/pkgconfig:$MONOPREFIX/share/pkgconfig:$PKG_CONFIG_PATH"
75+
echo "##vso[task.setvariable variable=PATH;]$MONOPREFIX/bin:$PATH"
76+
condition: eq(${{ parameters.os }}, 'macOS')
77+
5978
# Install mono when running on Linux
6079
- ${{ if eq(parameters.os, 'Linux') }}:
6180
- task: Bash@3
@@ -78,18 +97,6 @@ steps:
7897
- powershell: ./make.ps1
7998
displayName: Build
8099

81-
- powershell: ./make.ps1 test-all
82-
displayName: Test
83-
84-
- task: PublishTestResults@2
85-
displayName: Publish Test Results
86-
inputs:
87-
testRunner: VSTest
88-
testResultsFiles: '**/*.trx'
89-
mergeTestResults: true
90-
testRunTitle: ${{ parameters.os }}
91-
condition: succeededOrFailed()
92-
93100
- powershell: ./make.ps1 package
94101
displayName: Package
95102
condition: succeededOrFailed()

0 commit comments

Comments
 (0)