Skip to content

Commit de8e91e

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

File tree

2 files changed

+183
-48
lines changed

2 files changed

+183
-48
lines changed

.vsts-ci.yml

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