From 68b54eef9e39a9e1a8c5f091d9f1a35ded2d852f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Matou=C5=A1ek?= Date: Wed, 6 Feb 2019 16:03:28 -0800 Subject: [PATCH] Use Arcade VS IBC training infrastructure (#33133) --- .gitignore | 1 - azure-pipelines-official.yml | 32 ++-- eng/Tools.props | 25 --- eng/Versions.props | 3 +- eng/build-utils.ps1 | 3 - eng/build.ps1 | 123 +++----------- eng/common/PublishBuildAssets.cmd | 3 - eng/common/PublishToPackageFeed.proj | 25 ++- eng/common/build.ps1 | 6 +- eng/common/darc-init.ps1 | 2 +- eng/common/internal/Directory.Build.props | 4 + eng/common/internal/Directory.Build.targets | 3 + .../internal/Tools.csproj} | 6 +- eng/common/sdk-task.ps1 | 79 +++++++++ .../templates/job/publish-build-assets.yml | 13 +- .../templates/phases/publish-build-assets.yml | 2 +- eng/common/templates/steps/send-to-helix.yml | 4 +- eng/common/templates/steps/telemetry-end.yml | 87 +++++++--- .../templates/steps/telemetry-start.yml | 160 ++++++++++++++---- eng/common/tools.ps1 | 7 +- eng/generate-optprof-run-settings.ps1 | 31 ---- eng/internal/Directory.Build.props | 4 - eng/internal/Directory.Build.targets | 3 - eng/publish-assets.ps1 | 12 -- eng/test-build-correctness.ps1 | 2 +- global.json | 2 +- 26 files changed, 354 insertions(+), 288 deletions(-) delete mode 100644 eng/Tools.props delete mode 100644 eng/common/PublishBuildAssets.cmd create mode 100644 eng/common/internal/Directory.Build.props create mode 100644 eng/common/internal/Directory.Build.targets rename eng/{internal/Toolset.csproj => common/internal/Tools.csproj} (67%) create mode 100644 eng/common/sdk-task.ps1 delete mode 100644 eng/generate-optprof-run-settings.ps1 delete mode 100644 eng/internal/Directory.Build.props delete mode 100644 eng/internal/Directory.Build.targets diff --git a/.gitignore b/.gitignore index 6dda3ba5a62..f0f17423237 100644 --- a/.gitignore +++ b/.gitignore @@ -19,7 +19,6 @@ x64/ .dotnet/ .tools/ .packages/ -.o/ # Enable "build/" folder in the NuGet Packages folder since NuGet packages use it for MSBuild targets !packages/*/build/ diff --git a/azure-pipelines-official.yml b/azure-pipelines-official.yml index e303ee39a20..db4ec0698cf 100644 --- a/azure-pipelines-official.yml +++ b/azure-pipelines-official.yml @@ -26,22 +26,16 @@ jobs: steps: - task: NuGetToolInstaller@0 inputs: - versionSpec: '4.9.2' - - - task: NuGetCommand@2 - displayName: 'Clear NuGet caches' - inputs: - command: custom - arguments: 'locals all -clear' + versionSpec: '4.9.2' - task: NuGetCommand@2 displayName: Restore internal tools inputs: command: restore feedsToUse: config - restoreSolution: 'eng\internal\Toolset.csproj' + restoreSolution: 'eng\common\internal\Tools.csproj' nugetConfigPath: 'NuGet.config' - restoreDirectory: '$(UserProfile)\.nuget\packages' + restoreDirectory: '$(Build.SourcesDirectory)\.packages' - task: ms-vseng.MicroBuildTasks.30666190-6959-11e5-9f96-f56098202fef.MicroBuildSigningPlugin@1 inputs: @@ -65,8 +59,10 @@ jobs: -officialBuildId $(Build.BuildNumber) -officialSkipTests $(SkipTests) -officialSkipApplyOptimizationData $(SkipApplyOptimizationData) - -vsDropName $(VisualStudio.DropName) - -vsDropAccessToken $(System.AccessToken) + /p:RepositoryName=$(Build.Repository.Name) + /p:VisualStudioIbcSourceBranchName="master-vs-deps" + /p:VisualStudioDropAccessToken=$(System.AccessToken) + /p:VisualStudioDropName=$(VisualStudio.DropName) /p:DotNetSignType=$(SignType) /p:DotNetPublishToBlobFeed=true /p:DotNetPublishBlobFeedKey=$(dotnetfeed-storage-access-key-1) @@ -74,6 +70,8 @@ jobs: /p:PublishToSymbolServer=true /p:DotNetSymbolServerTokenMsdl=$(microsoft-symbol-server-pat) /p:DotNetSymbolServerTokenSymWeb=$(symweb-symbol-server-pat) + /p:IbcOptimizationDataDir=$(Build.SourcesDirectory)\.o\\ + /p:VisualStudioIbcDropId=75e3797e1105a4da4c10dddda76c3b9398f7725a/223453/935479/1 displayName: Build condition: succeeded() @@ -81,7 +79,7 @@ jobs: displayName: Publish Assets inputs: filePath: 'eng\publish-assets.ps1' - arguments: '-configuration $(BuildConfiguration) -branchName "$(Build.SourceBranch)" -mygetApiKey $(Roslyn.MyGetApiKey) -nugetApiKey $(Roslyn.NuGetApiKey) -gitHubUserName $(Roslyn.GitHubUserName) -gitHubToken $(Roslyn.GitHubToken) -gitHubEmail $(Roslyn.GitHubEmail)' + arguments: '-configuration $(BuildConfiguration) -branchName "$(Build.SourceBranchName)" -mygetApiKey $(Roslyn.MyGetApiKey) -nugetApiKey $(Roslyn.NuGetApiKey) -gitHubUserName $(Roslyn.GitHubUserName) -gitHubToken $(Roslyn.GitHubToken) -gitHubEmail $(Roslyn.GitHubEmail)' condition: succeeded() # Publish OptProf configuration files @@ -109,12 +107,12 @@ jobs: # Publish run settings - task: PowerShell@2 inputs: - filePath: eng\generate-optprof-run-settings.ps1 + filePath: eng\common\sdk-task.ps1 arguments: -configuration $(BuildConfiguration) - -vsDropName $(VisualStudio.DropName) - -bootstrapperInfo $(Build.StagingDirectory)\MicroBuild\Output\BootstrapperInfo.json - failOnStderr: true - displayName: 'OptProf - Generate runsettings file' + -task VisualStudio.BuildIbcTrainingSettings + /p:VisualStudioDropName=$(VisualStudio.DropName) + /p:BootstrapperInfoPath=$(Build.StagingDirectory)\MicroBuild\Output\BootstrapperInfo.json + displayName: 'OptProf - Build IBC training settings' condition: succeeded() # Publish bootstrapper info diff --git a/eng/Tools.props b/eng/Tools.props deleted file mode 100644 index 2092d69ad7c..00000000000 --- a/eng/Tools.props +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - $(MSBuildAllProjects);$(MSBuildThisFileFullPath) - - - - - - - - - - - - $(RestoreSources); - https://dotnet.myget.org/F/roslyn/api/v3/index.json; - - - diff --git a/eng/Versions.props b/eng/Versions.props index 6ea26249d27..65ab127a311 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -64,7 +64,6 @@ 1.1.0-beta1-63314-01 1.7.0 1.5.0 - 4.7.2-alpha-00001 3.0.0-preview1-03617-02 2.1.1 2.1.1 @@ -73,6 +72,7 @@ 14.3.25407-alpha 1.0.0-beta1-63011-01 8.0.0.0-alpha + 1.0.0-alpha-004 3.0.0-beta2-19068-12 $(RoslynDiagnosticsNugetPackageVersion) 2.0.0 @@ -280,6 +280,7 @@ true true true + true true true diff --git a/eng/build-utils.ps1 b/eng/build-utils.ps1 index a5c565f8083..f884391a877 100644 --- a/eng/build-utils.ps1 +++ b/eng/build-utils.ps1 @@ -9,9 +9,6 @@ $ErrorActionPreference="Stop" $VSSetupDir = Join-Path $ArtifactsDir "VSSetup\$configuration" $PackagesDir = Join-Path $ArtifactsDir "packages\$configuration" -# Use very short directory name to avoid long path issues (build machines, ibcmerge.exe) -$IbcOptimizationDataDir = Join-Path $RepoRoot ".o" - $binaryLog = if (Test-Path variable:binaryLog) { $binaryLog } else { $false } $nodeReuse = if (Test-Path variable:nodeReuse) { $nodeReuse } else { $false } $bootstrapDir = if (Test-Path variable:bootstrapDir) { $bootstrapDir } else { "" } diff --git a/eng/build.ps1 b/eng/build.ps1 index 1c3f817d6f5..4ec710890fa 100644 --- a/eng/build.ps1 +++ b/eng/build.ps1 @@ -46,8 +46,6 @@ param ( [string]$officialBuildId = "", [string]$officialSkipApplyOptimizationData = "", [string]$officialSkipTests = "", - [string]$vsDropName = "", - [string]$vsDropAccessToken = "", # Test actions [switch]$test32, @@ -97,13 +95,11 @@ function Print-Usage() { Write-Host " -prepareMachine Prepare machine for CI run, clean up processes after build" Write-Host " -useGlobalNuGetCache Use global NuGet cache." Write-Host " -warnAsError Treat all warnings as errors" - Write-Host "" + Write-Host "" Write-Host "Official build settings:" Write-Host " -officialBuildId An official build id, e.g. 20190102.3" Write-Host " -officialSkipTests Pass 'true' to not run tests" Write-Host " -officialSkipApplyOptimizationData Pass 'true' to not apply optimization data" - Write-Host " -vsDropName Visual Studio product drop name" - Write-Host " -vsDropAccessToken Visual Studio drop access token" Write-Host "" Write-Host "Command line arguments starting with '/p:' are passed through to MSBuild." } @@ -120,12 +116,12 @@ function Process-Arguments() { if ((Get-Variable $argName -Scope Script).Value) { if (!$officialBuildId) { Write-Host "$argName can only be specified for official builds" - exit 1 + exit 1 } } else { if ($officialBuildId) { Write-Host "$argName must be specified in official builds" - exit 1 + exit 1 } } } @@ -135,21 +131,22 @@ function Process-Arguments() { exit 0 } - OfficialBuildOnly "vsDropName" - OfficialBuildOnly "vsDropAccessToken" OfficialBuildOnly "officialSkipTests" OfficialBuildOnly "officialSkipApplyOptimizationData" if ($officialBuildId) { + $script:useGlobalNuGetCache = $false $script:procdump = $true $script:testDesktop = ![System.Boolean]::Parse($officialSkipTests) $script:applyOptimizationData = ![System.Boolean]::Parse($officialSkipApplyOptimizationData) - $script:buildOptimizationData = $true } else { - $script:vsDropName = "Products/DummyDrop" - $script:applyOptimizationData = $script:buildOptimizationData = $ci -and $configuration -eq "Release" -and $msbuildEngine -eq "vs" + $script:applyOptimizationData = $false } - + + if ($ci) { + $script:binaryLog = $true + } + if ($test32 -and $test64) { Write-Host "Cannot combine -test32 and -test64" exit 1 @@ -186,7 +183,7 @@ function Process-Arguments() { function BuildSolution() { # Roslyn.sln can't be built with dotnet due to WPF and VSIX build task dependencies $solution = if ($msbuildEngine -eq 'dotnet') { "Compilers.sln" } else { "Roslyn.sln" } - + Write-Host "$($solution):" $bl = if ($binaryLog) { "/bl:" + (Join-Path $LogDir "Build.binlog") } else { "" } @@ -195,11 +192,10 @@ function BuildSolution() { $toolsetBuildProj = InitializeToolset $quietRestore = !$ci $testTargetFrameworks = if ($testCoreClr) { "netcoreapp2.1" } else { "" } - - # Do not set the property to true explicitly, since that would override value projects might set. - $suppressExtensionDeployment = if (!$deployExtensions) { "/p:DeployExtension=false" } else { "" } - $optDataDir = if ($applyOptimizationData) { $IbcOptimizationDataDir } else { "" } + # Do not set these properties to true explicitly, since that would override values set in projects. + $suppressExtensionDeployment = if (!$deployExtensions) { "/p:DeployExtension=false" } else { "" } + $suppressPartialNgenOptimization = if (!$applyOptimizationData) { "/p:ApplyPartialNgenOptimization=false" } else { "" } # Setting /p:TreatWarningsAsErrors=true is a workaround for https://github.com/Microsoft/msbuild/issues/3062. # We don't pass /warnaserror to msbuild ($warnAsError is set to $false by default above), but set @@ -224,89 +220,16 @@ function BuildSolution() { /p:QuietRestore=$quietRestore ` /p:QuietRestoreBinaryLog=$binaryLog ` /p:TestTargetFrameworks=$testTargetFrameworks ` - /p:VisualStudioDropName=$vsDropName ` /p:TreatWarningsAsErrors=true ` - /p:IbcOptimizationDataDir=$optDataDir ` + $suppressPartialNgenOptimization ` $suppressExtensionDeployment ` @properties } -function Restore-OptProfData() { - $dropToolDir = Get-PackageDir "Drop.App" - $dropToolPath = Join-Path $dropToolDir "lib\net45\drop.exe" - - if (!(Test-Path $dropToolPath)) { - - # Only report error when running in an official build. - # Allows to test optimization data operations locally by running - # cibuild.cmd after manually restoring internal tools project. - if (!$officialBuildId) { - $script:applyOptimizationData = $false - return - } - - Write-Host "Internal tool not found: '$dropToolPath'." -ForegroundColor Red - Write-Host "Run nuget restore `"$EngRoot\internal\Toolset.csproj`"." -ForegroundColor DarkGray - ExitWithExitCode 1 - } - - function find-latest-drop($drops) { - $result = $null - [DateTime]$latest = [DateTime]::New(0) - foreach ($drop in $drops) { - $dt = [DateTime]::Parse($drop.CreatedDateUtc) - if ($result -eq $null -or ($drop.UploadComplete -and !$drop.DeletePending -and ($dt -gt $latest))) { - $result = $drop - $latest = $dt - } - } - - return $result - } - - Write-Host "Acquiring optimization data" - - Create-Directory $IbcOptimizationDataDir - - $dropServiceUrl = "https://devdiv.artifacts.visualstudio.com" - $dropNamePrefix = "OptimizationData/dotnet/roslyn/master-vs-deps" - $patAuth = if ($officialBuildId) { "--patAuth `"$vsDropAccessToken`"" } else { "" } - - $dropsJsonPath = Join-Path $LogDir "OptimizationDataDrops.json" - $logFile = Join-Path $LogDir "OptimizationDataAcquisition.log" - - Exec-Console $dropToolPath "list --dropservice `"$dropServiceUrl`" $patAuth --pathPrefixFilter `"$dropNamePrefix`" --toJsonFile `"$dropsJsonPath`" --traceto `"$logFile`"" - $dropsJson = Get-Content -Raw -Path $dropsJsonPath | ConvertFrom-Json - - $latestDrop = find-latest-drop($dropsJson) - - if ($latestDrop -eq $null) { - Write-Host "No drop matching given name found: $dropServiceUrl/$dropNamePrefix/*" -ForegroundColor Red - ExitWithExitCode 1 - } - - # Temporarily hardcoding the drop location name to the last good Preview2 drop. The pipeline that generates new new OptProf drops is generating incomplete data. - #$latestDropName = $($latestDrop.Name) - $latestDropName = "OptimizationData/dotnet/roslyn/master-vs-deps/75e3797e1105a4da4c10dddda76c3b9398f7725a/223453/935479/1" - - Write-Host "Downloading optimization data from service $dropServiceUrl drop $latestDropName" - Exec-Console $dropToolPath "get --dropservice `"$dropServiceUrl`" $patAuth --name `"$latestDropName`" --dest `"$IbcOptimizationDataDir`" --traceto `"$logFile`"" -} - -function Build-OptProfData() { +# Set VSO variables used by MicroBuildBuildVSBootstrapper pipeline task +function Set-OptProfVariables() { $insertionDir = Join-Path $VSSetupDir "Insertion" - $optProfDataDir = Join-Path $ArtifactsDir "OptProf\$configuration\Data" - - $optProfConfigFile = Join-Path $EngRoot "config\OptProf.json" - $optProfToolDir = Get-PackageDir "RoslynTools.OptProf" - $optProfToolExe = Join-Path $optProfToolDir "tools\roslyn.optprof.exe" - - Write-Host "Generating optimization data using '$optProfConfigFile' into '$optProfDataDir'" - Exec-Console $optProfToolExe "--configFile $optProfConfigFile --insertionFolder $insertionDir --outputFolder $optProfDataDir" - - # Set VSO variables used by MicroBuildBuildVSBootstrapper pipeline task $manifestList = [string]::Join(',', (Get-ChildItem "$insertionDir\*.vsman")) - Write-Host "##vso[task.setvariable variable=VisualStudio.SetupManifestList;]$manifestList" } @@ -439,7 +362,7 @@ function Deploy-VsixViaTool() { Write-Host "Installing all Roslyn VSIX" # VSIX files need to be installed in this specific order: - $orderedVsixFileNames = @( + $orderedVsixFileNames = @( "Roslyn.Compilers.Extension.vsix", "Roslyn.VisualStudio.Setup.vsix", "Roslyn.VisualStudio.Setup.Dependencies.vsix", @@ -511,10 +434,6 @@ try { Prepare-TempDir } - if ($applyOptimizationData -and $restore) { - Restore-OptProfData - } - if ($bootstrap) { $bootstrapDir = Make-BootstrapBuild } @@ -522,9 +441,9 @@ try { if ($restore -or $build -or $rebuild -or $pack -or $sign -or $publish -or $testCoreClr) { BuildSolution } - - if ($buildOptimizationData -and $build) { - Build-OptProfData + + if ($ci -and $build -and $msbuildEngine -eq "vs") { + Set-OptProfVariables } if ($testDesktop -or $testVsi -or $testIOperation) { diff --git a/eng/common/PublishBuildAssets.cmd b/eng/common/PublishBuildAssets.cmd deleted file mode 100644 index ac629f00e12..00000000000 --- a/eng/common/PublishBuildAssets.cmd +++ /dev/null @@ -1,3 +0,0 @@ -@echo off -powershell -ExecutionPolicy ByPass -NoProfile -command "& """%~dp0Build.ps1""" -msbuildEngine dotnet -restore -execute -binaryLog /p:PublishBuildAssets=true /p:SdkTaskProjects=PublishBuildAssets.proj %*" -exit /b %ErrorLevel% diff --git a/eng/common/PublishToPackageFeed.proj b/eng/common/PublishToPackageFeed.proj index 7dc478d981f..8149e3fb6a1 100644 --- a/eng/common/PublishToPackageFeed.proj +++ b/eng/common/PublishToPackageFeed.proj @@ -10,25 +10,38 @@ netcoreapp2.1 - + + + - - + + + + + + + + + + + AssetManifestPath="%(ManifestFiles.Identity)" + BlobAssetsBasePath="$(BlobBasePath)" + PackageAssetsBasePath="$(PackageBasePath)" /> diff --git a/eng/common/build.ps1 b/eng/common/build.ps1 index 2f5e6052a85..8279dc71339 100644 --- a/eng/common/build.ps1 +++ b/eng/common/build.ps1 @@ -6,7 +6,6 @@ Param( [string] $msbuildEngine = $null, [bool] $warnAsError = $true, [bool] $nodeReuse = $true, - [switch] $execute, [switch][Alias('r')]$restore, [switch] $deployDeps, [switch][Alias('b')]$build, @@ -18,7 +17,6 @@ Param( [switch] $sign, [switch] $pack, [switch] $publish, - [switch] $publishBuildAssets, [switch][Alias('bl')]$binaryLog, [switch] $ci, [switch] $prepareMachine, @@ -48,7 +46,6 @@ function Print-Usage() { Write-Host " -performanceTest Run all performance tests in the solution" Write-Host " -sign Sign build outputs" Write-Host " -publish Publish artifacts (e.g. symbols)" - Write-Host " -publishBuildAssets Push assets to BAR" Write-Host "" Write-Host "Advanced settings:" @@ -61,7 +58,6 @@ function Print-Usage() { Write-Host "The above arguments can be shortened as much as to be unambiguous (e.g. -co for configuration, -t for test, etc.)." } - function InitializeCustomToolset { if (-not $restore) { return @@ -77,6 +73,7 @@ function InitializeCustomToolset { function Build { $toolsetBuildProj = InitializeToolset InitializeCustomToolset + $bl = if ($binaryLog) { "/bl:" + (Join-Path $LogDir "Build.binlog") } else { "" } if ($projects) { @@ -102,7 +99,6 @@ function Build { /p:PerformanceTest=$performanceTest ` /p:Sign=$sign ` /p:Publish=$publish ` - /p:Execute=$execute ` /p:ContinuousIntegrationBuild=$ci ` @properties } diff --git a/eng/common/darc-init.ps1 b/eng/common/darc-init.ps1 index 96cad844ba3..57db185df19 100644 --- a/eng/common/darc-init.ps1 +++ b/eng/common/darc-init.ps1 @@ -19,7 +19,7 @@ function InstallDarcCli ($darcVersion) { # Until we can anonymously query the BAR API for the latest arcade-services # build applied to the PROD channel, this is hardcoded. if (-not $darcVersion) { - $darcVersion = '1.1.0-beta.19057.9' + $darcVersion = '1.1.0-beta.19081.1' } $arcadeServicesSource = 'https://dotnetfeed.blob.core.windows.net/dotnet-arcade/index.json' diff --git a/eng/common/internal/Directory.Build.props b/eng/common/internal/Directory.Build.props new file mode 100644 index 00000000000..e33179ef373 --- /dev/null +++ b/eng/common/internal/Directory.Build.props @@ -0,0 +1,4 @@ + + + + diff --git a/eng/common/internal/Directory.Build.targets b/eng/common/internal/Directory.Build.targets new file mode 100644 index 00000000000..5d26408a981 --- /dev/null +++ b/eng/common/internal/Directory.Build.targets @@ -0,0 +1,3 @@ + + + diff --git a/eng/internal/Toolset.csproj b/eng/common/internal/Tools.csproj similarity index 67% rename from eng/internal/Toolset.csproj rename to eng/common/internal/Tools.csproj index 7b112b88621..1d2e2183766 100644 --- a/eng/internal/Toolset.csproj +++ b/eng/common/internal/Tools.csproj @@ -5,8 +5,10 @@ net472 - - + + + + diff --git a/eng/common/sdk-task.ps1 b/eng/common/sdk-task.ps1 new file mode 100644 index 00000000000..d0eec5163ef --- /dev/null +++ b/eng/common/sdk-task.ps1 @@ -0,0 +1,79 @@ +[CmdletBinding(PositionalBinding=$false)] +Param( + [string] $configuration = "Debug", + [string] $task, + [string] $verbosity = "minimal", + [string] $msbuildEngine = $null, + [switch] $restore, + [switch] $prepareMachine, + [switch] $help, + [Parameter(ValueFromRemainingArguments=$true)][String[]]$properties +) + +$ci = $true +$binaryLog = $true +$warnAsError = $true + +. $PSScriptRoot\tools.ps1 + +function Print-Usage() { + Write-Host "Common settings:" + Write-Host " -task Name of Arcade task (name of a project in SdkTasks directory of the Arcade SDK package)" + Write-Host " -restore Restore dependencies" + Write-Host " -verbosity Msbuild verbosity: q[uiet], m[inimal], n[ormal], d[etailed], and diag[nostic]" + Write-Host " -help Print help and exit" + Write-Host "" + + Write-Host "Advanced settings:" + Write-Host " -prepareMachine Prepare machine for CI run" + Write-Host " -msbuildEngine Msbuild engine to use to run build ('dotnet', 'vs', or unspecified)." + Write-Host "" + Write-Host "Command line arguments not listed above are passed thru to msbuild." +} + +function Build([string]$target) { + $logSuffix = if ($target -eq "Execute") { "" } else { ".$target" } + $log = Join-Path $LogDir "$task$logSuffix.binlog" + $outputPath = Join-Path $ToolsetDir "$task\\" + + MSBuild $taskProject ` + /bl:$log ` + /t:$target ` + /p:Configuration=$configuration ` + /p:RepoRoot=$RepoRoot ` + /p:BaseIntermediateOutputPath=$outputPath ` + @properties +} + +try { + if ($help -or (($null -ne $properties) -and ($properties.Contains("/help") -or $properties.Contains("/?")))) { + Print-Usage + exit 0 + } + + if ($task -eq "") { + Write-Host "Missing required parameter '-task '" -ForegroundColor Red + Print-Usage + ExitWithExitCode 1 + } + + $taskProject = GetSdkTaskProject $task + if (!(Test-Path $taskProject)) { + Write-Host "Unknown task: $task" -ForegroundColor Red + ExitWithExitCode 1 + } + + if ($restore) { + Build "Restore" + } + + Build "Execute" +} +catch { + Write-Host $_ + Write-Host $_.Exception + Write-Host $_.ScriptStackTrace + ExitWithExitCode 1 +} + +ExitWithExitCode 0 diff --git a/eng/common/templates/job/publish-build-assets.yml b/eng/common/templates/job/publish-build-assets.yml index c094658fefc..d6d8697cbde 100644 --- a/eng/common/templates/job/publish-build-assets.yml +++ b/eng/common/templates/job/publish-build-assets.yml @@ -44,12 +44,15 @@ jobs: downloadPath: '$(Build.StagingDirectory)/Download' condition: ${{ parameters.condition }} continueOnError: ${{ parameters.continueOnError }} - - script: eng\common\publishbuildassets.cmd - /p:ManifestsPath='$(Build.StagingDirectory)/Download/AssetManifests' - /p:BuildAssetRegistryToken=$(MaestroAccessToken) - /p:MaestroApiEndpoint=https://maestro-prod.westus2.cloudapp.azure.com - /p:Configuration=$(_BuildConfig) + - task: PowerShell@2 displayName: Publish Build Assets + inputs: + filePath: eng\common\sdk-task.ps1 + arguments: -task PublishBuildAssets -restore -msbuildEngine dotnet + /p:ManifestsPath='$(Build.StagingDirectory)/Download/AssetManifests' + /p:BuildAssetRegistryToken=$(MaestroAccessToken) + /p:MaestroApiEndpoint=https://maestro-prod.westus2.cloudapp.azure.com + /p:Configuration=$(_BuildConfig) condition: ${{ parameters.condition }} continueOnError: ${{ parameters.continueOnError }} - ${{ if eq(parameters.enablePublishBuildArtifacts, 'true') }}: diff --git a/eng/common/templates/phases/publish-build-assets.yml b/eng/common/templates/phases/publish-build-assets.yml index 0df6203b506..85fabe62b98 100644 --- a/eng/common/templates/phases/publish-build-assets.yml +++ b/eng/common/templates/phases/publish-build-assets.yml @@ -29,10 +29,10 @@ phases: condition: ${{ parameters.condition }} continueOnError: ${{ parameters.continueOnError }} - script: eng\common\publishbuildassets.cmd - -configuration $(_BuildConfig) /p:ManifestsPath='$(Build.StagingDirectory)/Download/AssetManifests' /p:BuildAssetRegistryToken=$(MaestroAccessToken) /p:MaestroApiEndpoint=https://maestro-prod.westus2.cloudapp.azure.com + /p:Configuration=$(_BuildConfig) displayName: Publish Build Assets condition: ${{ parameters.condition }} continueOnError: ${{ parameters.continueOnError }} diff --git a/eng/common/templates/steps/send-to-helix.yml b/eng/common/templates/steps/send-to-helix.yml index a5835c0f473..1fbf8b88973 100644 --- a/eng/common/templates/steps/send-to-helix.yml +++ b/eng/common/templates/steps/send-to-helix.yml @@ -25,7 +25,7 @@ parameters: continueOnError: false # optional -- determines whether to continue the build if the step errors; defaults to false steps: - - powershell: 'powershell "$env:BUILD_SOURCESDIRECTORY\eng\common\msbuild.ps1 $env:BUILD_SOURCESDIRECTORY\eng\common\helixpublish.proj /bl:$env:BUILD_SOURCESDIRECTORY\artifacts\log\$env:BuildConfig\SendToHelix.binlog"' + - powershell: 'powershell "$env:BUILD_SOURCESDIRECTORY\eng\common\msbuild.ps1 $env:BUILD_SOURCESDIRECTORY\eng\common\helixpublish.proj /restore /t:Test /bl:$env:BUILD_SOURCESDIRECTORY\artifacts\log\$env:BuildConfig\SendToHelix.binlog"' displayName: Send job to Helix (Windows) env: BuildConfig: $(_BuildConfig) @@ -52,7 +52,7 @@ steps: Creator: ${{ parameters.Creator }} condition: and(${{ parameters.condition }}, eq(variables['Agent.Os'], 'Windows_NT')) continueOnError: ${{ parameters.continueOnError }} - - script: $BUILD_SOURCESDIRECTORY/eng/common/msbuild.sh $BUILD_SOURCESDIRECTORY/eng/common/helixpublish.proj /bl:$BUILD_SOURCESDIRECTORY/artifacts/log/$BuildConfig/SendToHelix.binlog + - script: $BUILD_SOURCESDIRECTORY/eng/common/msbuild.sh $BUILD_SOURCESDIRECTORY/eng/common/helixpublish.proj /restore /t:Test /bl:$BUILD_SOURCESDIRECTORY/artifacts/log/$BuildConfig/SendToHelix.binlog displayName: Send job to Helix (Unix) env: BuildConfig: $(_BuildConfig) diff --git a/eng/common/templates/steps/telemetry-end.yml b/eng/common/templates/steps/telemetry-end.yml index 9b61481e7e1..fadc04ca1b9 100644 --- a/eng/common/templates/steps/telemetry-end.yml +++ b/eng/common/templates/steps/telemetry-end.yml @@ -1,3 +1,7 @@ +parameters: + maxRetries: 5 + retryDelay: 10 # in seconds + steps: - bash: | if [ "$AGENT_JOBSTATUS" = "Succeeded" ] || [ "$AGENT_JOBSTATUS" = "PartiallySucceeded" ]; then @@ -7,27 +11,41 @@ steps: fi warningCount=0 - # create a temporary file for curl output - res=`mktemp` - - curlResult=` - curl --verbose --output $res --write-out "%{http_code}"\ - -H 'Content-Type: application/json' \ - -H "X-Helix-Job-Token: $Helix_JobToken" \ - -H 'Content-Length: 0' \ - -X POST -G "https://helix.dot.net/api/2018-03-14/telemetry/job/build/$Helix_WorkItemId/finish" \ - --data-urlencode "errorCount=$errorCount" \ - --data-urlencode "warningCount=$warningCount"` - curlStatus=$? - - if [ $curlStatus -eq 0 ]; then - if [ $curlResult -gt 299 ] || [ $curlResult -lt 200 ]; then - curlStatus=$curlResult + curlStatus=1 + retryCount=0 + # retry loop to harden against spotty telemetry connections + # we don't retry successes and 4xx client errors + until [[ $curlStatus -eq 0 || ( $curlStatus -ge 400 && $curlStatus -le 499 ) || $retryCount -ge $MaxRetries ]] + do + if [ $retryCount -gt 0 ]; then + echo "Failed to send telemetry to Helix; waiting $RetryDelay seconds before retrying..." + sleep $RetryDelay fi - fi + + # create a temporary file for curl output + res=`mktemp` + + curlResult=` + curl --verbose --output $res --write-out "%{http_code}"\ + -H 'Content-Type: application/json' \ + -H "X-Helix-Job-Token: $Helix_JobToken" \ + -H 'Content-Length: 0' \ + -X POST -G "https://helix.dot.net/api/2018-03-14/telemetry/job/build/$Helix_WorkItemId/finish" \ + --data-urlencode "errorCount=$errorCount" \ + --data-urlencode "warningCount=$warningCount"` + curlStatus=$? + + if [ $curlStatus -eq 0 ]; then + if [ $curlResult -gt 299 ] || [ $curlResult -lt 200 ]; then + curlStatus=$curlResult + fi + fi + + let retryCount++ + done if [ $curlStatus -ne 0 ]; then - echo "Failed to Send Build Finish information" + echo "Failed to Send Build Finish information after $retryCount retries" vstsLogOutput="vso[task.logissue type=error;sourcepath=templates/steps/telemetry-end.yml;code=1;]Failed to Send Build Finish information: $curlStatus" echo "##$vstsLogOutput" exit 1 @@ -37,6 +55,8 @@ steps: # defined via VSTS variables in start-job.sh Helix_JobToken: $(Helix_JobToken) Helix_WorkItemId: $(Helix_WorkItemId) + MaxRetries: ${{ parameters.maxRetries }} + RetryDelay: ${{ parameters.retryDelay }} condition: and(always(), ne(variables['Agent.Os'], 'Windows_NT')) - powershell: | if (($env:Agent_JobStatus -eq 'Succeeded') -or ($env:Agent_JobStatus -eq 'PartiallySucceeded')) { @@ -46,13 +66,30 @@ steps: } $WarningCount = 0 - try { - Invoke-RestMethod -Uri "https://helix.dot.net/api/2018-03-14/telemetry/job/build/$env:Helix_WorkItemId/finish?errorCount=$ErrorCount&warningCount=$WarningCount" -Method Post -ContentType "application/json" -Body "" ` - -Headers @{ 'X-Helix-Job-Token'=$env:Helix_JobToken } + # Basic retry loop to harden against server flakiness + $retryCount = 0 + while ($retryCount -lt $env:MaxRetries) { + try { + Invoke-RestMethod -Uri "https://helix.dot.net/api/2018-03-14/telemetry/job/build/$env:Helix_WorkItemId/finish?errorCount=$ErrorCount&warningCount=$WarningCount" -Method Post -ContentType "application/json" -Body "" ` + -Headers @{ 'X-Helix-Job-Token'=$env:Helix_JobToken } + break + } + catch { + $statusCode = $_.Exception.Response.StatusCode.value__ + if ($statusCode -ge 400 -and $statusCode -le 499) { + Write-Host "##vso[task.logissue]error Failed to send telemetry to Helix (status code $statusCode); not retrying (4xx client error)" + Write-Host "##vso[task.logissue]error ", $_.Exception.GetType().FullName, $_.Exception.Message + exit 1 + } + Write-Host "Failed to send telemetry to Helix (status code $statusCode); waiting $env:RetryDelay seconds before retrying..." + $retryCount++ + sleep $env:RetryDelay + continue + } } - catch { - Write-Error $_ - Write-Error $_.Exception + + if ($retryCount -ge $env:MaxRetries) { + Write-Host "##vso[task.logissue]error Failed to send telemetry to Helix after $retryCount retries." exit 1 } displayName: Send Windows Build End Telemetry @@ -60,4 +97,6 @@ steps: # defined via VSTS variables in start-job.ps1 Helix_JobToken: $(Helix_JobToken) Helix_WorkItemId: $(Helix_WorkItemId) + MaxRetries: ${{ parameters.maxRetries }} + RetryDelay: ${{ parameters.retryDelay }} condition: and(always(),eq(variables['Agent.Os'], 'Windows_NT')) diff --git a/eng/common/templates/steps/telemetry-start.yml b/eng/common/templates/steps/telemetry-start.yml index 79c128c5de8..f6a521be21e 100644 --- a/eng/common/templates/steps/telemetry-start.yml +++ b/eng/common/templates/steps/telemetry-start.yml @@ -3,6 +3,8 @@ parameters: helixType: 'undefined_defaulted_in_telemetry.yml' buildConfig: '' runAsPublic: false + maxRetries: 5 + retryDelay: 10 # in seconds steps: - ${{ if and(eq(parameters.runAsPublic, 'false'), not(eq(variables['System.TeamProject'], 'public'))) }}: @@ -30,7 +32,7 @@ steps: } } JobListStuff - + cat $jobInfo # create a temporary file for curl output @@ -38,30 +40,44 @@ steps: accessTokenParameter="?access_token=$HelixApiAccessToken" - curlResult=` - cat $jobInfo |\ - curl --trace - --verbose --output $res --write-out "%{http_code}" \ - -H 'Content-Type: application/json' \ - -X POST "https://helix.dot.net/api/2018-03-14/telemetry/job$accessTokenParameter" -d @-` - curlStatus=$? + curlStatus=1 + retryCount=0 + # retry loop to harden against spotty telemetry connections + # we don't retry successes and 4xx client errors + until [[ $curlStatus -eq 0 || ( $curlStatus -ge 400 && $curlStatus -le 499 ) || $retryCount -ge $MaxRetries ]] + do + if [ $retryCount -gt 0 ]; then + echo "Failed to send telemetry to Helix; waiting $RetryDelay seconds before retrying..." + sleep $RetryDelay + fi + + curlResult=` + cat $jobInfo |\ + curl --trace - --verbose --output $res --write-out "%{http_code}" \ + -H 'Content-Type: application/json' \ + -X POST "https://helix.dot.net/api/2018-03-14/telemetry/job$accessTokenParameter" -d @-` + curlStatus=$? - if [ $curlStatus -eq 0 ]; then - if [ $curlResult -gt 299 ] || [ $curlResult -lt 200 ]; then - curlStatus=$curlResult + if [ $curlStatus -eq 0 ]; then + if [ $curlResult -gt 299 ] || [ $curlResult -lt 200 ]; then + curlStatus=$curlResult + fi fi - fi + + let retryCount++ + done curlResult=`cat $res` - + # validate status of curl command if [ $curlStatus -ne 0 ]; then - echo "Failed To Send Job Start information" + echo "Failed To Send Job Start information after $retryCount retries" # We have to append the ## vso prefix or vso will pick up the command when it dumps the inline script into the shell vstsLogOutput="vso[task.logissue type=error;sourcepath=telemetry/start-job.sh;code=1;]Failed to Send Job Start information: $curlStatus" echo "##$vstsLogOutput" exit 1 fi - + # Set the Helix_JobToken variable export Helix_JobToken=`echo $curlResult | xargs echo` # Strip Quotes echo "##vso[task.setvariable variable=Helix_JobToken;issecret=true;]$Helix_JobToken" @@ -75,29 +91,44 @@ steps: Attempt: 1 OperatingSystem: $(Agent.Os) Configuration: ${{ parameters.buildConfig }} + MaxRetries: ${{ parameters.maxRetries }} + RetryDelay: ${{ parameters.retryDelay }} condition: and(always(), ne(variables['Agent.Os'], 'Windows_NT')) - bash: | - res=`mktemp` - curlResult=` - curl --verbose --output $res --write-out "%{http_code}"\ - -H 'Content-Type: application/json' \ - -H "X-Helix-Job-Token: $Helix_JobToken" \ - -H 'Content-Length: 0' \ - -X POST -G "https://helix.dot.net/api/2018-03-14/telemetry/job/build" \ - --data-urlencode "buildUri=$BuildUri"` - curlStatus=$? - - if [ $curlStatus -eq 0 ]; then - if [ $curlResult -gt 299 ] || [ $curlResult -lt 200 ]; then - curlStatus=$curlResult + curlStatus=1 + retryCount=0 + # retry loop to harden against spotty telemetry connections + # we don't retry successes and 4xx client errors + until [[ $curlStatus -eq 0 || ( $curlStatus -ge 400 && $curlStatus -le 499 ) || $retryCount -ge $MaxRetries ]] + do + if [ $retryCount -gt 0 ]; then + echo "Failed to send telemetry to Helix; waiting $RetryDelay seconds before retrying..." + sleep $RetryDelay fi - fi - curlResult=`cat $res` + res=`mktemp` + curlResult=` + curl --verbose --output $res --write-out "%{http_code}"\ + -H 'Content-Type: application/json' \ + -H "X-Helix-Job-Token: $Helix_JobToken" \ + -H 'Content-Length: 0' \ + -X POST -G "https://helix.dot.net/api/2018-03-14/telemetry/job/build" \ + --data-urlencode "buildUri=$BuildUri"` + curlStatus=$? + + if [ $curlStatus -eq 0 ]; then + if [ $curlResult -gt 299 ] || [ $curlResult -lt 200 ]; then + curlStatus=$curlResult + fi + fi + + curlResult=`cat $res` + let retryCount++ + done # validate status of curl command if [ $curlStatus -ne 0 ]; then - echo "Failed to Send Build Start information" + echo "Failed to Send Build Start information after $retryCount retries" vstsLogOutput="vso[task.logissue type=error;sourcepath=telemetry/build/start.sh;code=1;]Failed to Send Build Start information: $curlStatus" echo "##$vstsLogOutput" exit 1 @@ -109,8 +140,10 @@ steps: env: BuildUri: $(System.TaskDefinitionsUri)$(System.TeamProject)/_build/index?buildId=$(Build.BuildId)&_a=summary Helix_JobToken: $(Helix_JobToken) + MaxRetries: ${{ parameters.maxRetries }} + RetryDelay: ${{ parameters.retryDelay }} condition: and(always(), ne(variables['Agent.Os'], 'Windows_NT')) - + - powershell: | $jobInfo = [pscustomobject]@{ QueueId=$env:QueueId; @@ -120,17 +153,42 @@ steps: Attempt=$env:Attempt; Properties=[pscustomobject]@{ operatingSystem=$env:OperatingSystem; configuration=$env:Configuration }; } - + $jobInfoJson = $jobInfo | ConvertTo-Json if ($env:HelixApiAccessToken) { $accessTokenParameter="?access_token=$($env:HelixApiAccessToken)" } Write-Host "Job Info: $jobInfoJson" - $jobToken = Invoke-RestMethod -Uri "https://helix.dot.net/api/2018-03-14/telemetry/job$($accessTokenParameter)" -Method Post -ContentType "application/json" -Body $jobInfoJson + + # Basic retry loop to harden against server flakiness + $retryCount = 0 + while ($retryCount -lt $env:MaxRetries) { + try { + $jobToken = Invoke-RestMethod -Uri "https://helix.dot.net/api/2018-03-14/telemetry/job$($accessTokenParameter)" -Method Post -ContentType "application/json" -Body $jobInfoJson + break + } + catch { + $statusCode = $_.Exception.Response.StatusCode.value__ + if ($statusCode -ge 400 -and $statusCode -le 499) { + Write-Host "##vso[task.logissue]error Failed to send telemetry to Helix (status code $statusCode); not retrying (4xx client error)" + Write-Host "##vso[task.logissue]error ", $_.Exception.GetType().FullName, $_.Exception.Message + exit 1 + } + Write-Host "Failed to send telemetry to Helix (status code $statusCode); waiting $env:RetryDelay seconds before retrying..." + $retryCount++ + sleep $env:RetryDelay + continue + } + } + + if ($retryCount -ge $env:MaxRetries) { + Write-Host "##vso[task.logissue]error Failed to send telemetry to Helix after $retryCount retries." + exit 1 + } + $env:Helix_JobToken = $jobToken Write-Host "##vso[task.setvariable variable=Helix_JobToken;issecret=true;]$env:Helix_JobToken" - displayName: Send Windows Job Start Telemetry env: HelixApiAccessToken: $(HelixApiAccessToken) Source: ${{ parameters.helixSource }} @@ -140,15 +198,43 @@ steps: Attempt: 1 OperatingSystem: $(Agent.Os) Configuration: ${{ parameters.buildConfig }} + MaxRetries: ${{ parameters.maxRetries }} + RetryDelay: ${{ parameters.retryDelay }} condition: and(always(), eq(variables['Agent.Os'], 'Windows_NT')) - powershell: | - $workItemId = Invoke-RestMethod -Uri "https://helix.dot.net/api/2018-03-14/telemetry/job/build?buildUri=$([Net.WebUtility]::UrlEncode($env:BuildUri))" -Method Post -ContentType "application/json" -Body "" ` - -Headers @{ 'X-Helix-Job-Token'=$env:Helix_JobToken } - + # Basic retry loop to harden against server flakiness + $retryCount = 0 + while ($retryCount -lt $env:MaxRetries) { + try { + $workItemId = Invoke-RestMethod -Uri "https://helix.dot.net/api/2018-03-14/telemetry/job/build?buildUri=$([Net.WebUtility]::UrlEncode($env:BuildUri))" -Method Post -ContentType "application/json" -Body "" ` + -Headers @{ 'X-Helix-Job-Token'=$env:Helix_JobToken } + break + } + catch { + $statusCode = $_.Exception.Response.StatusCode.value__ + if ($statusCode -ge 400 -and $statusCode -le 499) { + Write-Host "##vso[task.logissue]error Failed to send telemetry to Helix (status code $statusCode); not retrying (4xx client error)" + Write-Host "##vso[task.logissue]error ", $_.Exception.GetType().FullName, $_.Exception.Message + exit 1 + } + Write-Host "Failed to send telemetry to Helix (status code $statusCode); waiting $env:RetryDelay seconds before retrying..." + $retryCount++ + sleep $env:RetryDelay + continue + } + } + + if ($retryCount -ge $env:MaxRetries) { + Write-Host "##vso[task.logissue]error Failed to send telemetry to Helix after $retryCount retries." + exit 1 + } + $env:Helix_WorkItemId = $workItemId Write-Host "##vso[task.setvariable variable=Helix_WorkItemId]$env:Helix_WorkItemId" displayName: Send Windows Build Start Telemetry env: BuildUri: $(System.TaskDefinitionsUri)$(System.TeamProject)/_build/index?buildId=$(Build.BuildId)&_a=summary Helix_JobToken: $(Helix_JobToken) + MaxRetries: ${{ parameters.maxRetries }} + RetryDelay: ${{ parameters.retryDelay }} condition: and(always(), eq(variables['Agent.Os'], 'Windows_NT')) diff --git a/eng/common/tools.ps1 b/eng/common/tools.ps1 index 4204dc14f89..e91f8ccf3b3 100644 --- a/eng/common/tools.ps1 +++ b/eng/common/tools.ps1 @@ -376,6 +376,11 @@ function GetNuGetPackageCachePath() { return $env:NUGET_PACKAGES } +# Returns a full path to an Arcade SDK task project file. +function GetSdkTaskProject([string]$taskName) { + return Join-Path (Split-Path (InitializeToolset) -Parent) "SdkTasks\$taskName.proj" +} + function InitializeToolset() { if (Test-Path variable:global:_ToolsetBuildProj) { return $global:_ToolsetBuildProj @@ -394,7 +399,7 @@ function InitializeToolset() { } if (-not $restore) { - Write-Host "Toolset version $toolsetVersion has not been restored." + Write-Host "Toolset version $toolsetVersion has not been restored." -ForegroundColor Red ExitWithExitCode 1 } diff --git a/eng/generate-optprof-run-settings.ps1 b/eng/generate-optprof-run-settings.ps1 deleted file mode 100644 index 1280e96e568..00000000000 --- a/eng/generate-optprof-run-settings.ps1 +++ /dev/null @@ -1,31 +0,0 @@ -[CmdletBinding(PositionalBinding=$false)] -param ( - [string]$configuration, - [string]$vsDropName, - [string]$bootstrapperInfo -) - -Set-StrictMode -version 2.0 -$ErrorActionPreference = "Stop" - -. (Join-Path $PSScriptRoot "build-utils.ps1") - -try { - $optProfToolDir = Get-PackageDir "Roslyn.OptProf.RunSettings.Generator" - $optProfToolExe = Join-Path $optProfToolDir "tools\roslyn.optprof.runsettings.generator.exe" - $configFile = Join-Path $EngRoot "config\OptProf.json" - $runSettingsFile = Join-Path $VSSetupDir "Insertion\OptProf\Training.runsettings" - - Exec-Console $optProfToolExe "--config $configFile --vsDropName $vsDropName --bootstrapperInfo $bootstrapperInfo --out $runSettingsFile" - - exit 0 -} -catch { - Write-Host $_ - Write-Host $_.Exception - Write-Host $_.ScriptStackTrace - exit 1 -} -finally { - Pop-Location -} diff --git a/eng/internal/Directory.Build.props b/eng/internal/Directory.Build.props deleted file mode 100644 index 4b502f8963a..00000000000 --- a/eng/internal/Directory.Build.props +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/eng/internal/Directory.Build.targets b/eng/internal/Directory.Build.targets deleted file mode 100644 index d7efd3fada3..00000000000 --- a/eng/internal/Directory.Build.targets +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/eng/publish-assets.ps1 b/eng/publish-assets.ps1 index 57fb7eb71d9..04df43cfbab 100644 --- a/eng/publish-assets.ps1 +++ b/eng/publish-assets.ps1 @@ -131,17 +131,6 @@ function Test-Member($obj, [string]$name) { return $value -ne $null } -# This script is interested in the short branch name: master, dev15.x, etc ... But several -# of our publish operations specify fully branch names like /refs/heads/master. Normalizing -# those out to the short branch name here. -function Normalize-BranchName([string]$branchName) { - switch -regex ($branchName) { - "refs/heads/(.*)" { return $matches[1] } - "refs/pull/\d*/(.*)" { return $matches[1] } - default { return $branchName } - } -} - try { if ($configuration -eq "") { Write-Host "Must provide the build configuration with -configuration" @@ -161,7 +150,6 @@ try { exit 1 } elseif ($branchName -ne "") { - $branchName = Normalize-BranchName $branchName if (-not (Test-Member $data.branches $branchName)) { Write-Host "$branchName is not listed for publishing" exit 0 diff --git a/eng/test-build-correctness.ps1 b/eng/test-build-correctness.ps1 index db2fde5325b..f9b856242d8 100644 --- a/eng/test-build-correctness.ps1 +++ b/eng/test-build-correctness.ps1 @@ -56,7 +56,7 @@ try { $bootstrapperInfoContent | Set-Content $bootstrapperInfoPath # generate run settings - Exec-Block { & (Join-Path $PSScriptRoot "generate-optprof-run-settings.ps1") -configuration:$configuration -vsDropName:"Products/DummyDrop" -bootstrapperInfo:$bootstrapperInfoPath } + Exec-Block { & (Join-Path $PSScriptRoot "common\sdk-task.ps1") -configuration:$configuration -task VisualStudio.BuildIbcTrainingSettings /p:VisualStudioDropName="Products/DummyDrop" /p:BootstrapperInfoPath=$bootstrapperInfoPath } exit 0 } diff --git a/global.json b/global.json index 1ba613bf46a..2234f323e3e 100644 --- a/global.json +++ b/global.json @@ -7,6 +7,6 @@ "xcopy-msbuild": "15.9.0-alpha" }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "1.0.0-beta.19064.4" + "Microsoft.DotNet.Arcade.Sdk": "1.0.0-beta.19104.18" } } -- GitLab