Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions eng/Subsets.props
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,7 @@
<DefaultMonoSubsets Condition="'$(MonoCrossAOTTargetOS)' != ''">$(DefaultMonoSubsets)mono.aotcross+</DefaultMonoSubsets>
<DefaultMonoSubsets>$(DefaultMonoSubsets)mono.runtime+mono.corelib+mono.packages+</DefaultMonoSubsets>
<DefaultMonoSubsets Condition="'$(TargetsMobile)' == 'true' or '$(ForceBuildMobileManifests)' == 'true'">$(DefaultMonoSubsets)mono.manifests+</DefaultMonoSubsets>
<DefaultMonoSubsets Condition="$(_subset.Contains('+mono.wasmworkload+'))">$(DefaultMonoSubsets)mono.manifests+</DefaultMonoSubsets>
<DefaultMonoSubsets Condition="'$(PrimaryRuntimeFlavor)' != 'Mono'">$(DefaultMonoSubsets)mono.tools+</DefaultMonoSubsets>
<DefaultMonoSubsets Condition="'$(TargetsMobile)' != 'true'">$(DefaultMonoSubsets)host.native+</DefaultMonoSubsets>

Expand Down Expand Up @@ -153,6 +154,7 @@
<SubsetName Include="Mono.Tools" Description="Tooling that helps support Mono development and testing." />
<SubsetName Include="Mono.WasmRuntime" Description="The Emscripten runtime." />
<SubsetName Include="Mono.WasiRuntime" Description="The WASI runtime." />
<SubsetName Include="Mono.WasmWorkload" Description="*Helper* subset for building some pre-requisites for wasm workload testing, useful on CI." />
<SubsetName Include="Mono.MsCorDbi" Description="The implementation of ICorDebug interface." />
<SubsetName Include="Mono.Workloads" OnDemand="true" Description="Builds the installers and the insertion metadata for Blazor workloads." />

Expand Down Expand Up @@ -424,6 +426,10 @@
<ProjectToBuild Include="$(WorkloadsProjectRoot)\workloads.csproj" Category="mono" />
</ItemGroup>

<ItemGroup Condition="$(_subset.Contains('+mono.wasmworkload+'))">
<ProjectToBuild Include="$(MonoProjectRoot)\wasm\workloads.proj" Category="mono" />
</ItemGroup>

<!-- Host sets -->
<ItemGroup Condition="$(_subset.Contains('+host.native+'))">
<CorehostProjectToBuild Include="$(SharedNativeRoot)corehost\corehost.proj" SignPhase="Binaries" />
Expand Down
5 changes: 5 additions & 0 deletions eng/pipelines/common/global-build-job.yml
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ parameters:
extraStepsParameters: {}
extraVariablesTemplates: []
isManualCodeQLBuild: false
preBuildSteps: []

jobs:
- template: /eng/common/templates/job/job.yml
Expand Down Expand Up @@ -183,6 +184,10 @@ jobs:
inputs:
filePath: $(Build.SourcesDirectory)/eng/pipelines/mono/update-machine-certs.ps1

- ${{ if ne(parameters.preBuildSteps,'') }}:
- ${{ each preBuildStep in parameters.preBuildSteps }}:
- ${{ preBuildStep }}

# Build
- ${{ if eq(parameters.isSourceBuild, false) }}:
- ${{ if eq(parameters.isManualCodeQLBuild, true) }}:
Expand Down
126 changes: 126 additions & 0 deletions eng/pipelines/common/templates/browser-wasm-build-tests.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,126 @@
# Depends on other builds to get runtime packs, and nugets
# And then runs Wasm.Build.Tests
parameters:
alwaysRun: false
isExtraPlatformsBuild: false
isWasmOnlyBuild: false
platforms: []
shouldContinueOnError: false
extraBuildArgs: ''

jobs:

- ${{ each platform in parameters.platforms }}:
- template: /eng/pipelines/common/platform-matrix.yml
parameters:
jobTemplate: /eng/pipelines/common/global-build-job.yml
helixQueuesTemplate: /eng/pipelines/libraries/helix-queues-setup.yml
buildConfig: Release
runtimeFlavor: mono
platforms:
- ${{ platform }}
shouldContinueOnError: ${{ parameters.shouldContinueOnError }}
variables:
# map dependencies variables to local variables
- name: alwaysRunVar
value: ${{ parameters.alwaysRun }}
- name: workloadsTestPreviousVersionsVar
value: $[
or(
eq(variables['Build.SourceBranchName'], 'main'),
eq(variables['System.PullRequest.TargetBranch'], 'main'))
]
- name: wbtProjectArg
${{ if eq(platform, 'browser_wasm_win') }}:
value: '-projects'
${{ else }}:
value: '--projects'
- name: shouldRunOnDefaultPipelines
value: $(shouldRunWasmBuildTestsOnDefaultPipeline)

