diff --git a/build/packages.config b/build/packages.config index 189017052d..3717cf5b97 100644 --- a/build/packages.config +++ b/build/packages.config @@ -5,4 +5,6 @@ + + diff --git a/build/pipelines/release.yml b/build/pipelines/release.yml index a8b9e612d1..600b4a95ea 100644 --- a/build/pipelines/release.yml +++ b/build/pipelines/release.yml @@ -134,8 +134,6 @@ jobs: Write-Host "##vso[task.setvariable variable=RationalizedBuildPlatform]${Arch}" - template: .\templates\restore-nuget-steps.yml - # Pull the Windows SDK for the developer tools like the debuggers so we can index sources later - - template: .\templates\install-winsdk-steps.yml - task: UniversalPackages@0 displayName: Download terminal-internal Universal Package inputs: @@ -238,6 +236,7 @@ jobs: filePath: build\scripts\Index-Pdbs.ps1 arguments: -SearchDir '$(Build.SourcesDirectory)' -SourceRoot '$(Build.SourcesDirectory)' -recursive -Verbose -CommitId $(Build.SourceVersion) errorActionPreference: silentlyContinue + pwsh: true - task: PowerShell@2 displayName: Run Unit Tests condition: and(succeeded(), or(eq(variables['BuildPlatform'], 'x64'), eq(variables['BuildPlatform'], 'x86'))) @@ -608,6 +607,8 @@ jobs: - task: PkgESSetupBuild@12 displayName: Package ES - Setup Build + - template: .\templates\restore-nuget-steps.yml + # Download the appx-PLATFORM-CONFIG-VERSION artifact for every platform/version combo - ${{ each platform in parameters.buildPlatforms }}: - ${{ each windowsVersion in parameters.buildWindowsVersions }}: @@ -630,13 +631,12 @@ jobs: } displayName: Extract symbols for public consumption - # Pull the Windows SDK for the developer tools like the debuggers so we can index sources later - - template: .\templates\install-winsdk-steps.yml - task: PowerShell@2 displayName: Source Index PDBs (the public ones) inputs: filePath: build\scripts\Index-Pdbs.ps1 arguments: -SearchDir '$(Build.SourcesDirectory)/appxsym-temp' -SourceRoot '$(Build.SourcesDirectory)' -recursive -Verbose -CommitId $(Build.SourceVersion) + pwsh: true # Publish the app symbols to the public MSDL symbol server # accessible via https://msdl.microsoft.com/download/symbols diff --git a/build/pipelines/templates/install-winsdk-steps.yml b/build/pipelines/templates/install-winsdk-steps.yml deleted file mode 100644 index 6607cfccdb..0000000000 --- a/build/pipelines/templates/install-winsdk-steps.yml +++ /dev/null @@ -1,9 +0,0 @@ -parameters: - sdkVersion: 18362 -steps: - - task: powershell@2 - inputs: - targetType: filePath - filePath: build\scripts\Install-WindowsSdkISO.ps1 - arguments: ${{ parameters.sdkVersion }} - displayName: 'Install Windows SDK (${{ parameters.sdkVersion }})' \ No newline at end of file diff --git a/build/scripts/Index-Pdbs.ps1 b/build/scripts/Index-Pdbs.ps1 index 61142cade3..d0a17d61fb 100644 --- a/build/scripts/Index-Pdbs.ps1 +++ b/build/scripts/Index-Pdbs.ps1 @@ -8,10 +8,11 @@ Param( [switch]$recursive ) -$debuggerPath = (Get-ItemProperty -path "HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows Kits\Installed Roots" -name WindowsDebuggersRoot10).WindowsDebuggersRoot10 -$srcsrvPath = Join-Path $debuggerPath "x64\srcsrv" -$srctoolExe = Join-Path $srcsrvPath "srctool.exe" -$pdbstrExe = Join-Path $srcsrvPath "pdbstr.exe" +$pdbStrPackage = ([xml](Get-Content "$SourceRoot\build\packages.config")).packages.package | Where-Object id -like "*PdbStr*" +# This assumes that we rev PdbStr and SrcTool at the same time. +$debugPackageVersions = $pdbStrPackage.version +$srctoolExe = Join-Path $SourceRoot "packages" "Microsoft.Debugging.Tools.SrcTool.$debugPackageVersions" "content" "amd64" "srctool.exe" +$pdbstrExe = Join-Path $SourceRoot "packages" "Microsoft.Debugging.Tools.PdbStr.$debugPackageVersions" "content" "amd64" "pdbstr.exe" $fileTable = @{} foreach ($gitFile in & git ls-files) diff --git a/build/scripts/Install-WindowsSdkISO.ps1 b/build/scripts/Install-WindowsSdkISO.ps1 deleted file mode 100644 index b61ce483d6..0000000000 --- a/build/scripts/Install-WindowsSdkISO.ps1 +++ /dev/null @@ -1,346 +0,0 @@ -[CmdletBinding()] -param([Parameter(Mandatory=$true, Position=0)] - [string]$buildNumber) - -# Ensure the error action preference is set to the default for PowerShell3, 'Stop' -$ErrorActionPreference = 'Stop' - -# Constants -$WindowsSDKOptions = @("OptionId.UWPCpp", "OptionId.DesktopCPPx64", "OptionId.DesktopCPPx86", "OptionId.DesktopCPPARM64", "OptionId.DesktopCPPARM", "OptionId.WindowsDesktopDebuggers") -$WindowsSDKRegPath = "HKLM:\Software\WOW6432Node\Microsoft\Windows Kits\Installed Roots" -$WindowsSDKRegRootKey = "KitsRoot10" -$WindowsSDKVersion = "10.0.$buildNumber.0" -$WindowsSDKInstalledRegPath = "$WindowsSDKRegPath\$WindowsSDKVersion\Installed Options" -$StrongNameRegPath = "HKLM:\SOFTWARE\Microsoft\StrongName\Verification" -$PublicKeyTokens = @("31bf3856ad364e35") - -if ($buildNumber -notmatch "^\d{5,}$") -{ - Write-Host "ERROR: '$buildNumber' doesn't look like a windows build number" - Write-Host - Exit 1 -} - -function Download-File -{ - param ([string] $outDir, - [string] $downloadUrl, - [string] $downloadName) - - $downloadPath = Join-Path $outDir "$downloadName.download" - $downloadDest = Join-Path $outDir $downloadName - $downloadDestTemp = Join-Path $outDir "$downloadName.tmp" - - Write-Host -NoNewline "Downloading $downloadName..." - - $retries = 10 - $downloaded = $false - while (-not $downloaded) - { - try - { - $webclient = new-object System.Net.WebClient - $webclient.DownloadFile($downloadUrl, $downloadPath) - $downloaded = $true - } - catch [System.Net.WebException] - { - Write-Host - Write-Warning "Failed to fetch updated file from $downloadUrl : $($error[0])" - if (!(Test-Path $downloadDest)) - { - if ($retries -gt 0) - { - Write-Host "$retries retries left, trying download again" - $retries-- - start-sleep -Seconds 10 - } - else - { - throw "$downloadName was not found at $downloadDest" - } - } - else - { - Write-Warning "$downloadName may be out of date" - } - } - } - - Unblock-File $downloadPath - - $downloadDestTemp = $downloadPath; - - # Delete and rename to final dest - Write-Host "testing $downloadDest" - if (Test-Path $downloadDest) - { - Write-Host "Deleting: $downloadDest" - Remove-Item $downloadDest -Force - } - - Move-Item -Force $downloadDestTemp $downloadDest - Write-Host "Done" - - return $downloadDest -} - -function Get-ISODriveLetter -{ - param ([string] $isoPath) - - $diskImage = Get-DiskImage -ImagePath $isoPath - if ($diskImage) - { - $volume = Get-Volume -DiskImage $diskImage - - if ($volume) - { - $driveLetter = $volume.DriveLetter - if ($driveLetter) - { - $driveLetter += ":" - return $driveLetter - } - } - } - - return $null -} - -function Mount-ISO -{ - param ([string] $isoPath) - - # Check if image is already mounted - $isoDrive = Get-ISODriveLetter $isoPath - - if (!$isoDrive) - { - Mount-DiskImage -ImagePath $isoPath -StorageType ISO | Out-Null - } - - $isoDrive = Get-ISODriveLetter $isoPath - Write-Verbose "$isoPath mounted to ${isoDrive}:" -} - -function Dismount-ISO -{ - param ([string] $isoPath) - - $isoDrive = (Get-DiskImage -ImagePath $isoPath | Get-Volume).DriveLetter - - if ($isoDrive) - { - Write-Verbose "$isoPath dismounted" - Dismount-DiskImage -ImagePath $isoPath | Out-Null - } -} - -function Disable-StrongName -{ - param ([string] $publicKeyToken = "*") - - reg ADD "HKLM\SOFTWARE\Microsoft\StrongName\Verification\*,$publicKeyToken" /f | Out-Null - if ($env:PROCESSOR_ARCHITECTURE -eq "AMD64") - { - reg ADD "HKLM\SOFTWARE\Wow6432Node\Microsoft\StrongName\Verification\*,$publicKeyToken" /f | Out-Null - } -} - -function Test-Admin -{ - $identity = [Security.Principal.WindowsIdentity]::GetCurrent() - $principal = New-Object Security.Principal.WindowsPrincipal $identity - $principal.IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator) -} - -function Test-RegistryPathAndValue -{ - param ( - [parameter(Mandatory=$true)] - [ValidateNotNullOrEmpty()] - [string] $path, - [parameter(Mandatory=$true)] - [ValidateNotNullOrEmpty()] - [string] $value) - - try - { - if (Test-Path $path) - { - Get-ItemProperty -Path $path | Select-Object -ExpandProperty $value -ErrorAction Stop | Out-Null - return $true - } - } - catch - { - } - - return $false -} - -function Test-InstallWindowsSDK -{ - $retval = $true - - if (Test-RegistryPathAndValue -Path $WindowsSDKRegPath -Value $WindowsSDKRegRootKey) - { - # A Windows SDK is installed - # Is an SDK of our version installed with the options we need? - $allRequiredSdkOptionsInstalled = $true - foreach($sdkOption in $WindowsSDKOptions) - { - if (!(Test-RegistryPathAndValue -Path $WindowsSDKInstalledRegPath -Value $sdkOption)) - { - $allRequiredSdkOptionsInstalled = $false - } - } - - if($allRequiredSdkOptionsInstalled) - { - # It appears we have what we need. Double check the disk - $sdkRoot = Get-ItemProperty -Path $WindowsSDKRegPath | Select-Object -ExpandProperty $WindowsSDKRegRootKey - if ($sdkRoot) - { - if (Test-Path $sdkRoot) - { - $refPath = Join-Path $sdkRoot "References\$WindowsSDKVersion" - if (Test-Path $refPath) - { - $umdPath = Join-Path $sdkRoot "UnionMetadata\$WindowsSDKVersion" - if (Test-Path $umdPath) - { - # Pretty sure we have what we need - $retval = $false - } - } - } - } - } - } - - return $retval -} - -function Test-InstallStrongNameHijack -{ - foreach($publicKeyToken in $PublicKeyTokens) - { - $key = "$StrongNameRegPath\*,$publicKeyToken" - if (!(Test-Path $key)) - { - return $true - } - } - - return $false -} - -Write-Host -NoNewline "Checking for installed Windows SDK $WindowsSDKVersion..." -$InstallWindowsSDK = Test-InstallWindowsSDK -if ($InstallWindowsSDK) -{ - Write-Host "Installation required" -} -else -{ - Write-Host "INSTALLED" -} - -$StrongNameHijack = Test-InstallStrongNameHijack -Write-Host -NoNewline "Checking if StrongName bypass required..." - -if ($StrongNameHijack) -{ - Write-Host "REQUIRED" -} -else -{ - Write-Host "Done" -} - -if ($StrongNameHijack -or $InstallWindowsSDK) -{ - if (!(Test-Admin)) - { - Write-Host - throw "ERROR: Elevation required" - } -} - -if ($InstallWindowsSDK) -{ - # Static(ish) link for Windows SDK - # Note: there is a delay from Windows SDK announcements to availability via the static link - $uri = "https://software-download.microsoft.com/download/sg/Windows_InsiderPreview_SDK_en-us_$($buildNumber)_1.iso"; - - if ($env:TEMP -eq $null) - { - $env:TEMP = Join-Path $env:SystemDrive 'temp' - } - - $winsdkTempDir = Join-Path (Join-Path $env:TEMP ([System.IO.Path]::GetRandomFileName())) "WindowsSDK" - - if (![System.IO.Directory]::Exists($winsdkTempDir)) - { - [void][System.IO.Directory]::CreateDirectory($winsdkTempDir) - } - - $file = "winsdk_$buildNumber.iso" - - Write-Verbose "Getting WinSDK from $uri" - $downloadFile = Download-File $winsdkTempDir $uri $file - Write-Verbose "File is at $downloadFile" - $downloadFileItem = Get-Item $downloadFile - - # Check to make sure the file is at least 10 MB. - if ($downloadFileItem.Length -lt 10*1024*1024) - { - Write-Host - Write-Host "ERROR: Downloaded file doesn't look large enough to be an ISO. The requested version may not be on microsoft.com yet." - Write-Host - Exit 1 - } - - # TODO Check if zip, exe, iso, etc. - try - { - Write-Host -NoNewline "Mounting ISO $file..." - Mount-ISO $downloadFile - Write-Host "Done" - - $isoDrive = Get-ISODriveLetter $downloadFile - - if (Test-Path $isoDrive) - { - Write-Host -NoNewLine "Installing WinSDK..." - - $setupPath = Join-Path "$isoDrive" "WinSDKSetup.exe" - Start-Process -Wait $setupPath "/features $WindowsSDKOptions /q" - Write-Host "Done" - } - else - { - throw "Could not find mounted ISO at ${isoDrive}" - } - } - finally - { - Write-Host -NoNewline "Dismounting ISO $file..." - Dismount-ISO $downloadFile - Write-Host "Done" - } -} - -if ($StrongNameHijack) -{ - Write-Host -NoNewline "Disabling StrongName for Windows SDK..." - - foreach($key in $PublicKeyTokens) - { - Disable-StrongName $key - } - - Write-Host "Done" -} \ No newline at end of file