Skip to content

Commit ef27816

Browse files
authored
Add matrix-based testing (Azure#2323)
* Add matrix based testing * Restore save-package-properties call * Remove session records from sparse checkout paths
1 parent 32741a9 commit ef27816

File tree

4 files changed

+108
-55
lines changed

4 files changed

+108
-55
lines changed

eng/pipelines/templates/jobs/test.yml renamed to eng/pipelines/templates/jobs/ci.tests.yml

Lines changed: 26 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,40 @@
11
parameters:
2-
- name: ServiceDirectory
3-
type: string
4-
- name: Toolchain
2+
- name: UsePlatformContainer
3+
type: boolean
4+
- name: OSName
55
type: string
66
- name: Matrix
77
type: object
8+
- name: DependsOn
9+
type: string
10+
- name: CloudConfig
11+
type: object
12+
- name: ServiceDirectory
13+
type: string
814
- name: TimeoutInMinutes
915
type: number
1016
- name: TestProxy
1117
type: boolean
12-
default: true
1318

1419
jobs:
15-
- job: Test_${{ parameters.Matrix.pool.os }}_${{ parameters.Toolchain }}
16-
displayName: "Test: ${{ parameters.Matrix.pool.os }} ${{ parameters.Toolchain }}"
20+
- job:
21+
displayName: "Test"
22+
condition: and(succeeded(), ne(variables['Skip.Tests'],'true'), ne(${{ parameters.Matrix }}, '{}'))
1723
timeoutInMinutes: ${{ parameters.TimeoutInMinutes }}
18-
condition: and(succeeded(), ne(variables['Skip.Tests'],'true'))
24+
dependsOn: ${{ parameters.DependsOn }}
25+
26+
strategy:
27+
matrix: $[ ${{ parameters.Matrix }} ]
1928

20-
pool: ${{ parameters.Matrix.pool }}
29+
pool:
30+
name: $(Pool)
31+
# 1es pipeline templates converts `image` to demands: ImageOverride under the hood
32+
# which is incompatible with image selection in the default non-1es hosted pools
33+
${{ if eq(parameters.OSName, 'macOS') }}:
34+
vmImage: $(OSVmImage)
35+
${{ else }}:
36+
image: $(OSVmImage)
37+
os: ${{ parameters.OSName }}
2138

2239
steps:
2340
- template: /eng/common/pipelines/templates/steps/sparse-checkout.yml
@@ -27,7 +44,7 @@ jobs:
2744

2845
- template: /eng/pipelines/templates/steps/use-rust.yml@self
2946
parameters:
30-
Toolchain: ${{ parameters.Toolchain }}
47+
Toolchain: $(RustToolchainName)
3148

3249
- template: /eng/common/pipelines/templates/steps/set-default-branch.yml@self
3350

Lines changed: 25 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,40 +1,22 @@
11
parameters:
22
- name: ServiceDirectory
33
type: string
4-
default: auto
54
- name: Artifacts
65
type: object
7-
default: []
86
- name: PipelineArtifactName
97
type: string
10-
default: packages
11-
- name: TestTimeoutInMinutes
12-
type: number
13-
default: 60
148
- name: TestPipeline
159
type: boolean
16-
default: false
17-
- name: BuildMatrix
10+
- name: TestProxy
11+
type: boolean
12+
- name: TestTimeoutInMinutes
13+
type: number
14+
- name: MatrixConfigs
15+
type: object
16+
- name: MatrixFilters
17+
type: object
18+
- name: MatrixReplace
1819
type: object
19-
default:
20-
- pool:
21-
os: linux
22-
name: $(LINUXPOOL)
23-
image: $(LINUXVMIMAGE)
24-
Toolchains: [stable, msrv, nightly]
25-
- pool:
26-
os: windows
27-
name: $(WINDOWSPOOL)
28-
image: $(WINDOWSVMIMAGE)
29-
Toolchains: [stable, msrv, nightly]
30-
- pool:
31-
os: macOS
32-
name: $(MACPOOL)
33-
vmImage: $(MACVMIMAGE)
34-
Toolchains: [stable, msrv, nightly]
35-
- name: AnalyzeToolchain
36-
type: string
37-
default: stable
3820

3921
jobs:
4022
- template: /eng/pipelines/templates/jobs/pack.yml
@@ -44,17 +26,23 @@ jobs:
4426
TestPipeline: ${{ parameters.TestPipeline }}
4527
PipelineArtifactName: ${{ parameters.PipelineArtifactName }}
4628

47-
- ${{ each matrix in parameters.BuildMatrix }}:
48-
- ${{ each toolchain in matrix.Toolchains }}:
49-
- template: /eng/pipelines/templates/jobs/test.yml
50-
parameters:
51-
ServiceDirectory: ${{ parameters.ServiceDirectory }}
52-
Toolchain: ${{ toolchain }}
53-
Matrix: ${{ matrix }}
54-
TimeoutInMinutes: ${{ parameters.TestTimeoutInMinutes }}
55-
5629
- template: /eng/pipelines/templates/jobs/analyze.yml
5730
parameters:
5831
ServiceDirectory: ${{ parameters.ServiceDirectory }}
59-
Toolchain: ${{ parameters.AnalyzeToolchain }}
32+
Toolchain: stable
6033
TimeoutInMinutes: ${{ parameters.TestTimeoutInMinutes }}
34+
35+
- template: /eng/common/pipelines/templates/jobs/generate-job-matrix.yml
36+
parameters:
37+
JobTemplatePath: /eng/pipelines/templates/jobs/ci.tests.yml
38+
MatrixConfigs: ${{ parameters.MatrixConfigs }}
39+
MatrixFilters: ${{ parameters.MatrixFilters }}
40+
MatrixReplace: ${{ parameters.MatrixReplace }}
41+
CloudConfig:
42+
Cloud: public
43+
SparseCheckoutPaths:
44+
- /*
45+
AdditionalParameters:
46+
ServiceDirectory: ${{ parameters.ServiceDirectory }}
47+
TimeoutInMinutes: ${{ parameters.TestTimeoutInMinutes }}
48+
TestProxy: ${{ parameters.TestProxy }}

eng/pipelines/templates/stages/archetype-sdk-client.yml

Lines changed: 32 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,34 @@ parameters:
44
- name: Artifacts
55
type: object
66
default: []
7+
# Test Parameters
78
- name: TestTimeoutInMinutes
89
type: number
910
default: 60
10-
- name: oneESTemplateTag
11-
type: string
12-
default: release
11+
- name: MatrixConfigs
12+
type: object
13+
default:
14+
- Name: rust_ci_test_base
15+
Path: eng/pipelines/templates/stages/platform-matrix.json
16+
Selection: sparse
17+
NonSparseParameters: RustToolchainName
18+
GenerateVMJobs: true
19+
- name: AdditionalMatrixConfigs
20+
type: object
21+
default: []
22+
- name: MatrixFilters
23+
type: object
24+
default: []
25+
- name: MatrixReplace
26+
type: object
27+
default: []
28+
- name: TestProxy
29+
type: boolean
30+
default: true
1331

1432
extends:
1533
template: /eng/pipelines/templates/stages/1es-redirect.yml
1634
parameters:
17-
oneESTemplateTag: ${{ parameters.oneESTemplateTag }}
1835
autoBaseline: ${{ and(eq(variables['Build.DefinitionName'], 'rust - core'), eq(variables['Build.SourceBranchName'], 'main'), eq(variables['System.TeamProject'], 'internal')) }}
1936
stages:
2037
- stage: Build
@@ -25,17 +42,23 @@ extends:
2542
- template: /eng/pipelines/templates/jobs/ci.yml
2643
parameters:
2744
ServiceDirectory: ${{ parameters.ServiceDirectory }}
45+
PipelineArtifactName: packages
2846
Artifacts: ${{ parameters.Artifacts }}
29-
${{ if eq(parameters.ServiceDirectory, 'template') }}:
30-
TestPipeline: true
47+
TestPipeline: ${{ eq(parameters.ServiceDirectory, 'template') }}
3148
TestTimeoutInMinutes: ${{ parameters.TestTimeoutInMinutes }}
32-
PipelineArtifactName: packages
49+
TestProxy: ${{ parameters.TestProxy }}
50+
MatrixConfigs:
51+
- ${{ each config in parameters.MatrixConfigs }}:
52+
- ${{ config }}
53+
- ${{ each config in parameters.AdditionalMatrixConfigs }}:
54+
- ${{ config }}
55+
MatrixFilters: ${{ parameters.MatrixFilters }}
56+
MatrixReplace: ${{ parameters.MatrixReplace }}
3357

3458
- template: archetype-rust-release.yml
3559
parameters:
3660
DependsOn: "Build"
3761
ServiceDirectory: ${{ parameters.ServiceDirectory }}
3862
Artifacts: ${{ parameters.Artifacts }}
39-
${{ if eq(parameters.ServiceDirectory, 'template') }}:
40-
TestPipeline: true
63+
TestPipeline: ${{ eq(parameters.ServiceDirectory, 'template') }}
4164
PipelineArtifactName: packages
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
{
2+
"displayNames": {},
3+
"matrix": {
4+
"Agent": {
5+
"ubuntu": {
6+
"OSVmImage": "env:LINUXVMIMAGE",
7+
"Pool": "env:LINUXPOOL"
8+
},
9+
"windows": {
10+
"OSVmImage": "env:WINDOWSVMIMAGE",
11+
"Pool": "env:WINDOWSPOOL"
12+
},
13+
"macos": {
14+
"OSVmImage": "env:MACVMIMAGE",
15+
"Pool": "env:MACPOOL"
16+
}
17+
},
18+
"RustToolchainName": [
19+
"stable",
20+
"msrv",
21+
"nightly"
22+
]
23+
},
24+
"include": []
25+
}

0 commit comments

Comments
 (0)