jobParameters:
dependsOn:
- ${{ if eq(platform, 'browser_wasm') }}:
- build_browser_wasm_linux_Release_MultiThreaded_BuildOnly
- build_browser_wasm_linux_Release_SingleThreaded_BuildOnly
- ${{ if eq(platform, 'browser_wasm_win') }}:
- build_browser_wasm_windows_Release_MultiThreaded_BuildOnly
- build_browser_wasm_windows_Release_SingleThreaded_BuildOnly
isExtraPlatforms: ${{ parameters.isExtraPlatformsBuild }}
testGroup: innerloop
nameSuffix: WasmBuildTests

preBuildSteps:
# Download single threaded runtime packs, and tasks needed to build WBT
- task: DownloadBuildArtifacts@0
displayName: Download built nugets for singlethreaded runtime
inputs:
buildType: current
artifactName: 'BuildArtifacts_browser_wasm_$(_hostedOs)_Release_SingleThreaded_BuildOnly'
downloadType: single
downloadPath: '$(Build.SourcesDirectory)/artifacts'

- task: CopyFiles@2
displayName: Copy single threaded assets
inputs:
SourceFolder: '$(Build.SourcesDirectory)/artifacts/BuildArtifacts_browser_wasm_$(_hostedOs)_Release_SingleThreaded_BuildOnly'
TargetFolder: '$(Build.SourcesDirectory)/artifacts'
CleanTargetFolder: false

# Download for multi-threaded
- task: DownloadBuildArtifacts@0
displayName: Download built nugets for multi-threaded runtime
inputs:
buildType: current
artifactName: BuildArtifacts_browser_wasm_$(_hostedOs)_Release_MultiThreaded_BuildOnly
downloadType: single
downloadPath: '$(Build.SourcesDirectory)/artifacts'

- task: CopyFiles@2
displayName: Copy multithreading runtime pack
inputs:
SourceFolder: '$(Build.SourcesDirectory)/artifacts/BuildArtifacts_browser_wasm_$(_hostedOs)_Release_MultiThreaded_BuildOnly'
Contents: packages/$(_BuildConfig)/Shipping/Microsoft.NETCore.App.Runtime.Mono.multithread.*
TargetFolder: '$(Build.SourcesDirectory)/artifacts'
CleanTargetFolder: false

# Download WBT
- task: DownloadBuildArtifacts@0
displayName: Download Wasm.Build.Tests
inputs:
buildType: current
artifactName: WasmBuildTests_$(_hostedOs)_SingleThreaded_BuildOnly
downloadType: single
downloadPath: '$(Build.SourcesDirectory)/artifacts'

