Skip to content

Commit e149f9c

Browse files
author
John Luo
authored
Improve components infrastructure (#12145)
* Remove generated Web.JS javascript files files * Build NodeJS project referenced by managed projects by default * Build Web.JS before other CI jobs - We can't build Web.JS on Linux Musl for example * Make BuildAll not override explicit BuildJava/NodeJS/Native/Managed settings * Capture CodeCheck logs for debugging * Skip NodeJS projects when generation ref assemblies * Do not build dependent projects if NodeJS is not built * Make build fail immediately if BuildNodeJS is true but NodeJS is not installed * Do not build nodejs in installer builds
1 parent 922fd9c commit e149f9c

21 files changed

+249
-74
lines changed

.azure/pipelines/ci.yml

Lines changed: 120 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,31 @@ variables:
2929
- ${{ if or(eq(variables['System.TeamProject'], 'public'), in(variables['Build.Reason'], 'PullRequest')) }}:
3030
- name: _BuildArgs
3131
value: ''
32+
3233
jobs:
34+
# Build Web.JS
35+
- template: jobs/default-build.yml
36+
parameters:
37+
codeSign: true
38+
jobName: WebJS_build
39+
jobDisplayName: "Build: Web.JS"
40+
agentOs: Linux
41+
steps:
42+
- script: ./build.sh
43+
--ci
44+
--projects $(Build.SourcesDirectory)/src/Components/Web.JS/Microsoft.AspNetCore.Components.Web.JS.npmproj
45+
-bl:artifacts/log/build.linux-x64.binlog
46+
$(_BuildArgs)
47+
displayName: Run build.sh
48+
- publish: src/Components/Web.JS/dist/
49+
artifact: WebJS_Javascript
50+
installJdk: false
51+
artifacts:
52+
- name: WebJS_Logs
53+
path: artifacts/log/
54+
publishOnError: true
55+
56+
# Code check
3357
- template: jobs/default-build.yml
3458
parameters:
3559
jobName: Code_check
@@ -38,10 +62,16 @@ jobs:
3862
steps:
3963
- powershell: ./eng/scripts/CodeCheck.ps1 -ci
4064
displayName: Run eng/scripts/CodeCheck.ps1
65+
artifacts:
66+
- name: Code_Check_Logs
67+
path: artifacts/log/
68+
publishOnError: true
4169

4270
# Build Windows (x64/x86)
4371
- template: jobs/default-build.yml
4472
parameters:
73+
dependsOn:
74+
- WebJS_build
4575
codeSign: true
4676
jobName: Windows_build
4777
jobDisplayName: "Build: Windows x64/x86"
@@ -53,6 +83,10 @@ jobs:
5383
- script: "echo ##vso[build.addbuildtag]release-candidate"
5484
condition: and(ne(variables['Build.Reason'], 'PullRequest'), in(variables['DotNetFinalVersionKind'], 'release', 'prerelease'))
5585
displayName: 'Set CI tags'
86+
- task: DownloadPipelineArtifact@2
87+
inputs:
88+
artifact: WebJS_Javascript
89+
path: $(Build.SourcesDirectory)/src/Components/Web.JS/dist/
5690
# !!! NOTE !!! Some of these steps have disabled code signing.
5791
# This is intentional to workaround https://github.com/dotnet/arcade/issues/1957 which always re-submits for code-signing, even
5892
# if they have already been signed. This results in slower builds due to re-submitting the same .nupkg many times for signing.
@@ -130,10 +164,17 @@ jobs:
130164
# Build Windows ARM
131165
- template: jobs/default-build.yml
132166
parameters:
167+
dependsOn:
168+
- WebJS_build
133169
codeSign: true
134170
jobName: Windows_arm_build
135171
jobDisplayName: "Build: Windows ARM"
136172
agentOs: Windows
173+
beforeBuild:
174+
- task: DownloadPipelineArtifact@2
175+
inputs:
176+
artifact: WebJS_Javascript
177+
path: $(Build.SourcesDirectory)/src/Components/Web.JS/dist/
137178
buildArgs:
138179
-arch arm
139180
-sign
@@ -159,9 +200,16 @@ jobs:
159200
# Build MacOS
160201
- template: jobs/default-build.yml
161202
parameters:
203+
dependsOn:
204+
- WebJS_build
162205
jobName: MacOs_x64_build
163206
jobDisplayName: "Build: macOS"
164207
agentOs: macOs
208+
beforeBuild:
209+
- task: DownloadPipelineArtifact@2
210+
inputs:
211+
artifact: WebJS_Javascript
212+
path: $(Build.SourcesDirectory)/src/Components/Web.JS/dist/
165213
buildArgs:
166214
--pack
167215
--all
@@ -171,6 +219,7 @@ jobs:
171219
-bl:artifacts/log/build.macos.binlog
172220
$(_BuildArgs)
173221
installNodeJs: false
222+
installJdk: false
174223
artifacts:
175224
- name: MacOS_x64_Packages
176225
path: artifacts/packages/
@@ -188,11 +237,16 @@ jobs:
188237
# Build Linux x64
189238
- template: jobs/default-build.yml
190239
parameters:
240+
dependsOn:
241+
- WebJS_build
191242
jobName: Linux_x64_build
192243
jobDisplayName: "Build: Linux x64"
193244
agentOs: Linux
194-
installNodeJs: false
195245
steps:
246+
- task: DownloadPipelineArtifact@2
247+
inputs:
248+
artifact: WebJS_Javascript
249+
path: $(Build.SourcesDirectory)/src/Components/Web.JS/dist/
196250
- script: ./build.sh
197251
--ci
198252
--arch x64
@@ -211,6 +265,7 @@ jobs:
211265
--arch x64 \
212266
--build-installers \
213267
--no-build-deps \
268+
--no-build-nodejs \
214269
-p:OnlyPackPlatformSpecificPackages=true \
215270
-p:BuildRuntimeArchive=false \
216271
-p:LinuxInstallerType=deb \
@@ -224,12 +279,15 @@ jobs:
224279
--arch x64 \
225280
--build-installers \
226281
--no-build-deps \
282+
--no-build-nodejs \
227283
-p:OnlyPackPlatformSpecificPackages=true \
228284
-p:BuildRuntimeArchive=false \
229285
-p:LinuxInstallerType=rpm \
230286
-bl:artifacts/log/build.rpm.binlog \
231287
$(_BuildArgs)
232288
displayName: Build RPM installers
289+
installNodeJs: false
290+
installJdk: false
233291
artifacts:
234292
- name: Linux_x64_Packages
235293
path: artifacts/packages/
@@ -247,9 +305,16 @@ jobs:
247305
# Build Linux ARM
248306
- template: jobs/default-build.yml
249307
parameters:
308+
dependsOn:
309+
- WebJS_build
250310
jobName: Linux_arm_build
251311
jobDisplayName: "Build: Linux ARM"
252312
agentOs: Linux
313+
beforeBuild:
314+
- task: DownloadPipelineArtifact@2
315+
inputs:
316+
artifact: WebJS_Javascript
317+
path: $(Build.SourcesDirectory)/src/Components/Web.JS/dist/
253318
buildArgs:
254319
--arch arm
255320
--pack
@@ -260,6 +325,7 @@ jobs:
260325
-bl:artifacts/log/build.linux-arm.binlog
261326
$(_BuildArgs)
262327
installNodeJs: false
328+
installJdk: false
263329
artifacts:
264330
- name: Linux_arm_Packages
265331
path: artifacts/packages/
@@ -277,9 +343,16 @@ jobs:
277343
# Build Linux ARM64
278344
- template: jobs/default-build.yml
279345
parameters:
346+
dependsOn:
347+
- WebJS_build
280348
jobName: Linux_arm64_build
281349
jobDisplayName: "Build: Linux ARM64"
282350
agentOs: Linux
351+
beforeBuild:
352+
- task: DownloadPipelineArtifact@2
353+
inputs:
354+
artifact: WebJS_Javascript
355+
path: $(Build.SourcesDirectory)/src/Components/Web.JS/dist/
283356
buildArgs:
284357
--arch arm64
285358
--all
@@ -290,6 +363,7 @@ jobs:
290363
-bl:artifacts/log/build.arm64.binlog
291364
$(_BuildArgs)
292365
installNodeJs: false
366+
installJdk: false
293367
artifacts:
294368
- name: Linux_arm64_Packages
295369
path: artifacts/packages/
@@ -307,9 +381,16 @@ jobs:
307381
# Build Linux Musl x64
308382
- template: jobs/default-build.yml
309383
parameters:
384+
dependsOn:
385+
- WebJS_build
310386
jobName: Linux_musl_x64_build
311387
jobDisplayName: "Build: Linux Musl x64"
312388
agentOs: Linux
389+
beforeBuild:
390+
- task: DownloadPipelineArtifact@2
391+
inputs:
392+
artifact: WebJS_Javascript
393+
path: $(Build.SourcesDirectory)/src/Components/Web.JS/dist/
313394
buildScript: ./dockerbuild.sh alpine
314395
buildArgs:
315396
--ci
@@ -323,6 +404,7 @@ jobs:
323404
-bl:artifacts/log/build.musl.binlog
324405
$(_BuildArgs)
325406
installNodeJs: false
407+
installJdk: false
326408
artifacts:
327409
- name: Linux_musl_x64_Packages
328410
path: artifacts/packages/
@@ -337,12 +419,19 @@ jobs:
337419
parameters:
338420
inputName: Linux_musl_x64
339421

340-
# Build Linux Musl arm64
422+
# Build Linux Musl ARM64
341423
- template: jobs/default-build.yml
342424
parameters:
425+
dependsOn:
426+
- WebJS_build
343427
jobName: Linux_musl_arm64_build
344428
jobDisplayName: "Build: Linux Musl ARM64"
345429
agentOs: Linux
430+
beforeBuild:
431+
- task: DownloadPipelineArtifact@2
432+
inputs:
433+
artifact: WebJS_Javascript
434+
path: $(Build.SourcesDirectory)/src/Components/Web.JS/dist/
346435
buildScript: ./dockerbuild.sh ubuntu-alpine37
347436
buildArgs:
348437
--ci
@@ -356,6 +445,7 @@ jobs:
356445
-bl:artifacts/log/build.musl.binlog
357446
$(_BuildArgs)
358447
installNodeJs: false
448+
installJdk: false
359449
artifacts:
360450
- name: Linux_musl_arm64_Packages
361451
path: artifacts/packages/
@@ -373,6 +463,8 @@ jobs:
373463
# Test jobs
374464
- template: jobs/default-build.yml
375465
parameters:
466+
dependsOn:
467+
- WebJS_build
376468
condition: ne(variables['SkipTests'], 'true')
377469
jobName: Windows_Test
378470
jobDisplayName: "Test: Windows Server 2016 x64"
@@ -382,6 +474,10 @@ jobs:
382474
beforeBuild:
383475
- powershell: "& ./src/Servers/IIS/tools/UpdateIISExpressCertificate.ps1; & ./src/Servers/IIS/tools/update_schema.ps1"
384476
displayName: Setup IISExpress test certificates and schema
477+
- task: DownloadPipelineArtifact@2
478+
inputs:
479+
artifact: WebJS_Javascript
480+
path: $(Build.SourcesDirectory)/src/Components/Web.JS/dist/
385481
afterBuild:
386482
- powershell: "& ./build.ps1 -CI -NoBuild -Test /p:RunFlakyTests=true"
387483
displayName: Run Flaky Tests
@@ -396,12 +492,18 @@ jobs:
396492

397493
- template: jobs/default-build.yml
398494
parameters:
495+
dependsOn:
496+
- WebJS_build
399497
condition: ne(variables['SkipTests'], 'true')
400498
jobName: Windows_Templates_Test
401499
jobDisplayName: "Test: Templates - Windows Server 2016 x64"
402500
agentOs: Windows
403501
isTestingJob: true
404502
steps:
503+
- task: DownloadPipelineArtifact@2
504+
inputs:
505+
artifact: WebJS_Javascript
506+
path: $(Build.SourcesDirectory)/src/Components/Web.JS/dist/
405507
- script: ./build.cmd -ci -all -pack
406508
displayName: Build Repo
407509
- script: ./src/ProjectTemplates/build.cmd -ci -pack -NoRestore -NoBuilddeps "/p:RunTemplateTests=true /bl:artifacts/log/template.pack.binlog"
@@ -418,6 +520,8 @@ jobs:
418520

419521
- template: jobs/default-build.yml
420522
parameters:
523+
dependsOn:
524+
- WebJS_build
421525
condition: ne(variables['SkipTests'], 'true')
422526
jobName: MacOs_Test
423527
jobDisplayName: "Test: macOS 10.13"
@@ -427,6 +531,10 @@ jobs:
427531
beforeBuild:
428532
- bash: "./eng/scripts/install-nginx-mac.sh"
429533
displayName: Installing Nginx
534+
- task: DownloadPipelineArtifact@2
535+
inputs:
536+
artifact: WebJS_Javascript
537+
path: $(Build.SourcesDirectory)/src/Components/Web.JS/dist/
430538
afterBuild:
431539
- bash: ./build.sh --ci --pack --no-build --no-restore --no-build-deps "/bl:artifacts/log/packages.pack.binlog"
432540
displayName: Pack Packages (for Template tests)
@@ -445,6 +553,8 @@ jobs:
445553

446554
- template: jobs/default-build.yml
447555
parameters:
556+
dependsOn:
557+
- WebJS_build
448558
condition: ne(variables['SkipTests'], 'true')
449559
jobName: Linux_Test
450560
jobDisplayName: "Test: Ubuntu 16.04 x64"
@@ -456,6 +566,10 @@ jobs:
456566
displayName: Installing Nginx
457567
- bash: "echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p"
458568
displayName: Increase inotify limit
569+
- task: DownloadPipelineArtifact@2
570+
inputs:
571+
artifact: WebJS_Javascript
572+
path: $(Build.SourcesDirectory)/src/Components/Web.JS/dist/
459573
afterBuild:
460574
- bash: ./build.sh --ci --pack --no-build --no-restore --no-build-deps "/bl:artifacts/log/packages.pack.binlog"
461575
displayName: Pack Packages (for Template tests)
@@ -489,6 +603,10 @@ jobs:
489603
chmod +x $HOME/bin/jq
490604
echo "##vso[task.prependpath]$HOME/bin"
491605
displayName: Install jq
606+
- task: NodeTool@0
607+
displayName: Install Node 10.x
608+
inputs:
609+
versionSpec: 10.x
492610
- task: UseDotNet@2
493611
displayName: 'Use .NET Core sdk'
494612
inputs:

.azure/pipelines/helix-test.yml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,11 +36,10 @@ jobs:
3636
steps:
3737
- script: ./restore.sh -ci
3838
displayName: Restore
39-
- script: ./build.sh -ci --arch arm64 -test --no-build-nodejs -projects $(Build.SourcesDirectory)/eng/helix/helix.proj /p:IsHelixJob=true /p:BuildAllProjects=true /p:BuildNative=true -bl
39+
- script: ./build.sh -ci --arch arm64 -test -projects $(Build.SourcesDirectory)/eng/helix/helix.proj /p:IsHelixJob=true /p:BuildAllProjects=true /p:BuildNative=true -bl
4040
displayName: Run build.sh helix arm64 target
4141
env:
4242
SYSTEM_ACCESSTOKEN: $(System.AccessToken) # We need to set this env var to publish helix results to Azure Dev Ops
43-
installNodeJs: false
4443
artifacts:
4544
- name: Helix_arm64_logs
4645
path: artifacts/logs/

build.ps1

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -183,14 +183,18 @@ elseif ($Projects) {
183183
}
184184
# When adding new sub-group build flags, add them to this check.
185185
elseif((-not $BuildNative) -and (-not $BuildManaged) -and (-not $BuildNodeJS) -and (-not $BuildInstallers) -and (-not $BuildJava)) {
186-
Write-Warning "No default group of projects was specified, so building the 'managed' subsets of projects. Run ``build.cmd -help`` for more details."
186+
Write-Warning "No default group of projects was specified, so building the 'managed' and its dependent subsets of projects. Run ``build.cmd -help`` for more details."
187187

188188
# This goal of this is to pick a sensible default for `build.cmd` with zero arguments.
189189
# Now that we support subfolder invokations of build.cmd, we will be pushing to have build.cmd build everything (-all) by default
190190

191191
$BuildManaged = $true
192192
}
193193

194+
if ($BuildManaged -and ($NoBuildNodeJS)) {
195+
Write-Warning "Some managed projects that depend on NodeJS projects will be skipped since building NodeJS is disabled."
196+
}
197+
194198
if ($BuildInstallers) { $MSBuildArguments += "/p:BuildInstallers=true" }
195199
if ($BuildManaged) { $MSBuildArguments += "/p:BuildManaged=true" }
196200
if ($BuildNative) { $MSBuildArguments += "/p:BuildNative=true" }

build.sh

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -213,14 +213,18 @@ elif [ ! -z "$build_projects" ]; then
213213
elif [ -z "$build_managed" ] && [ -z "$build_nodejs" ] && [ -z "$build_java" ] && [ -z "$build_native" ] && [ -z "$build_installers" ]; then
214214
# This goal of this is to pick a sensible default for `build.sh` with zero arguments.
215215
# We believe the most common thing our contributors will work on is C#, so if no other build group was picked, build the C# projects.
216-
__warn "No default group of projects was specified, so building the 'managed' subset of projects. Run ``build.sh --help`` for more details."
216+
__warn "No default group of projects was specified, so building the 'managed' and its dependent subset of projects. Run ``build.sh --help`` for more details."
217217
build_managed=true
218218
fi
219219

220220
if [ "$build_deps" = false ]; then
221221
msbuild_args[${#msbuild_args[*]}]="-p:BuildProjectReferences=false"
222222
fi
223223

224+
if [ "$build_nodejs" = false ] && [ "$build_managed" = true ]; then
225+
__warn "Some managed projects that depend on NodeJS projects will be skipped since building NodeJS is disabled."
226+
fi
227+
224228
# Only set these MSBuild properties if they were explicitly set by build parameters.
225229
[ ! -z "$build_java" ] && msbuild_args[${#msbuild_args[*]}]="-p:BuildJava=$build_java"
226230
[ ! -z "$build_native" ] && msbuild_args[${#msbuild_args[*]}]="-p:BuildNative=$build_native"

0 commit comments

Comments
 (0)