mirror of
https://github.com/actions/node-versions.git
synced 2025-01-11 02:25:19 +00:00
9f83a0c6de
Switch to using tar.gz format for Ubuntu and macOS systems because it is much more common on nix systems which is important in container scenarios
100 lines
3.0 KiB
PowerShell
100 lines
3.0 KiB
PowerShell
class NodeBuilder {
|
|
<#
|
|
.SYNOPSIS
|
|
Base Node.js builder class.
|
|
|
|
.DESCRIPTION
|
|
Base Node.js builder class that contains general builder methods.
|
|
|
|
.PARAMETER Version
|
|
The version of Node.js that should be built.
|
|
|
|
.PARAMETER Platform
|
|
The platform of Node.js that should be built.
|
|
|
|
.PARAMETER Architecture
|
|
The architecture with which Node.js should be built.
|
|
|
|
.PARAMETER TempFolderLocation
|
|
The location of temporary files that will be used during Node.js package generation. Using system BUILD_STAGINGDIRECTORY variable value.
|
|
|
|
.PARAMETER ArtifactLocation
|
|
The location of generated Node.js artifact. Using system environment BUILD_BINARIESDIRECTORY variable value.
|
|
|
|
.PARAMETER InstallationTemplatesLocation
|
|
The location of installation script template. Using "installers" folder from current repository.
|
|
|
|
#>
|
|
|
|
[version] $Version
|
|
[string] $Platform
|
|
[string] $Architecture
|
|
[string] $TempFolderLocation
|
|
[string] $WorkFolderLocation
|
|
[string] $ArtifactFolderLocation
|
|
[string] $InstallationTemplatesLocation
|
|
|
|
NodeBuilder ([version] $version, [string] $platform, [string] $architecture) {
|
|
$this.Version = $version
|
|
$this.Platform = $platform
|
|
$this.Architecture = $architecture
|
|
|
|
$this.TempFolderLocation = [IO.Path]::GetTempPath()
|
|
$this.WorkFolderLocation = $env:BUILD_BINARIESDIRECTORY
|
|
$this.ArtifactFolderLocation = $env:BUILD_STAGINGDIRECTORY
|
|
|
|
|
|
$this.InstallationTemplatesLocation = Join-Path -Path $PSScriptRoot -ChildPath "../installers"
|
|
}
|
|
|
|
[uri] GetBaseUri() {
|
|
<#
|
|
.SYNOPSIS
|
|
Return base URI for Node.js binaries.
|
|
#>
|
|
|
|
return "https://nodejs.org/download/release"
|
|
}
|
|
|
|
[string] Download() {
|
|
<#
|
|
.SYNOPSIS
|
|
Download Node.js binaries into artifact location.
|
|
#>
|
|
|
|
$binariesUri = $this.GetBinariesUri()
|
|
$targetFilename = [IO.Path]::GetFileName($binariesUri)
|
|
$targetFilepath = Join-Path -Path $this.TempFolderLocation -ChildPath $targetFilename
|
|
|
|
Write-Debug "Download binaries from $binariesUri to $targetFilepath"
|
|
try {
|
|
(New-Object System.Net.WebClient).DownloadFile($binariesUri, $targetFilepath)
|
|
} catch {
|
|
Write-Host "Error during downloading file from '$binariesUri'"
|
|
exit 1
|
|
}
|
|
|
|
Write-Debug "Done; Binaries location: $targetFilepath"
|
|
return $targetFilepath
|
|
}
|
|
|
|
[void] Build() {
|
|
<#
|
|
.SYNOPSIS
|
|
Generates Node.js artifact from downloaded binaries.
|
|
#>
|
|
|
|
Write-Host "Download Node.js $($this.Version) [$($this.Architecture)] executable..."
|
|
$binariesArchivePath = $this.Download()
|
|
|
|
Write-Host "Unpack binaries to target directory"
|
|
$this.ExtractBinaries($binariesArchivePath)
|
|
|
|
Write-Host "Create installation script..."
|
|
$this.CreateInstallationScript()
|
|
|
|
Write-Host "Archive artifact"
|
|
$this.ArchiveArtifact()
|
|
}
|
|
}
|