mirror of
https://code.forgejo.org/actions/go-versions
synced 2025-07-05 00:05:58 +02:00
Implement builders to build Go from source code
This commit is contained in:
parent
8c06ab5f1e
commit
6cf25b0561
21 changed files with 836 additions and 0 deletions
110
builders/go-builder.psm1
Normal file
110
builders/go-builder.psm1
Normal file
|
@ -0,0 +1,110 @@
|
|||
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. Using system BUILD_STAGINGDIRECTORY variable value.
|
||||
|
||||
.PARAMETER ArtifactLocation
|
||||
The location of generated Go artifact. Using system environment BUILD_BINARIESDIRECTORY variable value.
|
||||
|
||||
.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 = $env:BUILD_BINARIESDIRECTORY
|
||||
$this.ArtifactFolderLocation = $env:BUILD_STAGINGDIRECTORY
|
||||
|
||||
|
||||
$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 "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()
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue