node-versions/builders/node-builder.psm1
2020-08-24 15:22:05 +03:00

106 lines
3.2 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.
.PARAMETER WorkFolderLocation
The location of installation files.
.PARAMETER ArtifactFolderLocation
The location of generated Node.js artifact.
.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 = Join-Path $env:RUNNER_TEMP "binaries"
$this.ArtifactFolderLocation = Join-Path $env:RUNNER_TEMP "artifact"
$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 "Create WorkFolderLocation and ArtifactFolderLocation folders"
New-Item -Path $this.WorkFolderLocation -ItemType "directory"
New-Item -Path $this.ArtifactFolderLocation -ItemType "directory"
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()
}
}