mirror of
https://github.com/tailscale/tailscale.git
synced 2025-06-29 19:48:38 +00:00
65 lines
2.2 KiB
PowerShell
65 lines
2.2 KiB
PowerShell
![]() |
<#
|
|||
|
go.ps1 – Tailscale Go toolchain fetching wrapper for Windows/PowerShell
|
|||
|
• Reads go.toolchain.rev one dir above this script
|
|||
|
• If the requested commit hash isn't cached, downloads and unpacks
|
|||
|
https://github.com/tailscale/go/releases/download/build-${REV}/${OS}-${ARCH}.tar.gz
|
|||
|
• Finally execs the toolchain's "go" binary, forwarding all args & exit-code
|
|||
|
#>
|
|||
|
|
|||
|
param(
|
|||
|
[Parameter(ValueFromRemainingArguments = $true)]
|
|||
|
[string[]] $Args
|
|||
|
)
|
|||
|
|
|||
|
Set-StrictMode -Version Latest
|
|||
|
$ErrorActionPreference = 'Stop'
|
|||
|
|
|||
|
if ($env:CI -eq 'true' -and $env:NODEBUG -ne 'true') {
|
|||
|
$VerbosePreference = 'Continue'
|
|||
|
}
|
|||
|
|
|||
|
$repoRoot = Resolve-Path (Join-Path $PSScriptRoot '..')
|
|||
|
$REV = (Get-Content (Join-Path $repoRoot 'go.toolchain.rev') -Raw).Trim()
|
|||
|
|
|||
|
if ([IO.Path]::IsPathRooted($REV)) {
|
|||
|
$toolchain = $REV
|
|||
|
} else {
|
|||
|
if (-not [string]::IsNullOrWhiteSpace($env:TSGO_CACHE_ROOT)) {
|
|||
|
$cacheRoot = $env:TSGO_CACHE_ROOT
|
|||
|
} else {
|
|||
|
$cacheRoot = Join-Path $env:USERPROFILE '.cache\tsgo'
|
|||
|
}
|
|||
|
|
|||
|
$toolchain = Join-Path $cacheRoot $REV
|
|||
|
$marker = "$toolchain.extracted"
|
|||
|
|
|||
|
if (-not (Test-Path $marker)) {
|
|||
|
Write-Host "# Downloading Go toolchain $REV" -ForegroundColor Cyan
|
|||
|
if (Test-Path $toolchain) { Remove-Item -Recurse -Force $toolchain }
|
|||
|
|
|||
|
# Removing the marker file again (even though it shouldn't still exist)
|
|||
|
# because the equivalent Bash script also does so (to guard against
|
|||
|
# concurrent cache fills?).
|
|||
|
# TODO(bradfitz): remove this and add some proper locking instead?
|
|||
|
if (Test-Path $marker ) { Remove-Item -Force $marker }
|
|||
|
|
|||
|
New-Item -ItemType Directory -Path $cacheRoot -Force | Out-Null
|
|||
|
|
|||
|
$url = "https://github.com/tailscale/go/releases/download/build-$REV/windows-amd64.tar.gz"
|
|||
|
$tgz = "$toolchain.tar.gz"
|
|||
|
Invoke-WebRequest -Uri $url -OutFile $tgz -UseBasicParsing -ErrorAction Stop
|
|||
|
|
|||
|
New-Item -ItemType Directory -Path $toolchain -Force | Out-Null
|
|||
|
tar --strip-components=1 -xzf $tgz -C $toolchain
|
|||
|
Remove-Item $tgz
|
|||
|
Set-Content -Path $marker -Value $REV
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
$goExe = Join-Path $toolchain 'bin\go.exe'
|
|||
|
if (-not (Test-Path $goExe)) { throw "go executable not found at $goExe" }
|
|||
|
|
|||
|
& $goExe @Args
|
|||
|
exit $LASTEXITCODE
|
|||
|
|