diff --git a/.vsts-dotnet-ci.yml b/.vsts-dotnet-ci.yml index b1c9c1be38f..a064804e5c3 100644 --- a/.vsts-dotnet-ci.yml +++ b/.vsts-dotnet-ci.yml @@ -245,6 +245,36 @@ jobs: continueOnError: true condition: eq(variables.onlyDocChanged, 0) +- job: BootstrapMSBuildWithMTMode + displayName: "Linux Core Multithreaded Mode" + pool: + vmImage: 'ubuntu-latest' + timeoutInMinutes: 120 + steps: + - template: azure-pipelines/check-documentation-only-change.yml + - ${{ if eq(variables['System.TeamProject'], 'DevDiv') }}: + - task: Bash@3 + displayName: Setup Private Feeds Credentials + inputs: + filePath: $(Build.SourcesDirectory)/eng/common/SetupNugetSources.sh + arguments: $(Build.SourcesDirectory)/NuGet.config $Token + env: + Token: $(dn-bot-dnceng-artifact-feeds-rw) + - bash: sudo apt-get update + - bash: sudo apt-get install -y libxml2 + - bash: . 'eng/cibuild_bootstrapped_msbuild.sh' --onlyDocChanged $(onlyDocChanged) --skipTests --stage2Properties '/mt' + displayName: 'Build with bootstrapped MSBuild and -mt mode' + condition: eq(variables.onlyDocChanged, 0) + env: + MSBUILDUSESERVER: "1" + - task: PublishBuildArtifacts@1 + displayName: 'Publish Artifact: logs' + inputs: + PathtoPublish: 'artifacts/log/Debug' + ArtifactName: 'MTModeOnLinux build logs' + continueOnError: true + condition: always() + - job: FullReleaseOnWindows displayName: "Windows Full Release (no bootstrap)" variables: diff --git a/eng/cibuild_bootstrapped_msbuild.sh b/eng/cibuild_bootstrapped_msbuild.sh index 2762288f4df..10c1f8af56f 100755 --- a/eng/cibuild_bootstrapped_msbuild.sh +++ b/eng/cibuild_bootstrapped_msbuild.sh @@ -4,8 +4,10 @@ configuration="Debug" host_type="core" build_stage1=true onlyDocChanged=0 +skipTests=false properties= extra_properties= +stage2Properties= SOURCE="${BASH_SOURCE[0]}" while [ -h "$SOURCE" ]; do # resolve $SOURCE until the file is no longer a symlink @@ -34,6 +36,14 @@ while [[ $# -gt 0 ]]; do onlyDocChanged=$2 shift 2 ;; + --skiptests) + skipTests=true + shift 1 + ;; + --stage2properties) + stage2Properties=$2 + shift 2 + ;; *) properties="$properties $1" shift 1 @@ -88,10 +98,15 @@ export DOTNET_HOST_PATH="$_InitializeDotNetCli/dotnet" # When using bootstrapped MSBuild: # - Turn off node reuse (so that bootstrapped MSBuild processes don't stay running and lock files) # - Create bootstrap environment as it's required when also running tests +# - stage2Properties are passed to all Stage 2 builds since some MSBuild switches (like /mt) may not work with the SDK MSBuild used in Stage 1 if [ $onlyDocChanged = 0 ] then - . "$ScriptRoot/common/build.sh" --restore --build --test --ci --nodereuse false --configuration $configuration $properties $extra_properties - + if [ "$skipTests" = true ] + then + . "$ScriptRoot/common/build.sh" --restore --build --ci --nodereuse false --configuration $configuration $properties $extra_properties $stage2Properties + else + . "$ScriptRoot/common/build.sh" --restore --build --test --ci --nodereuse false --configuration $configuration $properties $extra_properties $stage2Properties + fi else - . "$ScriptRoot/common/build.sh" --restore --build --ci --nodereuse false --configuration $configuration /p:CreateBootstrap=false $properties $extra_properties + . "$ScriptRoot/common/build.sh" --restore --build --ci --nodereuse false --configuration $configuration /p:CreateBootstrap=false $properties $extra_properties $stage2Properties fi