Skip to content

Commit da4820a

Browse files
scbeddweshaggardhallipr
authored
Pipeline V3 (Azure#37428)
* refactor package selection methodology to utilize Save-Package-Properties for package targeting * introduce the python - pullrequest build definition that is triggered against all sdk/ directories, and builds/tests the packages which were changed * this also includes abstractions to reduce runtime by distributing sets of packages and duplicating matrix definition * refactor all analyze checks which used to operate on ServiceDirectory to instead operate upon the packages present within a PackageInfoFolder from Save-Package-Properties * miscellaneous tooling changes to account for new matrix possibilities --------- Co-authored-by: Wes Haggard <[email protected]> Co-authored-by: Patrick Hallisey <[email protected]>
1 parent af3576e commit da4820a

39 files changed

+851
-300
lines changed

.vscode/cspell.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -262,6 +262,7 @@
262262
"iohttp",
263263
"IOHTTP",
264264
"IOLRO",
265+
"incompat",
265266
"inprogress",
266267
"ipconfiguration",
267268
"ipconfigurations",

eng/pipelines/templates/jobs/ci.tests.yml

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -79,9 +79,12 @@ jobs:
7979
value: ${{ parameters.InjectedPackages }}
8080

8181
steps:
82-
- template: /eng/pipelines/templates/steps/targeting-string-resolve.yml
82+
- template: /eng/pipelines/templates/steps/download-package-artifacts.yml
83+
84+
- template: /eng/pipelines/templates/steps/resolve-package-targeting.yml
8385
parameters:
8486
BuildTargetingString: ${{ parameters.BuildTargetingString }}
87+
PackagePropertiesFolder: $(Build.ArtifactStagingDirectory)/PackageInfo
8588

8689
- template: /eng/common/pipelines/templates/steps/verify-agent-os.yml
8790
parameters:
@@ -112,7 +115,6 @@ jobs:
112115
113116
- template: ../steps/build-test.yml
114117
parameters:
115-
ServiceDirectory: ${{ parameters.ServiceDirectory }}
116118
TestMarkArgument: ${{ parameters.TestMarkArgument }}
117119
AdditionalTestArgs: '--wheel_dir="$(Build.ArtifactStagingDirectory)"'
118120
CoverageArg: $(CoverageArg)
@@ -122,12 +124,6 @@ jobs:
122124
InjectedPackages: $(InjectedPackages)
123125
TestProxy: ${{ parameters.TestProxy }}
124126
BeforeTestSteps:
125-
- template: /eng/pipelines/templates/steps/download-package-artifacts.yml
126-
127-
- template: ../steps/set-dev-build.yml
128-
parameters:
129-
ServiceDirectory: ${{ parameters.ServiceDirectory }}
130-
131127
- ${{ each step in parameters.BeforeTestSteps }}:
132128
- ${{ step }}
133129
AfterTestSteps: ${{ parameters.AfterTestSteps }}

eng/pipelines/templates/jobs/ci.yml

Lines changed: 65 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -71,18 +71,15 @@ jobs:
7171
image: $(LINUXVMIMAGE)
7272
os: linux
7373

74-
variables:
75-
ComponentDetection.SourcePath: '$(Build.SourcesDirectory)/sdk/${{ parameters.ServiceDirectory }}'
76-
7774
steps:
78-
- template: /eng/pipelines/templates/steps/build.yml
75+
- template: /eng/pipelines/templates/steps/build-package-artifacts.yml
7976
parameters:
8077
ServiceDirectory: ${{ parameters.ServiceDirectory }}
81-
BuildTargetingString: ${{ parameters.BuildTargetingString }}
8278
BeforePublishSteps: ${{ parameters.BeforePublishSteps }}
8379
TestPipeline: ${{ parameters.TestPipeline }}
84-
ArtifactSuffix: linux
8580
Artifacts: ${{ parameters.Artifacts }}
81+
ArtifactSuffix: linux
82+
BuildTargetingString: ${{ parameters.BuildTargetingString }}
8683

8784
- job: 'Build_Windows'
8885
timeoutInMinutes: 90
@@ -92,18 +89,15 @@ jobs:
9289
image: $(WINDOWSVMIMAGE)
9390
os: windows
9491

95-
variables:
96-
ComponentDetection.SourcePath: '$(Build.SourcesDirectory)/sdk/${{ parameters.ServiceDirectory }}'
97-
9892
steps:
99-
- template: /eng/pipelines/templates/steps/build.yml
93+
- template: /eng/pipelines/templates/steps/build-package-artifacts.yml
10094
parameters:
10195
ServiceDirectory: ${{ parameters.ServiceDirectory }}
102-
BuildTargetingString: ${{ parameters.BuildTargetingString }}
10396
BeforePublishSteps: ${{ parameters.BeforePublishSteps }}
10497
TestPipeline: ${{ parameters.TestPipeline }}
105-
ArtifactSuffix: windows
10698
Artifacts: ${{ parameters.Artifacts }}
99+
ArtifactSuffix: windows
100+
BuildTargetingString: ${{ parameters.BuildTargetingString }}
107101

108102
- job: 'Build_MacOS'
109103
timeoutInMinutes: 90
@@ -113,18 +107,15 @@ jobs:
113107
vmImage: $(MACVMIMAGE)
114108
os: macOS
115109

116-
variables:
117-
ComponentDetection.SourcePath: '$(Build.SourcesDirectory)/sdk/${{ parameters.ServiceDirectory }}'
118-
119110
steps:
120-
- template: /eng/pipelines/templates/steps/build.yml
111+
- template: /eng/pipelines/templates/steps/build-package-artifacts.yml
121112
parameters:
122113
ServiceDirectory: ${{ parameters.ServiceDirectory }}
123-
BuildTargetingString: ${{ parameters.BuildTargetingString }}
124114
BeforePublishSteps: ${{ parameters.BeforePublishSteps }}
125115
TestPipeline: ${{ parameters.TestPipeline }}
126-
ArtifactSuffix: mac
127116
Artifacts: ${{ parameters.Artifacts }}
117+
ArtifactSuffix: mac
118+
BuildTargetingString: ${{ parameters.BuildTargetingString }}
128119

129120
- job: 'Build_Extended'
130121
displayName: Build Extended
@@ -140,15 +131,46 @@ jobs:
140131
image: $(LINUXVMIMAGE)
141132
os: linux
142133

143-
variables:
144-
ComponentDetection.SourcePath: '$(Build.SourcesDirectory)/sdk/${{ parameters.ServiceDirectory }}'
134+
steps:
135+
- template: /eng/pipelines/templates/steps/download-package-artifacts.yml
136+
137+
- template: /eng/pipelines/templates/steps/resolve-package-targeting.yml
138+
parameters:
139+
BuildTargetingString: ${{ parameters.BuildTargetingString }}
140+
PackagePropertiesFolder: $(Build.ArtifactStagingDirectory)/PackageInfo
141+
IncludeIndirect: false
142+
143+
- template: /eng/pipelines/templates/steps/build-extended-artifacts.yml
144+
parameters:
145+
ServiceDirectory: ${{ parameters.ServiceDirectory }}
146+
BeforePublishSteps: ${{ parameters.BeforePublishSteps }}
147+
BuildDocs: false
148+
RunApiStubGen: true
149+
TestPipeline: ${{ parameters.TestPipeline }}
150+
Artifacts: ${{ parameters.Artifacts }}
151+
152+
- job: 'Build_Documentation'
153+
displayName: Build Docs
154+
dependsOn:
155+
- 'Build_Linux'
156+
- 'Build_Windows'
157+
- 'Build_MacOS'
158+
159+
timeoutInMinutes: 90
160+
161+
pool:
162+
name: $(LINUXPOOL)
163+
image: $(LINUXVMIMAGE)
164+
os: linux
145165

146166
steps:
147167
- template: /eng/pipelines/templates/steps/download-package-artifacts.yml
148168

149-
- template: /eng/pipelines/templates/steps/targeting-string-resolve.yml
169+
- template: /eng/pipelines/templates/steps/resolve-package-targeting.yml
150170
parameters:
151171
BuildTargetingString: ${{ parameters.BuildTargetingString }}
172+
PackagePropertiesFolder: $(Build.ArtifactStagingDirectory)/PackageInfo
173+
IncludeIndirect: false
152174

153175
- template: ../steps/build-extended-artifacts.yml
154176
parameters:
@@ -157,6 +179,7 @@ jobs:
157179
BuildDocs: ${{ parameters.BuildDocs }}
158180
TestPipeline: ${{ parameters.TestPipeline }}
159181
Artifacts: ${{ parameters.Artifacts }}
182+
RunApiStubGen: false
160183

161184
- job: 'Analyze'
162185
condition: and(succeeded(), ne(variables['Skip.Analyze'], 'true'))
@@ -172,10 +195,6 @@ jobs:
172195
os: linux
173196

174197
steps:
175-
- template: /eng/pipelines/templates/steps/targeting-string-resolve.yml
176-
parameters:
177-
BuildTargetingString: ${{ parameters.BuildTargetingString }}
178-
179198
- template: /eng/common/pipelines/templates/steps/check-spelling.yml
180199
parameters:
181200
ContinueOnError: false
@@ -196,6 +215,12 @@ jobs:
196215
artifactName: 'packages_extended'
197216
targetPath: $(Build.ArtifactStagingDirectory)
198217

218+
- template: /eng/pipelines/templates/steps/resolve-package-targeting.yml
219+
parameters:
220+
BuildTargetingString: ${{ parameters.BuildTargetingString }}
221+
PackagePropertiesFolder: $(Build.ArtifactStagingDirectory)/PackageInfo
222+
IncludeIndirect: false
223+
199224
- template: ../steps/analyze.yml
200225
parameters:
201226
ServiceDirectory: ${{ parameters.ServiceDirectory }}
@@ -219,6 +244,20 @@ jobs:
219244
MatrixConfigs: ${{ parameters.MatrixConfigs }}
220245
MatrixFilters: ${{ parameters.MatrixFilters }}
221246
MatrixReplace: ${{ parameters.MatrixReplace }}
247+
PreGenerationSteps:
248+
249+
- template: /eng/pipelines/templates/steps/download-package-artifacts.yml
250+
251+
- task: Powershell@2
252+
inputs:
253+
pwsh: true
254+
filePath: eng/scripts/distribute-packages-to-matrix.ps1
255+
arguments: >-
256+
-PackageInfoFolder "$(Build.ArtifactStagingDirectory)/PackageInfo"
257+
-PlatformMatrix "${{ parameters.MatrixConfigs[0].Path }}"
258+
displayName: 'Distribute Packages to Matrix'
259+
condition: and(eq(variables['Build.Reason'], 'PullRequest'), eq('${{ parameters.ServiceDirectory }}','auto'))
260+
222261
CloudConfig:
223262
Cloud: Public
224263
AdditionalParameters:
@@ -253,15 +292,12 @@ jobs:
253292
- pwsh: |
254293
python -m pip install "./tools/azure-sdk-tools[build]"
255294
displayName: 'Prep Environment'
256-
- template: /eng/pipelines/templates/steps/targeting-string-resolve.yml
257-
parameters:
258-
BuildTargetingString: ${{ parameters.BuildTargetingString }}
259295
- task: PythonScript@0
260296
displayName: 'Ensure service coverage'
261297
inputs:
262298
scriptPath: '$(Build.SourcesDirectory)/scripts/devops_tasks/update_regression_services.py'
263299
arguments: >-
264-
"$(TargetingString)"
300+
"azure*"
265301
--service="${{ parameters.ServiceDirectory }}"
266302
--json=$(Build.SourcesDirectory)/eng/pipelines/templates/stages/regression-job-matrix.json
267303
CloudConfig:

eng/pipelines/templates/jobs/live.tests.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ jobs:
110110
parameters:
111111
AgentImage: ${{ parameters.OSName }}
112112

113-
- template: /eng/pipelines/templates/steps/targeting-string-resolve.yml
113+
- template: /eng/pipelines/templates/steps/resolve-package-targeting.yml
114114
parameters:
115115
BuildTargetingString: ${{ parameters.BuildTargetingString }}
116116

eng/pipelines/templates/jobs/regression.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ jobs:
7171

7272
# Please use `$(TargetingString)` to refer to the python packages glob string. This was previously `${{ parameters.BuildTargetingString }}`.
7373
steps:
74-
- template: /eng/pipelines/templates/steps/targeting-string-resolve.yml
74+
- template: /eng/pipelines/templates/steps/resolve-package-targeting.yml
7575
parameters:
7676
BuildTargetingString: ${{ parameters.BuildTargetingString }}
7777

eng/pipelines/templates/stages/platform-matrix.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,4 +38,4 @@
3838
}
3939
}
4040
]
41-
}
41+
}

