Get rid of nested archive #4

Merged
maxim-lobanov merged 9 commits from v-malob/switch-layout into master 2020-04-23 13:54:32 +05:00
10 changed files with 66 additions and 27 deletions

View File

@@ -1,5 +1,5 @@
jobs:
- job:
- job: Test_Node
pool:
name: Azure Pipelines
vmImage: $(VmImage)
@@ -21,11 +21,11 @@ jobs:
inputs:
source: 'current'
artifact: 'node-$(Version)-$(Platform)-$(Architecture)'
path: $(Build.BinariesDirectory)
path: $(Build.ArtifactStagingDirectory)
- task: ExtractFiles@1
inputs:
archiveFilePatterns: '$(Build.BinariesDirectory)/node-$(Version)-$(Platform)-$(Architecture).zip'
archiveFilePatterns: '$(Build.ArtifactStagingDirectory)/node-$(Version)-$(Platform)-$(Architecture).zip'
destinationFolder: $(Build.BinariesDirectory)
cleanDestinationFolder: false

View File

@@ -23,9 +23,11 @@ param(
[Parameter (Mandatory=$true)][Version] $Version,
[Parameter (Mandatory=$true)][string] $Platform,
[string] $Architecture = "x64"
)
Import-Module (Join-Path $PSScriptRoot "../helpers" | Join-Path -ChildPath "nix-helpers.psm1") -DisableNameChecking
Import-Module (Join-Path $PSScriptRoot "../helpers" | Join-Path -ChildPath "win-helpers.psm1") -DisableNameChecking
function Get-NodeBuilder {
<#
.SYNOPSIS

View File

@@ -40,6 +40,10 @@ class NixNodeBuilder : NodeBuilder {
return "${base}/v$($this.Version)/node-v$($this.Version)-$($this.Platform)-$($this.Architecture).tar.gz"
}
[void] ExtractBinaries($archivePath) {
Extract-TarArchive -ArchivePath $archivePath -OutputDirectory $this.ArtifactLocation
}
[void] CreateInstallationScript() {
<#
.SYNOPSIS

View File

@@ -15,6 +15,9 @@ class NodeBuilder {
.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.
@@ -26,6 +29,7 @@ class NodeBuilder {
[version] $Version
[string] $Platform
[string] $Architecture
[string] $TempFolderLocation
[string] $ArtifactLocation
[string] $InstallationTemplatesLocation
@@ -35,6 +39,7 @@ class NodeBuilder {
$this.Architecture = $architecture
$this.ArtifactLocation = $env:BUILD_BINARIESDIRECTORY
$this.TempFolderLocation = $env:BUILD_STAGINGDIRECTORY
$this.InstallationTemplatesLocation = Join-Path -Path $PSScriptRoot -ChildPath "../installers"
}
@@ -56,7 +61,7 @@ class NodeBuilder {
$binariesUri = $this.GetBinariesUri()
$targetFilename = [IO.Path]::GetFileName($binariesUri)
$targetFilepath = Join-Path -Path $this.ArtifactLocation -ChildPath $targetFilename
$targetFilepath = Join-Path -Path $this.TempFolderLocation -ChildPath $targetFilename
Write-Debug "Download binaries from $binariesUri to $targetFilepath"
try {
@@ -78,11 +83,9 @@ class NodeBuilder {
Write-Host "Download Node.js $($this.Version) [$($this.Architecture)] executable..."
$binariesArchivePath = $this.Download()
$binariesArchiveDirectory = [IO.Path]::GetDirectoryName($binariesArchivePath)
$toolArchivePath = Join-Path $binariesArchiveDirectory $this.OutputArtifactName
Write-Host "Rename '$binariesArchivePath' to '$toolArchivePath'"
Rename-Item -Path $binariesArchivePath -NewName $toolArchivePath
Write-Host "Unpack binaries to target directory"
$this.ExtractBinaries($binariesArchivePath)
Write-Host "Create installation script..."
$this.CreateInstallationScript()

View File

@@ -40,6 +40,13 @@ class WinNodeBuilder : NodeBuilder {
return "${base}/v$($this.Version)/node-v$($this.Version)-win-$($this.Architecture).7z"
}
[void] ExtractBinaries($archivePath) {
$extractTargetDirectory = Join-Path $this.TempFolderLocation "tempExtract"
Extract-7ZipArchive -ArchivePath $archivePath -OutputDirectory $extractTargetDirectory
$nodeOutputPath = Get-Item $extractTargetDirectory\* | Select-Object -First 1 -ExpandProperty Fullname
Move-Item -Path $nodeOutputPath\* -Destination $this.ArtifactLocation
}
[void] CreateInstallationScript() {
<#
.SYNOPSIS

16
helpers/nix-helpers.psm1 Normal file
View File

@@ -0,0 +1,16 @@
<#
.SYNOPSIS
Unpack *.tar file
#>
function Extract-TarArchive {
param(
[Parameter(Mandatory=$true)]
[String]$ArchivePath,
[Parameter(Mandatory=$true)]
[String]$OutputDirectory
)
Write-Debug "Extract $ArchivePath to $OutputDirectory"
tar -C $OutputDirectory -xzf $ArchivePath --strip 1
}

15
helpers/win-helpers.psm1 Normal file
View File

@@ -0,0 +1,15 @@
<#
.SYNOPSIS
Unpack *.7z file
#>
function Extract-7ZipArchive {
param(
[Parameter(Mandatory=$true)]
[String]$ArchivePath,
[Parameter(Mandatory=$true)]
[String]$OutputDirectory
)
Write-Debug "Extract $ArchivePath to $OutputDirectory"
7z x $ArchivePath -o"$OutputDirectory" -y | Out-Null
}

View File

@@ -18,14 +18,8 @@ echo "Create Node.js $NODE_VERSION folder"
mkdir -p $NODE_TOOLCACHE_VERSION_ARCH_PATH
echo "Copy Node.js binaries to hostedtoolcache folder"
cp ./tool.tar.gz $NODE_TOOLCACHE_VERSION_ARCH_PATH
cd $NODE_TOOLCACHE_VERSION_ARCH_PATH
echo "Unzip Node.js to $NODE_TOOLCACHE_VERSION_ARCH_PATH"
tar -zxf tool.tar.gz -C . --strip 1
echo "Node.js unzipped successfully"
rm tool.tar.gz
cp -R ./* $NODE_TOOLCACHE_VERSION_ARCH_PATH
rm $NODE_TOOLCACHE_VERSION_ARCH_PATH/setup.sh
echo "Create complete file"
touch $NODE_TOOLCACHE_VERSION_PATH/x64.complete

View File

@@ -1,4 +1,5 @@
$ErrorActionPreference = "Stop"
[Version]$Version = "{{__VERSION__}}"
[string]$Architecture = "{{__ARCHITECTURE__}}"
$ArchiveFileName = "tool.7z"
@@ -29,16 +30,8 @@ if (-not (Test-Path $NodeToolcacheArchitecturePath)) {
}
Write-Host "Copy Node.js binaries to hostedtoolcache folder"
Copy-Item -Path $ArchiveFileName -Destination $NodeToolcacheArchitecturePath
Set-Location $NodeToolcacheArchitecturePath
Write-Host "Unzip Node.js to $NodeToolcacheArchitecturePath"
7z.exe x $ArchiveFileName -o"$TempDirectory" -y | Out-Null
$NodeInnerFolder = Get-Item -Path "$TempDirectory\node-*" | Select-Object -First 1
Get-ChildItem $NodeInnerFolder | Move-Item -Destination $NodeToolcacheArchitecturePath
Write-Host "Node.js unzipped successfully"
Remove-Item $ArchiveFileName -Force | Out-Null
Copy-Item -Path * -Destination $NodeToolcacheArchitecturePath
Remove-Item $NodeToolcacheArchitecturePath\setup.ps1 -Force | Out-Null
Write-Host "Create complete file"
New-Item -ItemType File -Path $NodeToolcacheVersionPath -Name "$Architecture.complete" | Out-Null

View File

@@ -20,6 +20,11 @@ Describe "Node.js" {
"node --version" | Should -ReturnZeroExitCode
}
It "version is correct" {
$versionOutput = Invoke-Expression "node --version"
$versionOutput | Should -Match $Version
}
It "is used from tool-cache" {
$nodePath = (Get-Command "node").Path
$nodePath | Should -Not -BeNullOrEmpty