mirror of
https://github.com/SPLURT-Station/S.P.L.U.R.T-Station-13.git
synced 2025-12-09 16:07:40 +00:00
68 lines
1.9 KiB
PowerShell
68 lines
1.9 KiB
PowerShell
## bootstrap/node_.ps1
|
|
## Downloads a Node version to a cache directory and invokes it.
|
|
|
|
$ErrorActionPreference = "Stop"
|
|
|
|
function Extract-Variable {
|
|
param([string] $Path, [string] $Key)
|
|
foreach ($Line in Get-Content $Path) {
|
|
if ($Line.StartsWith("export $Key=")) {
|
|
return $Line.Substring("export $Key=".Length)
|
|
}
|
|
}
|
|
throw "Couldn't find value for $Key in $Path"
|
|
}
|
|
|
|
function Download-Node {
|
|
if (Test-Path $NodeTarget -PathType Leaf) {
|
|
return
|
|
}
|
|
Write-Output "Downloading Node v$NodeVersion (may take a while)"
|
|
New-Item $NodeTargetDir -ItemType Directory -ErrorAction silentlyContinue | Out-Null
|
|
$WebClient = New-Object Net.WebClient
|
|
$WebClient.DownloadFile($NodeSource, $NodeTarget)
|
|
}
|
|
|
|
## Convenience variables
|
|
$BaseDir = Split-Path $script:MyInvocation.MyCommand.Path
|
|
$Cache = "$BaseDir\.cache"
|
|
if ($Env:TG_BOOTSTRAP_CACHE) {
|
|
$Cache = $Env:TG_BOOTSTRAP_CACHE
|
|
}
|
|
# Get OS version
|
|
$OSMajor = (Get-WmiObject -Class Win32_OperatingSystem).Version.Split(".")[0]
|
|
# Set Node version based on OS version
|
|
if ($OSMajor -lt 10) {
|
|
# Anything under Windows 10
|
|
$NodeVersion = Extract-Variable -Path "$BaseDir\..\..\dependencies.sh" -Key "NODE_VERSION_COMPAT"
|
|
}
|
|
else {
|
|
$NodeVersion = Extract-Variable -Path "$BaseDir\..\..\dependencies.sh" -Key "NODE_VERSION_LTS"
|
|
}
|
|
$NodeSource = "https://nodejs.org/download/release/v$NodeVersion/win-x64/node.exe"
|
|
$NodeTargetDir = "$Cache\node-v$NodeVersion-x64"
|
|
$NodeTarget = "$NodeTargetDir\node.exe"
|
|
|
|
## Just print the path and exit
|
|
if ($Args.length -eq 1 -and $Args[0] -eq "Get-Path") {
|
|
Write-Output "$NodeTargetDir"
|
|
exit 0
|
|
}
|
|
|
|
## Just download node and exit
|
|
if ($Args.length -eq 1 -and $Args[0] -eq "Download-Node") {
|
|
Download-Node
|
|
exit 0
|
|
}
|
|
|
|
## Download node
|
|
Download-Node
|
|
|
|
## Set PATH so that recursive calls find it
|
|
$Env:PATH = "$NodeTargetDir;$ENV:Path"
|
|
|
|
## Invoke Node with all command-line arguments
|
|
$ErrorActionPreference = "Continue"
|
|
& "$NodeTarget" @Args
|
|
exit $LastExitCode
|