eng/pipelines/templates/steps/analyze.yml

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,7 @@ parameters:
88
ValidateFormatting: false
99
GenerateApiReviewForManualOnly: false
1010

11-
# The variable TargetingString is set by template `eng/pipelines/templates/steps/targeting-string-resolve.yml`. This template is invoked from yml files:
12-
# eng/pipelines/templates/jobs/ci.tests.yml
13-
# eng/pipelines/templates/jobs/ci.yml
14-
# eng/pipelines/templates/jobs/live.test.yml
15-
16-
# Please use `$(TargetingString)` to refer to the python packages glob string. This was previously `${{ parameters.BuildTargetingString }}`.
11+
# Please use `$(TargetingString)` to refer to the python packages glob string. This variable is set from resolve-package-targeting.yml.
1712
steps:
1813
- template: /eng/pipelines/templates/steps/analyze_dependency.yml
1914
parameters:
@@ -32,14 +27,20 @@ steps:
3227
scriptPath: 'scripts/devops_tasks/set_tox_environment.py'
3328
arguments: '"$(TargetingString)" --team-project="$(System.TeamProject)" --service="${{ parameters.ServiceDirectory }}"'
3429

35-
- ${{ each artifact in parameters.Artifacts }}:
36-
- ${{if ne(artifact.skipVerifyChangeLog, 'true')}}:
37-
- template: /eng/common/pipelines/templates/steps/verify-changelog.yml
38-
parameters:
39-
PackageName: ${{artifact.name}}
40-
ServiceName: ${{parameters.ServiceDirectory}}
41-
ForRelease: false
42-
Condition: succeededOrFailed()
30+
- ${{ if eq(variables['Build.Reason'], 'PullRequest') }}:
31+
- template: /eng/common/pipelines/templates/steps/verify-changelogs.yml
32+
parameters:
33+
PackagePropertiesFolder: $(Build.ArtifactStagingDirectory)/PackageInfo
34+
Condition: succeededOrFailed()
35+
- ${{ else }}:
36+
- ${{ each artifact in parameters.Artifacts }}:
37+
- ${{if ne(artifact.skipVerifyChangeLog, 'true')}}:
38+
- template: /eng/common/pipelines/templates/steps/verify-changelog.yml
39+
parameters:
40+
PackageName: ${{artifact.name}}
41+
ServiceName: ${{parameters.ServiceDirectory}}
42+
ForRelease: false
43+
Condition: succeededOrFailed()
4344

4445
- script: |
4546
python -m pip install "./tools/azure-sdk-tools[build]" -q -I

eng/pipelines/templates/steps/analyze_dependency.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,9 @@ steps:
1313
displayName: 'Install Python Tools'
1414
condition: succeededOrFailed()
1515
16-
- template: /eng/common/pipelines/templates/steps/verify-readme.yml
16+
- template: /eng/common/pipelines/templates/steps/verify-readmes.yml
1717
parameters:
18-
ScanPath: ${{ parameters.ScanPath }}
18+
PackagePropertiesFolder: $(Build.ArtifactStagingDirectory)/PackageInfo
1919
Condition: succeededOrFailed()
2020

2121
- pwsh: |

0 commit comments

Comments
 (0)