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
This commit is contained in:
Maxim Lobanov 2020-04-23 18:42:48 +03:00 committed by GitHub
parent e510e2cfd6
commit 9f83a0c6de
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 65 additions and 22 deletions

View File

@ -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)'

View File

@ -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

View File

@ -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
}
}

View File

@ -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()
}
}

View File

@ -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
}
}

View File

@ -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
}

View File

@ -2,7 +2,7 @@
.SYNOPSIS
Unpack *.7z file
#>
function Extract-7ZipArchive {
function Extract-SevenZipArchive {
param(
[Parameter(Mandatory=$true)]
[String]$ArchivePath,
@ -13,3 +13,22 @@ 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
}