зеркало из https://github.com/microsoft/STL.git
122 строки
4.5 KiB
PowerShell
122 строки
4.5 KiB
PowerShell
# Copyright (c) Microsoft Corporation.
|
|
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
|
|
<#
|
|
.SYNOPSIS
|
|
Sets up a virtual machine to be an image for a hosted pool.
|
|
|
|
.DESCRIPTION
|
|
create-1es-hosted-pool.ps1 (running on an STL maintainer's machine) creates a "prototype" virtual machine in Azure,
|
|
then runs provision-image.ps1 on that VM. This gives us full control over what we install for building and testing
|
|
the STL. After provision-image.ps1 is done, create-1es-hosted-pool.ps1 makes an image of the prototype VM,
|
|
creates a 1ES Hosted Pool that will spin up copies of the image as worker VMs, and finally deletes the prototype VM.
|
|
#>
|
|
|
|
$ErrorActionPreference = 'Stop'
|
|
$ProgressPreference = 'SilentlyContinue'
|
|
|
|
if ($Env:COMPUTERNAME -cne 'PROTOTYPE') {
|
|
Write-Error 'You should not run provision-image.ps1 on your local machine.'
|
|
}
|
|
|
|
$VisualStudioWorkloads = @(
|
|
'Microsoft.VisualStudio.Component.VC.ASAN',
|
|
'Microsoft.VisualStudio.Component.VC.CLI.Support',
|
|
'Microsoft.VisualStudio.Component.VC.CMake.Project',
|
|
'Microsoft.VisualStudio.Component.VC.CoreIde',
|
|
'Microsoft.VisualStudio.Component.VC.Llvm.Clang',
|
|
'Microsoft.VisualStudio.Component.VC.Tools.ARM',
|
|
'Microsoft.VisualStudio.Component.VC.Tools.ARM64',
|
|
'Microsoft.VisualStudio.Component.VC.Tools.ARM64EC',
|
|
'Microsoft.VisualStudio.Component.VC.Tools.x86.x64',
|
|
'Microsoft.VisualStudio.Component.Windows11SDK.22621'
|
|
)
|
|
|
|
$VisualStudioUrl = 'https://aka.ms/vs/17/pre/vs_enterprise.exe'
|
|
$VisualStudioArgs = @('--quiet', '--norestart', '--wait', '--nocache')
|
|
foreach ($workload in $VisualStudioWorkloads) {
|
|
$VisualStudioArgs += '--add'
|
|
$VisualStudioArgs += $workload
|
|
}
|
|
|
|
# https://github.com/PowerShell/PowerShell/releases/latest
|
|
$PowerShellUrl = 'https://github.com/PowerShell/PowerShell/releases/download/v7.4.5/PowerShell-7.4.5-win-x64.msi'
|
|
$PowerShellArgs = @('/quiet', '/norestart')
|
|
|
|
$PythonUrl = 'https://www.python.org/ftp/python/3.13.0/python-3.13.0-amd64.exe'
|
|
$PythonArgs = @('/quiet', 'InstallAllUsers=1', 'PrependPath=1', 'CompileAll=1', 'Include_doc=0')
|
|
|
|
$CudaUrl = 'https://developer.download.nvidia.com/compute/cuda/12.4.0/local_installers/cuda_12.4.0_551.61_windows.exe'
|
|
$CudaArgs = @('-s')
|
|
|
|
<#
|
|
.SYNOPSIS
|
|
Download and install a component.
|
|
|
|
.DESCRIPTION
|
|
DownloadAndInstall downloads an executable from the given URL, and runs it with the given command-line arguments.
|
|
|
|
.PARAMETER Name
|
|
The name of the component, to be displayed in logging messages.
|
|
|
|
.PARAMETER Url
|
|
The URL of the installer.
|
|
|
|
.PARAMETER Args
|
|
The command-line arguments to pass to the installer.
|
|
#>
|
|
Function DownloadAndInstall {
|
|
[CmdletBinding(PositionalBinding=$false)]
|
|
Param(
|
|
[Parameter(Mandatory)][String]$Name,
|
|
[Parameter(Mandatory)][String]$Url,
|
|
[Parameter(Mandatory)][String[]]$Args
|
|
)
|
|
|
|
try {
|
|
Write-Host "Downloading $Name..."
|
|
$tempPath = 'D:\installerTemp'
|
|
mkdir $tempPath -Force | Out-Null
|
|
$fileName = [uri]::new($Url).Segments[-1]
|
|
$installerPath = Join-Path $tempPath $fileName
|
|
curl.exe -L -o $installerPath -s -S $Url
|
|
|
|
Write-Host "Installing $Name..."
|
|
$proc = Start-Process -FilePath $installerPath -ArgumentList $Args -Wait -PassThru
|
|
$exitCode = $proc.ExitCode
|
|
|
|
if ($exitCode -eq 0) {
|
|
Write-Host 'Installation successful!'
|
|
} elseif ($exitCode -eq 3010) {
|
|
Write-Host 'Installation successful! Exited with 3010 (ERROR_SUCCESS_REBOOT_REQUIRED).'
|
|
} else {
|
|
Write-Error "Installation failed! Exited with $exitCode."
|
|
}
|
|
|
|
Remove-Item -Path $installerPath
|
|
} catch {
|
|
Write-Error "Installation failed! Exception: $($_.Exception.Message)"
|
|
}
|
|
}
|
|
|
|
Write-Host "Old PowerShell version: $($PSVersionTable.PSVersion)"
|
|
|
|
# Print the Windows version, so we can verify whether Patch Tuesday has been picked up.
|
|
# Skip a blank line to improve the output.
|
|
(cmd /c ver)[1]
|
|
|
|
DownloadAndInstall -Name 'PowerShell' -Url $PowerShellUrl -Args $PowerShellArgs
|
|
DownloadAndInstall -Name 'Python' -Url $PythonUrl -Args $PythonArgs
|
|
DownloadAndInstall -Name 'Visual Studio' -Url $VisualStudioUrl -Args $VisualStudioArgs
|
|
DownloadAndInstall -Name 'CUDA' -Url $CudaUrl -Args $CudaArgs
|
|
|
|
Write-Host 'Setting environment variables...'
|
|
|
|
# The STL's PR/CI builds are totally unrepresentative of customer usage.
|
|
[Environment]::SetEnvironmentVariable('VSCMD_SKIP_SENDTELEMETRY', '1', 'Machine')
|
|
|
|
# Tell create-1es-hosted-pool.ps1 that we succeeded.
|
|
Write-Host 'PROVISION_IMAGE_SUCCEEDED'
|
|
|
|
exit
|