From 9f83a0c6dedb2783f663533ffdea7bedef6466d9 Mon Sep 17 00:00:00 2001 From: Maxim Lobanov Date: Thu, 23 Apr 2020 18:42:48 +0300 Subject: [PATCH] Switch packages for Ubuntu & macOS to use tar.gz format instead of zip (#6) 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 --- azure-pipelines/templates/build-job.yml | 10 +--------- azure-pipelines/templates/test-job.yml | 4 ++-- builders/nix-node-builder.psm1 | 11 ++++++++--- builders/node-builder.psm1 | 12 +++++++++--- builders/win-node-builder.psm1 | 13 +++++++++---- helpers/nix-helpers.psm1 | 16 ++++++++++++++++ helpers/win-helpers.psm1 | 21 ++++++++++++++++++++- 7 files changed, 65 insertions(+), 22 deletions(-) diff --git a/azure-pipelines/templates/build-job.yml b/azure-pipelines/templates/build-job.yml index db625d8..4cd5923 100644 --- a/azure-pipelines/templates/build-job.yml +++ b/azure-pipelines/templates/build-job.yml @@ -14,16 +14,8 @@ jobs: filePath: './builders/build-node.ps1' arguments: '-Version $(Version) -Platform $(Platform) -Architecture $(Architecture)' - - task: ArchiveFiles@2 - displayName: 'Archive artifact' - inputs: - rootFolderOrFile: '$(Build.BinariesDirectory)' - archiveType: zip - includeRootFolder: false - archiveFile: '$(Build.ArtifactStagingDirectory)/node-$(Version)-$(Platform)-$(Architecture).zip' - - task: PublishPipelineArtifact@1 displayName: 'Publish Artifact: Node.js $(Version)' inputs: - targetPath: '$(Build.ArtifactStagingDirectory)/node-$(Version)-$(Platform)-$(Architecture).zip' + targetPath: '$(Build.ArtifactStagingDirectory)' artifactName: 'node-$(Version)-$(Platform)-$(Architecture)' \ No newline at end of file diff --git a/azure-pipelines/templates/test-job.yml b/azure-pipelines/templates/test-job.yml index 4c88389..d823162 100644 --- a/azure-pipelines/templates/test-job.yml +++ b/azure-pipelines/templates/test-job.yml @@ -8,7 +8,7 @@ jobs: submodules: true - task: PowerShell@2 - displayName: Fully cleanup the toolcache directory + displayName: Fully cleanup the toolcache directory before testing inputs: TargetType: inline script: | @@ -25,7 +25,7 @@ jobs: - task: ExtractFiles@1 inputs: - archiveFilePatterns: '$(Build.ArtifactStagingDirectory)/node-$(Version)-$(Platform)-$(Architecture).zip' + archiveFilePatterns: '$(Build.ArtifactStagingDirectory)/node-$(Version)-$(Platform)-$(Architecture).*' destinationFolder: $(Build.BinariesDirectory) cleanDestinationFolder: false diff --git a/builders/nix-node-builder.psm1 b/builders/nix-node-builder.psm1 index c56cd80..470d710 100644 --- a/builders/nix-node-builder.psm1 +++ b/builders/nix-node-builder.psm1 @@ -27,7 +27,7 @@ class NixNodeBuilder : NodeBuilder { ) : Base($version, $platform, $architecture) { $this.InstallationTemplateName = "nix-setup-template.sh" $this.InstallationScriptName = "setup.sh" - $this.OutputArtifactName = "tool.tar.gz" + $this.OutputArtifactName = "node-$Version-$Platform-$Architecture.tar.gz" } [uri] GetBinariesUri() { @@ -41,7 +41,7 @@ class NixNodeBuilder : NodeBuilder { } [void] ExtractBinaries($archivePath) { - Extract-TarArchive -ArchivePath $archivePath -OutputDirectory $this.ArtifactLocation + Extract-TarArchive -ArchivePath $archivePath -OutputDirectory $this.WorkFolderLocation } [void] CreateInstallationScript() { @@ -50,7 +50,7 @@ class NixNodeBuilder : NodeBuilder { Create Node.js artifact installation script based on template specified in InstallationTemplateName property. #> - $installationScriptLocation = New-Item -Path $this.ArtifactLocation -Name $this.InstallationScriptName -ItemType File + $installationScriptLocation = New-Item -Path $this.WorkFolderLocation -Name $this.InstallationScriptName -ItemType File $installationTemplateLocation = Join-Path -Path $this.InstallationTemplatesLocation -ChildPath $this.InstallationTemplateName $installationTemplateContent = Get-Content -Path $installationTemplateLocation -Raw @@ -59,4 +59,9 @@ class NixNodeBuilder : NodeBuilder { Write-Debug "Done; Installation script location: $installationScriptLocation)" } + + [void] ArchiveArtifact() { + $OutputPath = Join-Path $this.ArtifactFolderLocation $this.OutputArtifactName + Create-TarArchive -SourceFolder $this.WorkFolderLocation -ArchivePath $OutputPath + } } diff --git a/builders/node-builder.psm1 b/builders/node-builder.psm1 index 21ef28f..d3688c9 100644 --- a/builders/node-builder.psm1 +++ b/builders/node-builder.psm1 @@ -30,7 +30,8 @@ class NodeBuilder { [string] $Platform [string] $Architecture [string] $TempFolderLocation - [string] $ArtifactLocation + [string] $WorkFolderLocation + [string] $ArtifactFolderLocation [string] $InstallationTemplatesLocation NodeBuilder ([version] $version, [string] $platform, [string] $architecture) { @@ -38,8 +39,10 @@ class NodeBuilder { $this.Platform = $platform $this.Architecture = $architecture - $this.ArtifactLocation = $env:BUILD_BINARIESDIRECTORY - $this.TempFolderLocation = $env:BUILD_STAGINGDIRECTORY + $this.TempFolderLocation = [IO.Path]::GetTempPath() + $this.WorkFolderLocation = $env:BUILD_BINARIESDIRECTORY + $this.ArtifactFolderLocation = $env:BUILD_STAGINGDIRECTORY + $this.InstallationTemplatesLocation = Join-Path -Path $PSScriptRoot -ChildPath "../installers" } @@ -89,5 +92,8 @@ class NodeBuilder { Write-Host "Create installation script..." $this.CreateInstallationScript() + + Write-Host "Archive artifact" + $this.ArchiveArtifact() } } diff --git a/builders/win-node-builder.psm1 b/builders/win-node-builder.psm1 index 0246b26..97c40d3 100644 --- a/builders/win-node-builder.psm1 +++ b/builders/win-node-builder.psm1 @@ -27,7 +27,7 @@ class WinNodeBuilder : NodeBuilder { ) : Base($version, $platform, $architecture) { $this.InstallationTemplateName = "win-setup-template.ps1" $this.InstallationScriptName = "setup.ps1" - $this.OutputArtifactName = "tool.7z" + $this.OutputArtifactName = "node-$Version-$Platform-$Architecture.zip" } [uri] GetBinariesUri() { @@ -42,9 +42,9 @@ class WinNodeBuilder : NodeBuilder { [void] ExtractBinaries($archivePath) { $extractTargetDirectory = Join-Path $this.TempFolderLocation "tempExtract" - Extract-7ZipArchive -ArchivePath $archivePath -OutputDirectory $extractTargetDirectory + Extract-SevenZipArchive -ArchivePath $archivePath -OutputDirectory $extractTargetDirectory $nodeOutputPath = Get-Item $extractTargetDirectory\* | Select-Object -First 1 -ExpandProperty Fullname - Move-Item -Path $nodeOutputPath\* -Destination $this.ArtifactLocation + Move-Item -Path $nodeOutputPath\* -Destination $this.WorkFolderLocation } [void] CreateInstallationScript() { @@ -53,7 +53,7 @@ class WinNodeBuilder : NodeBuilder { Create Node.js artifact installation script based on specified template. #> - $installationScriptLocation = New-Item -Path $this.ArtifactLocation -Name $this.InstallationScriptName -ItemType File + $installationScriptLocation = New-Item -Path $this.WorkFolderLocation -Name $this.InstallationScriptName -ItemType File $installationTemplateLocation = Join-Path -Path $this.InstallationTemplatesLocation -ChildPath $this.InstallationTemplateName $installationTemplateContent = Get-Content -Path $installationTemplateLocation -Raw @@ -66,4 +66,9 @@ class WinNodeBuilder : NodeBuilder { $installationTemplateContent | Out-File -FilePath $installationScriptLocation Write-Debug "Done; Installation script location: $installationScriptLocation)" } + + [void] ArchiveArtifact() { + $OutputPath = Join-Path $this.ArtifactFolderLocation $this.OutputArtifactName + Create-SevenZipArchive -SourceFolder $this.WorkFolderLocation -ArchivePath $OutputPath + } } diff --git a/helpers/nix-helpers.psm1 b/helpers/nix-helpers.psm1 index 6c5bdb4..e6e3441 100644 --- a/helpers/nix-helpers.psm1 +++ b/helpers/nix-helpers.psm1 @@ -12,5 +12,21 @@ function Extract-TarArchive { Write-Debug "Extract $ArchivePath to $OutputDirectory" tar -C $OutputDirectory -xzf $ArchivePath --strip 1 +} +function Create-TarArchive { + param( + [Parameter(Mandatory=$true)] + [String]$SourceFolder, + [Parameter(Mandatory=$true)] + [String]$ArchivePath, + [string]$CompressionType = "gz" + ) + + $CompressionTypeArgument = If ([string]::IsNullOrWhiteSpace($CompressionType)) { "" } else { "--${CompressionType}" } + + Push-Location $SourceFolder + Write-Debug "tar -c $CompressionTypeArgument -f $ArchivePath ." + tar -c $CompressionTypeArgument -f $ArchivePath . + Pop-Location } \ No newline at end of file diff --git a/helpers/win-helpers.psm1 b/helpers/win-helpers.psm1 index 9520fbd..74a16f3 100644 --- a/helpers/win-helpers.psm1 +++ b/helpers/win-helpers.psm1 @@ -2,7 +2,7 @@ .SYNOPSIS Unpack *.7z file #> -function Extract-7ZipArchive { +function Extract-SevenZipArchive { param( [Parameter(Mandatory=$true)] [String]$ArchivePath, @@ -12,4 +12,23 @@ function Extract-7ZipArchive { Write-Debug "Extract $ArchivePath to $OutputDirectory" 7z x $ArchivePath -o"$OutputDirectory" -y | Out-Null +} + +function Create-SevenZipArchive { + param( + [Parameter(Mandatory=$true)] + [String]$SourceFolder, + [Parameter(Mandatory=$true)] + [String]$ArchivePath, + [String]$ArchiveType = "zip", + [String]$CompressionLevel = 5 + ) + + $ArchiveTypeArgument = "-t${ArchiveType}" + $CompressionLevelArgument = "-mx=${CompressionLevel}" + + Push-Location $SourceFolder + Write-Debug "7z a $ArchiveTypeArgument $CompressionLevelArgument $ArchivePath @$SourceFolder" + 7z a $ArchiveTypeArgument $CompressionLevelArgument $ArchivePath $SourceFolder\* + Pop-Location } \ No newline at end of file