You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			117 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			PowerShell
		
	
			
		
		
	
	
			117 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			PowerShell
		
	
class GoBuilder {
 | 
						|
    <#
 | 
						|
    .SYNOPSIS
 | 
						|
    Base Go builder class.
 | 
						|
 | 
						|
    .DESCRIPTION
 | 
						|
    Base Go builder class that contains general builder methods.
 | 
						|
 | 
						|
    .PARAMETER Version
 | 
						|
    The version of Go that should be built.
 | 
						|
 | 
						|
    .PARAMETER Platform
 | 
						|
    The platform of Go that should be built.
 | 
						|
 | 
						|
    .PARAMETER Architecture
 | 
						|
    The architecture with which Go should be built.
 | 
						|
 | 
						|
    .PARAMETER TempFolderLocation
 | 
						|
    The location of temporary files that will be used during Go package generation.
 | 
						|
 | 
						|
    .PARAMETER WorkFolderLocation
 | 
						|
    The location of installation files.
 | 
						|
 | 
						|
    .PARAMETER ArtifactFolderLocation
 | 
						|
    The location of generated Go 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
 | 
						|
 | 
						|
    GoBuilder ([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] GetBinariesUri() {
 | 
						|
        <#
 | 
						|
        .SYNOPSIS
 | 
						|
        Get base Go URI and return complete URI for Go installation executable.
 | 
						|
        #>
 | 
						|
 | 
						|
        $arch = ($this.Architecture -eq "x64") ? "amd64" : $this.Architecture
 | 
						|
        $goPlatform = ($this.Platform -Match "win32") ? "windows" : $this.Platform
 | 
						|
        $ArchiveType = ($this.Platform -Match "win32") ? "zip" : "tar.gz"
 | 
						|
        If ($this.Version.Build -eq "0") {
 | 
						|
            $goVersion = "go$($this.Version.ToString(2))"
 | 
						|
        } else {
 | 
						|
            $goVersion = "go$($this.Version.ToString(3))"
 | 
						|
        }
 | 
						|
 | 
						|
        $filename = "$goVersion.$goPlatform-$arch.$ArchiveType"
 | 
						|
 | 
						|
        return "https://storage.googleapis.com/golang/$filename"
 | 
						|
    }
 | 
						|
 | 
						|
    [string] Download() {
 | 
						|
        <#
 | 
						|
        .SYNOPSIS
 | 
						|
        Download Go 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 Go 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 Go $($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()
 | 
						|
    }
 | 
						|
}
 |