- task: CopyFiles@2
displayName: Copy Wasm.Build.Tests archive
inputs:
SourceFolder: '$(Build.SourcesDirectory)/artifacts/WasmBuildTests_$(_hostedOs)_SingleThreaded_BuildOnly'
Contents: helix/**
TargetFolder: '$(Build.SourcesDirectory)/artifacts'
CleanTargetFolder: false

# build WBT
buildArgs: >-
$(wbtProjectArg) $(Build.SourcesDirectory)/src/mono/wasm/Wasm.Build.Tests/Wasm.Build.Tests.csproj
/bl:$(Build.SourcesDirectory)/artifacts/log/$(_BuildConfig)/Build.binlog
/p:Configuration=$(_BuildConfig)
/p:TestUsingWorkloads=true
/p:InstallWorkloadForTesting=true
/p:WasmSkipMissingRuntimePackBuild=true
/p:PreparePackagesForWorkloadInstall=false
timeoutInMinutes: 120
condition: >-
or(
eq(variables['alwaysRunVar'], true),
eq(variables['isDefaultPipeline'], variables['shouldRunWasmBuildTestsOnDefaultPipeline']))

# extra steps, run tests
extraStepsTemplate: /eng/pipelines/libraries/helix.yml
extraStepsParameters:
creator: dotnet-bot
testRunNamePrefixSuffix: Mono_$(_BuildConfig)_$(_hostedOs)
extraHelixArguments: /p:BrowserHost=$(_hostedOs)
scenarios:
- buildwasmapps
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
# run Wasm.Build.Tests with a single threading runtime
parameters:
alwaysRun: false
isExtraPlatformsBuild: false
Expand All @@ -9,7 +10,7 @@ parameters:
jobs:

#
# Build the whole product using Mono and run libraries tests, for Wasm.Build.Tests
# Build the whole product using Mono and run Wasm.Build.Tests
#
- template: /eng/pipelines/common/platform-matrix.yml
parameters:
Expand All @@ -29,13 +30,6 @@ jobs:
eq(variables['Build.SourceBranchName'], 'main'),
eq(variables['System.PullRequest.TargetBranch'], 'main'))
]
- name: shouldRunOnDefaultPipelines
value: $[
or(
eq(variables['wasmDarcDependenciesChanged'], true),
eq(dependencies.evaluate_paths.outputs['SetPathVars_tools_illink.containsChange'], true),
eq(dependencies.evaluate_paths.outputs['SetPathVars_wasmbuildtests.containsChange'], true))
]
jobParameters:
isExtraPlatforms: ${{ parameters.isExtraPlatformsBuild }}
testGroup: innerloop
Expand All @@ -45,7 +39,7 @@ jobs:
condition: >-
or(
eq(variables['alwaysRunVar'], true),
eq(variables['isDefaultPipeline'], variables['shouldRunOnDefaultPipelines']))
eq(variables['isDefaultPipeline'], variables['shouldRunWasmBuildTestsOnDefaultPipeline']))
# extra steps, run tests
extraStepsTemplate: /eng/pipelines/libraries/helix.yml
extraStepsParameters:
Expand Down
46 changes: 22 additions & 24 deletions eng/pipelines/common/templates/wasm-build-only.yml
Original file line number Diff line number Diff line change
@@ -1,46 +1,44 @@
parameters:
alwaysRun: false
condition: false
extraBuildArgs: ''
isExtraPlatformsBuild: false
nameSuffix: ''
platforms: []
publishArtifactsForWorkload: false
publishWBT: false

jobs:

#
# Build for Browser/wasm and test it
# Build for Browser/wasm
#
- template: /eng/pipelines/common/platform-matrix.yml
parameters:
jobTemplate: /eng/pipelines/common/global-build-job.yml
helixQueuesTemplate: /eng/pipelines/libraries/helix-queues-setup.yml
buildConfig: Release
runtimeFlavor: mono
platforms: ${{ parameters.platforms }}
variables:
# map dependencies variables to local variables
- name: alwaysRunVar
value: ${{ parameters.alwaysRun }}
- name: shouldRunOnDefaultPipelines
value: $[
or(
eq(variables['wasmDarcDependenciesChanged'], true),
eq(dependencies.evaluate_paths.outputs['SetPathVars_tools_illink.containsChange'], true),
eq(dependencies.evaluate_paths.outputs['SetPathVars_libraries.containsChange'], true),
eq(dependencies.evaluate_paths.outputs['SetPathVars_wasm_specific_except_wbt_dbg.containsChange'], true))
]
- name: workloadSubsetArg
${{ if eq(parameters.publishArtifactsForWorkload, true) }}:
value: '+mono.wasmworkload'
${{ else }}:
value: ''
- name: extraBuildArgs
${{ if eq(parameters.publishWBT, true) }}:
value: /p:TestWasmBuildTests=true /p:ArchiveTests=true /p:InstallWorkloadForTesting=false
${{ else }}:
value: ''

jobParameters:
isExtraPlatforms: ${{ parameters.isExtraPlatformsBuild }}
testGroup: innerloop
nameSuffix: ${{ parameters.nameSuffix }}_BuildOnly
buildArgs: -s mono+libs+host -c $(_BuildConfig) /p:ArchiveTests=true /p:BrowserHost=$(_hostedOs) ${{ parameters.extraBuildArgs }}
timeoutInMinutes: 240
# if !alwaysRun, then:
# if this is runtime-wasm (isWasmOnlyBuild):
# - then run only if it would not have run on default pipelines (based
# on path changes)
# - else run based on path changes
condition: >-
or(
eq(variables['alwaysRunVar'], true),
eq(variables['isDefaultPipeline'], variables['shouldRunOnDefaultPipelines']))
buildArgs: -s mono+libs+packs+libs.tests$(workloadSubsetArg) -c $(_BuildConfig) /p:BrowserHost=$(_hostedOs) ${{ parameters.extraBuildArgs }} /p:TestAssemblies=false $(extraBuildArgs)
timeoutInMinutes: 120
condition: ${{ parameters.condition }}
extraStepsTemplate: /eng/pipelines/common/wasm-post-build-steps.yml
extraStepsParameters:
publishArtifactsForWorkload: ${{ parameters.publishArtifactsForWorkload }}
publishWBT: ${{ parameters.publishWBT }}
50 changes: 50 additions & 0 deletions eng/pipelines/common/wasm-post-build-steps.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
parameters:
nameSuffix: ''
buildConfig: ''
hostedOs: ''
osGroup: ''
publishArtifactsForWorkload: always()
publishWBT: always()

steps:

- task: CopyFiles@2
displayName: Copy artifacts needed for running WBT
condition: and(succeeded(), ${{ parameters.publishArtifactsForWorkload }})
inputs:
SourceFolder: '$(Build.SourcesDirectory)/artifacts'
Contents: |
packages/$(_BuildConfig)/Shipping/**
packages/$(_BuildConfig)/NonShipping/**
bin/WasmAppBuilder/**/*
bin/WasmBuildTasks/**
bin/WorkloadBuildTasks/**
bin/installer.tasks/**
bin/Crossgen2Tasks/**
TargetFolder: '$(Build.StagingDirectory)/IntermediateArtifacts'
CleanTargetFolder: true

- task: PublishBuildArtifacts@1
displayName: Publish intermediate artifacts
condition: and(succeeded(), ${{ parameters.publishArtifactsForWorkload }})
inputs:
pathToPublish: '$(Build.StagingDirectory)/IntermediateArtifacts'
artifactName: BuildArtifacts_${{ parameters.osGroup }}_wasm_$(_hostedOs)_${{ parameters.buildConfig }}_${{ parameters.nameSuffix }}
artifactType: container

- task: CopyFiles@2
displayName: Copy WBT
condition: and(succeeded(), ${{ parameters.publishWBT }})
inputs:
SourceFolder: '$(Build.SourcesDirectory)/artifacts'
Contents: helix/buildwasmapps/**
TargetFolder: '$(Build.StagingDirectory)/IntermediateArtifacts'
CleanTargetFolder: true

- task: PublishBuildArtifacts@1
displayName: Publish Wasm.Build.Tests archive
condition: and(succeeded(), ${{ parameters.publishWBT }})
inputs:
pathToPublish: '$(Build.StagingDirectory)/IntermediateArtifacts'
artifactName: WasmBuildTests_$(_hostedOs)_${{ parameters.nameSuffix }}
artifactType: container
18 changes: 16 additions & 2 deletions eng/pipelines/common/xplat-setup.yml
Original file line number Diff line number Diff line change
Expand Up @@ -105,8 +105,8 @@ jobs:
${{ if eq(parameters.jobParameters.runtimeFlavor, 'coreclr') }}:
value: CoreCLR

- name: wasmDarcDependenciesChanged
${{ if eq(parameters.archType, 'wasm') }}:
- ${{ if eq(parameters.archType, 'wasm') }}:
- name: wasmDarcDependenciesChanged
value: $[ or(
eq(dependencies.evaluate_paths.outputs['DarcDependenciesChanged.Microsoft_NET_Workload_Emscripten_Current_Manifest-8_0_100_Transport'], true),
eq(dependencies.evaluate_paths.outputs['DarcDependenciesChanged.Microsoft_DotNet_Build_Tasks_Workloads'], true),
Expand All @@ -118,6 +118,20 @@ jobs:
eq(dependencies.evaluate_paths.outputs['DarcDependenciesChanged.Microsoft_CodeAnalysis_NetAnalyzers'], true),
eq(dependencies.evaluate_paths.outputs['DarcDependenciesChanged.Microsoft_NET_ILLink_Tasks'], true)) ]

- name: shouldRunWasmBuildTestsOnDefaultPipeline
value: $[
or(
eq(variables['wasmDarcDependenciesChanged'], true),
eq(dependencies.evaluate_paths.outputs['SetPathVars_tools_illink.containsChange'], true),
eq(dependencies.evaluate_paths.outputs['SetPathVars_wasmbuildtests.containsChange'], true))
]

# needed for Wasm.Build.Tests
- name: wasmSingleThreadedBuildOnlyNeededOnDefaultPipeline
value: $[ variables['shouldRunWasmBuildTestsOnDefaultPipeline'] ]
- name: wasmMultiThreadedBuildOnlyNeededOnDefaultPipeline
value: $[ variables['shouldRunWasmBuildTestsOnDefaultPipeline'] ]

- ${{ each variable in parameters.variables }}:
- ${{ variable }}

Expand Down
Loading