aboutsummaryrefslogtreecommitdiff
path: root/vcpkg/scripts/azure-pipelines/windows/utility-prefix.ps1
diff options
context:
space:
mode:
authorEthan Morgan <ethan@gweithio.com>2026-02-14 16:44:06 +0000
committerEthan Morgan <ethan@gweithio.com>2026-02-14 16:44:06 +0000
commit54409423f767d8b1cf30cb7d0efca6b4ca138823 (patch)
treed915ac7828703ce4b963efdd9728a1777ba18c1e /vcpkg/scripts/azure-pipelines/windows/utility-prefix.ps1
move to own git serverHEADmaster
Diffstat (limited to 'vcpkg/scripts/azure-pipelines/windows/utility-prefix.ps1')
-rw-r--r--vcpkg/scripts/azure-pipelines/windows/utility-prefix.ps1156
1 files changed, 156 insertions, 0 deletions
diff --git a/vcpkg/scripts/azure-pipelines/windows/utility-prefix.ps1 b/vcpkg/scripts/azure-pipelines/windows/utility-prefix.ps1
new file mode 100644
index 0000000..2e0b0f0
--- /dev/null
+++ b/vcpkg/scripts/azure-pipelines/windows/utility-prefix.ps1
@@ -0,0 +1,156 @@
+# Copyright (c) Microsoft Corporation.
+# SPDX-License-Identifier: MIT
+
+<#
+.SYNOPSIS
+Gets a random file path in the temp directory.
+
+.DESCRIPTION
+Get-TempFilePath takes an extension, and returns a path with a random
+filename component in the temporary directory with that extension.
+
+.PARAMETER Extension
+The extension to use for the path.
+#>
+Function Get-TempFilePath {
+ Param(
+ [String]$Extension
+ )
+
+ $tempPath = [System.IO.Path]::GetTempPath()
+ $tempName = [System.IO.Path]::GetRandomFileName()
+ if (-not [String]::IsNullOrWhiteSpace($Extension)) {
+ $tempName = $tempName + '.' + $Extension
+ }
+ return Join-Path $tempPath $tempName
+}
+
+<#
+.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,
+ [String]$LocalName = $null
+ )
+
+ try {
+ if ([string]::IsNullOrWhiteSpace($LocalName)) {
+ $LocalName = [uri]::new($Url).Segments[-1]
+ }
+
+ [bool]$doRemove = $false
+ [string]$LocalPath = Join-Path $PSScriptRoot $LocalName
+ if (Test-Path $LocalPath) {
+ Write-Host "Using local $Name..."
+ } else {
+ Write-Host "Downloading $Name..."
+ $tempPath = Get-TempFilePath
+ New-Item -ItemType Directory -Path $tempPath -Force | Out-Null
+ $LocalPath = Join-Path $tempPath $LocalName
+ curl.exe --fail -L -o $LocalPath $Url
+ if (-Not $?) {
+ Write-Error 'Download failed!'
+ }
+ $doRemove = $true
+ }
+
+ Write-Host "Installing $Name..."
+ $proc = Start-Process -FilePath $LocalPath -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."
+ }
+
+ if ($doRemove) {
+ Remove-Item -Path $LocalPath -Force
+ }
+ } catch {
+ Write-Error "Installation failed! Exception: $($_.Exception.Message)"
+ }
+}
+
+<#
+.SYNOPSIS
+Download and install a zip file component.
+
+.DESCRIPTION
+DownloadAndUnzip downloads a zip from the given URL, and extracts it to the indicated path.
+
+.PARAMETER Name
+The name of the component, to be displayed in logging messages.
+
+.PARAMETER Url
+The URL of the zip to download.
+
+.PARAMETER Destination
+The location to which the zip should be extracted
+#>
+Function DownloadAndUnzip {
+ [CmdletBinding(PositionalBinding=$false)]
+ Param(
+ [Parameter(Mandatory)][String]$Name,
+ [Parameter(Mandatory)][String]$Url,
+ [Parameter(Mandatory)][String]$Destination
+ )
+
+ try {
+ $fileName = [uri]::new($Url).Segments[-1]
+ if ([string]::IsNullOrWhiteSpace($LocalName)) {
+ $LocalName = $fileName
+ }
+
+ [string]$zipPath
+ [bool]$doRemove = $false
+ [string]$LocalPath = Join-Path $PSScriptRoot $LocalName
+ if (Test-Path $LocalPath) {
+ Write-Host "Using local $Name..."
+ $zipPath = $LocalPath
+ } else {
+ $tempPath = Get-TempFilePath
+ New-Item -ItemType Directory -Path $tempPath -Force | Out-Null
+ $zipPath = Join-Path $tempPath $LocalName
+ Write-Host "Downloading $Name ( $Url -> $zipPath )..."
+ curl.exe --fail -L -o $zipPath $Url
+ if (-Not $?) {
+ Write-Error 'Download failed!'
+ }
+ $doRemove = $true
+ }
+
+ Write-Host "Installing $Name to $Destination..."
+ & tar.exe -xvf $zipPath --strip 1 --directory $Destination
+ if ($LASTEXITCODE -eq 0) {
+ Write-Host 'Installation successful!'
+ } else {
+ Write-Error "Installation failed! Exited with $LASTEXITCODE."
+ }
+
+ if ($doRemove) {
+ Remove-Item -Path $zipPath -Force
+ }
+ } catch {
+ Write-Error "Installation failed! Exception: $($_.Exception.Message)"
+ }
+}