Compare commits

..

No commits in common. "main" and "1.14.6-20200717.1" have entirely different histories.

20 changed files with 455 additions and 3724 deletions

1
.github/CODEOWNERS vendored
View File

@ -1 +0,0 @@
* @actions/setup-actions-team

View File

@ -1,31 +0,0 @@
name: Generate Go package
run-name: Generate Go ${{ inputs.VERSION || '1.19.0' }}
on:
workflow_dispatch:
inputs:
VERSION:
description: 'Go version to build and upload'
required: true
default: '1.19.0'
PUBLISH_RELEASES:
description: 'Whether to publish releases'
type: boolean
required: true
default: false
pull_request:
paths-ignore:
- 'versions-manifest.json'
- 'LICENSE'
- '**.md'
branches:
- 'main'
jobs:
go:
name: Go
uses: actions/versions-package-tools/.github/workflows/build-tool-packages.yml@main
with:
tool-name: "go"
tool-version: ${{ inputs.VERSION || '1.19.0' }}
publish-release: ${{ inputs.PUBLISH_RELEASES || false }}
secrets: inherit

View File

@ -1,16 +0,0 @@
name: CodeQL analysis
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
schedule:
- cron: '0 3 * * 0'
jobs:
call-codeQL-analysis:
name: CodeQL analysis
uses: actions/reusable-workflows/.github/workflows/codeql-analysis.yml@main
with:
languages: '["go"]'

View File

@ -1,10 +0,0 @@
name: Create Pull Request
on:
workflow_dispatch:
jobs:
create-pr:
uses: actions/versions-package-tools/.github/workflows/create-pr-to-update-manifest.yml@main
with:
tool-name: "go"
secrets: inherit

View File

@ -1,13 +0,0 @@
name: Get Go versions
on:
schedule:
- cron: '0 3,15 * * *'
workflow_dispatch:
jobs:
get-new-go-versions:
uses: actions/versions-package-tools/.github/workflows/get-new-tool-versions.yml@main
with:
tool-name: "Go"
image-url: "https://go.dev/images/gopher-footer.jpg"
secrets: inherit

View File

@ -1,21 +0,0 @@
name: Validate manifest
on:
# The GITHUB_TOKEN secret is used to create a PR
# The pull_request event will not be triggered by it
# That's one of the reasons we need the schedule to validate the versions-manifest.json file
schedule:
- cron: '0 8,20 * * *'
workflow_dispatch:
pull_request:
branches:
- main
paths:
- 'versions-manifest.json'
jobs:
manifest:
uses: actions/versions-package-tools/.github/workflows/validate-manifest.yml@main
with:
tool-name: "Go"
image-url: "https://go.dev/images/gopher-footer.jpg"
secrets: inherit

View File

@ -29,20 +29,22 @@ Here are a few things you can do that will increase the likelihood of your pull
### Directory structure ### Directory structure
``` ```
├── .github/ ├── azure-pipelines/
| └──workflows/ | └──templates/
├── builders/ ├── builders/
├── helpers/ ├── helpers/
├── installers/ ├── installers/
└── tests/ └── tests/
└──sources/ └──sources/
``` ```
- `.github/workflows` - contains repository workflow files. - `azure-pipelines*` - contains global YAML definitions for build pipelines. Reusable templates for specific jobs are located in `templates` subfolder.
- `builders` - contains Go builder classes and functions. - `builders` - contains Go builder classes and functions.
- `helpers` - contains global helper classes and functions. - `helpers` - contains global helper functions and functions.
- `installers` - contains installation script templates. - `installers` - contains installation script templates.
- `tests` - contains test scripts. Required tests sources are located in `sources` subfolder. - `tests` - contains test scripts. Required tests sources are located in `sources` subfolder.
\* _We use Azure Pipelines because there are a few features that Actions is still missing, we'll move to Actions as soon as possible_.
## Resources ## Resources
- [How to Contribute to Open Source](https://opensource.guide/how-to-contribute/) - [How to Contribute to Open Source](https://opensource.guide/how-to-contribute/)

View File

@ -1,18 +1,15 @@
# Go for Actions # Go for Actions
This repository contains the code and scripts that we use to prepare Go packages used in [runner-images](https://github.com/actions/runner-images) and accessible through the [setup-go](https://github.com/actions/setup-go) Action. This repository contains the code and scripts that we use to prepare Go packages used in [virtual-environments](https://github.com/actions/virtual-environments) and accessible through the [setup-go](https://github.com/actions/setup-go) Action.
The file [versions-manifest.json](./versions-manifest.json) contains the list of available and released versions. The file [versions-manifest.json](./versions-manifest.json) contains the list of available and released versions.
> Caution: this is prepared for and only permitted for use by actions `runner-images` and `setup-go` action. > Caution: this is prepared for and only permitted for use by actions `virtual-environments` and `setup-go` action.
**Status**: Currently under development and in use for beta and preview actions. This repo is undergoing rapid changes. **Status**: Currently under development and in use for beta and preview actions. This repo is undergoing rapid changes.
Latest of LTS versions will be installed on the [runner-images](https://github.com/actions/runner-images) images. Other versions will be pulled JIT using the [`setup-go`](https://github.com/actions/setup-go) action. Latest of LTS versions will be installed on the [virtual-environments](https://github.com/actions/virtual-environments) images. Other versions will be pulled JIT using the [`setup-go`](https://github.com/actions/setup-go) action.
## Adding new versions ## Adding new versions
We are trying to prepare packages for new versions of Go as soon as they are released. Please open an issue in [actions/runner-images](https://github.com/actions/runner-images) if any versions are missing. We are trying to prepare packages for new versions of Go as soon as they are released. Please open an issue in [actions/virtual-environments](https://github.com/actions/virtual-environments) if any versions are missing.
## Support Notification Policy
Beginning **approximately six months prior** to the removal of a Go version from the [versions-manifest.json](https://github.com/actions/go-versions/blob/main/versions-manifest.json) file, a pinned issue will be created in the [setup-go](https://github.com/actions/setup-go) repository. This pinned issue will provide important details about the upcoming end of support, including the specific date, as well as any other notes, relevant updates or alternatives. We encourage users to regularly check pinned issues for updates on tool versions they are using for maximum transparency, security, performance and overall compatibility with their projects.
## Contribution ## Contribution
Contributions are welcome! See [Contributor's Guide](./CONTRIBUTING.md) for more details about contribution process and code structure Contributions are welcome! See [Contributor's Guide](./CONTRIBUTING.md) for more details about contribution process and code structure

View File

@ -0,0 +1,65 @@
name: $(date:yyyyMMdd)$(rev:.r)-Go-$(VERSION)
trigger: none
pr:
autoCancel: true
branches:
include:
- main
paths:
exclude:
- versions-manifest.json
stages:
- stage: Build_Go_Darwin
dependsOn: []
variables:
Platform: darwin
Architecture: x64
jobs:
- template: /azure-pipelines/templates/build-job.yml
- stage: Test_Go_Darwin
condition: succeeded()
dependsOn: Build_Go_Darwin
variables:
VmImage: macOS-latest
Platform: darwin
Architecture: x64
jobs:
- template: /azure-pipelines/templates/test-job.yml
- stage: Build_Go_Linux
dependsOn: []
variables:
Platform: linux
Architecture: x64
jobs:
- template: /azure-pipelines/templates/build-job.yml
- stage: Test_Go_Linux
condition: succeeded()
dependsOn: Build_Go_Linux
variables:
VmImage: ubuntu-latest
Platform: linux
Architecture: x64
jobs:
- template: /azure-pipelines/templates/test-job.yml
- stage: Build_Go_Windows
dependsOn: []
variables:
Platform: win32
Architecture: x64
jobs:
- template: /azure-pipelines/templates/build-job.yml
- stage: Test_Go_Windows
condition: succeeded()
dependsOn: Build_Go_Windows
variables:
VmImage: windows-latest
Platform: win32
Architecture: x64
jobs:
- template: /azure-pipelines/templates/test-job.yml

View File

@ -0,0 +1,21 @@
jobs:
- job: Build_Go
timeoutInMinutes: 90
pool:
name: Azure Pipelines
vmImage: ubuntu-latest
steps:
- checkout: self
- task: PowerShell@2
displayName: 'Build Go $(Version)'
inputs:
targetType: filePath
filePath: './builders/build-go.ps1'
arguments: '-Version $(Version) -Platform $(Platform) -Architecture $(Architecture)'
- task: PublishPipelineArtifact@1
displayName: 'Publish Artifact: Go $(Version)'
inputs:
targetPath: '$(Build.ArtifactStagingDirectory)'
artifactName: 'go-$(Version)-$(Platform)-$(Architecture)'

View File

@ -0,0 +1,75 @@
jobs:
- job: Test_Go
pool:
name: Azure Pipelines
vmImage: $(VmImage)
steps:
- checkout: self
submodules: true
- task: PowerShell@2
displayName: Fully cleanup the toolcache directory before testing
inputs:
targetType: filePath
filePath: helpers/clean-toolcache.ps1
arguments: -ToolName "go"
- task: DownloadPipelineArtifact@2
inputs:
source: 'current'
artifact: 'go-$(Version)-$(Platform)-$(Architecture)'
path: $(Build.ArtifactStagingDirectory)
- task: ExtractFiles@1
inputs:
archiveFilePatterns: '$(Build.ArtifactStagingDirectory)/go-$(Version)-$(Platform)-$(Architecture).*'
destinationFolder: $(Build.BinariesDirectory)
cleanDestinationFolder: false
- task: PowerShell@2
displayName: 'Apply build artifact to the local machines'
inputs:
targetType: inline
script: |
if ("$(Platform)" -match 'win32') { powershell ./setup.ps1 } else { sh ./setup.sh }
workingDirectory: '$(Build.BinariesDirectory)'
- task: GoTool@0
inputs:
version: '$(Version)'
- task: PowerShell@2
displayName: 'Wait for the logs'
inputs:
targetType: inline
script: |
Write-Host "Fake step that do nothing"
Write-Host "We need it because log of previous step 'Use Go' is not available here yet."
Write-Host "In testing step (Go.Tests.ps1) we analyze build log of 'GoTool' task"
Write-Host "to determine if Go version was consumed from cache and was downloaded"
- task: PowerShell@2
displayName: 'Run tests'
inputs:
TargetType: inline
script: |
Install-Module Pester -Force -Scope CurrentUser -RequiredVersion 4.10.1
Import-Module Pester
$pesterParams = @{
Path="./Go.Tests.ps1";
Parameters=@{
Version="$(Version)";
}
}
Invoke-Pester -Script $pesterParams -OutputFile "$(Build.SourcesDirectory)/tests/test_results.xml" -OutputFormat NUnitXml
workingDirectory: '$(Build.SourcesDirectory)/tests'
- task: PublishTestResults@2
displayName: 'Publish test results'
inputs:
testResultsFiles: '*.xml'
testResultsFormat: NUnit
searchFolder: 'tests'
failTaskOnFailedTests: true
testRunTitle: "Go $(Version)-$(Platform)"
condition: always()

View File

@ -1,5 +1,5 @@
using module "./win-go-builder.psm1" using module "./builders/win-go-builder.psm1"
using module "./nix-go-builder.psm1" using module "./builders/nix-go-builder.psm1"
<# <#
.SYNOPSIS .SYNOPSIS

View File

@ -16,13 +16,10 @@ class GoBuilder {
The architecture with which Go should be built. The architecture with which Go should be built.
.PARAMETER TempFolderLocation .PARAMETER TempFolderLocation
The location of temporary files that will be used during Go package generation. The location of temporary files that will be used during Go package generation. Using system BUILD_STAGINGDIRECTORY variable value.
.PARAMETER WorkFolderLocation .PARAMETER ArtifactLocation
The location of installation files. The location of generated Go artifact. Using system environment BUILD_BINARIESDIRECTORY variable value.
.PARAMETER ArtifactFolderLocation
The location of generated Go artifact.
.PARAMETER InstallationTemplatesLocation .PARAMETER InstallationTemplatesLocation
The location of installation script template. Using "installers" folder from current repository. The location of installation script template. Using "installers" folder from current repository.
@ -43,8 +40,9 @@ class GoBuilder {
$this.Architecture = $architecture $this.Architecture = $architecture
$this.TempFolderLocation = [IO.Path]::GetTempPath() $this.TempFolderLocation = [IO.Path]::GetTempPath()
$this.WorkFolderLocation = Join-Path $env:RUNNER_TEMP "binaries" $this.WorkFolderLocation = $env:BUILD_BINARIESDIRECTORY
$this.ArtifactFolderLocation = Join-Path $env:RUNNER_TEMP "artifact" $this.ArtifactFolderLocation = $env:BUILD_STAGINGDIRECTORY
$this.InstallationTemplatesLocation = Join-Path -Path $PSScriptRoot -ChildPath "../installers" $this.InstallationTemplatesLocation = Join-Path -Path $PSScriptRoot -ChildPath "../installers"
} }
@ -58,7 +56,7 @@ class GoBuilder {
$arch = ($this.Architecture -eq "x64") ? "amd64" : $this.Architecture $arch = ($this.Architecture -eq "x64") ? "amd64" : $this.Architecture
$goPlatform = ($this.Platform -Match "win32") ? "windows" : $this.Platform $goPlatform = ($this.Platform -Match "win32") ? "windows" : $this.Platform
$ArchiveType = ($this.Platform -Match "win32") ? "zip" : "tar.gz" $ArchiveType = ($this.Platform -Match "win32") ? "zip" : "tar.gz"
If ($this.Version.Build -eq "0" -and $this.Version -lt "1.21.0") { If ($this.Version.Build -eq "0") {
$goVersion = "go$($this.Version.ToString(2))" $goVersion = "go$($this.Version.ToString(2))"
} else { } else {
$goVersion = "go$($this.Version.ToString(3))" $goVersion = "go$($this.Version.ToString(3))"
@ -97,10 +95,6 @@ class GoBuilder {
Generates Go artifact from downloaded binaries. 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..." Write-Host "Download Go $($this.Version) [$($this.Architecture)] executable..."
$binariesArchivePath = $this.Download() $binariesArchivePath = $this.Download()

View File

@ -1,4 +1,4 @@
using module "./go-builder.psm1" using module "./builders/go-builder.psm1"
class NixGoBuilder : GoBuilder { class NixGoBuilder : GoBuilder {
<# <#
@ -44,7 +44,7 @@ class NixGoBuilder : GoBuilder {
$installationTemplateLocation = Join-Path -Path $this.InstallationTemplatesLocation -ChildPath $this.InstallationTemplateName $installationTemplateLocation = Join-Path -Path $this.InstallationTemplatesLocation -ChildPath $this.InstallationTemplateName
$installationTemplateContent = Get-Content -Path $installationTemplateLocation -Raw $installationTemplateContent = Get-Content -Path $installationTemplateLocation -Raw
$installationTemplateContent = $installationTemplateContent -f $this.Version.ToString(3), $this.Architecture $installationTemplateContent = $installationTemplateContent -f $this.Version.ToString(3)
$installationTemplateContent | Out-File -FilePath $installationScriptLocation $installationTemplateContent | Out-File -FilePath $installationScriptLocation
Write-Debug "Done; Installation script location: $installationScriptLocation)" Write-Debug "Done; Installation script location: $installationScriptLocation)"

View File

@ -1,4 +1,4 @@
using module "./go-builder.psm1" using module "./builders/go-builder.psm1"
class WinGoBuilder : GoBuilder { class WinGoBuilder : GoBuilder {
<# <#

View File

@ -1,5 +1,5 @@
{ {
"regex": "go-\\d+\\.\\d+\\.\\d+-(\\w+)-((x|arm)\\d+)", "regex": "go-\\d+\\.\\d+\\.\\d+-(\\w+)-(x\\d+)",
"groups": { "groups": {
"arch": 2, "arch": 2,
"platform": 1 "platform": 1

@ -1 +1 @@
Subproject commit 6fbb1f0f2098254142702dba05fe75cd8e77c4ae Subproject commit 1069e7a4ece355bd321909454fc1f9f7244eb03b

View File

@ -1,11 +1,10 @@
set -e set -e
GO_VERSION={0} GO_VERSION={0}
ARCH={1}
GO_TOOLCACHE_PATH=$AGENT_TOOLSDIRECTORY/go GO_TOOLCACHE_PATH=$AGENT_TOOLSDIRECTORY/go
GO_TOOLCACHE_VERSION_PATH=$GO_TOOLCACHE_PATH/$GO_VERSION GO_TOOLCACHE_VERSION_PATH=$GO_TOOLCACHE_PATH/$GO_VERSION
GO_TOOLCACHE_VERSION_ARCH_PATH=$GO_TOOLCACHE_VERSION_PATH/$ARCH GO_TOOLCACHE_VERSION_ARCH_PATH=$GO_TOOLCACHE_VERSION_PATH/x64
echo "Check if Go hostedtoolcache folder exist..." echo "Check if Go hostedtoolcache folder exist..."
if [ ! -d $GO_TOOLCACHE_PATH ]; then if [ ! -d $GO_TOOLCACHE_PATH ]; then
@ -23,4 +22,4 @@ cp -R ./* $GO_TOOLCACHE_VERSION_ARCH_PATH
rm $GO_TOOLCACHE_VERSION_ARCH_PATH/setup.sh rm $GO_TOOLCACHE_VERSION_ARCH_PATH/setup.sh
echo "Create complete file" echo "Create complete file"
touch $GO_TOOLCACHE_VERSION_PATH/$ARCH.complete touch $GO_TOOLCACHE_VERSION_PATH/x64.complete

View File

@ -1,31 +1,27 @@
param (
[version] [Parameter (Mandatory = $true)] [ValidateNotNullOrEmpty()]
$Version
)
Import-Module (Join-Path $PSScriptRoot "../helpers/pester-extensions.psm1") Import-Module (Join-Path $PSScriptRoot "../helpers/pester-extensions.psm1")
Import-Module (Join-Path $PSScriptRoot "../helpers/common-helpers.psm1") Import-Module (Join-Path $PSScriptRoot "../helpers/common-helpers.psm1")
Describe "Go" {
BeforeAll {
Set-Location -Path "source"
$sourceLocation = Get-Location
function Get-UseGoLogs { function Get-UseGoLogs {
# GitHub Windows images don't have `HOME` variable $logsFolderPath = Join-Path -Path $env:AGENT_HOMEDIRECTORY -ChildPath "_diag" | Join-Path -ChildPath "pages"
$homeDir = $env:HOME ?? $env:HOMEDRIVE
$logsFolderPath = Join-Path -Path $homeDir -ChildPath "runners/*/_diag/pages" -Resolve
$useGoLogFile = Get-ChildItem -Path $logsFolderPath | Where-Object { $useGoLogFile = Get-ChildItem -Path $logsFolderPath | Where-Object {
$logContent = Get-Content $_.Fullname -Raw $logContent = Get-Content $_.Fullname -Raw
return $logContent -match "setup-go@v" return $logContent -match "GoTool"
} | Select-Object -First 1 } | Select-Object -First 1
return $useGoLogFile.Fullname return $useGoLogFile.Fullname
} }
}
Describe "Go" {
It "is available" { It "is available" {
"go version" | Should -ReturnZeroExitCode "go version" | Should -ReturnZeroExitCode
} }
It "version is correct" { It "version is correct" {
[version]$Version = $env:VERSION
$versionOutput = Invoke-Expression -Command "go version" $versionOutput = Invoke-Expression -Command "go version"
$finalVersion = $Version.ToString(3) $finalVersion = $Version.ToString(3)
If ($Version.Build -eq "0"){ If ($Version.Build -eq "0"){
@ -37,43 +33,27 @@ Describe "Go" {
It "is used from tool-cache" { It "is used from tool-cache" {
$goPath = (Get-Command "go").Path $goPath = (Get-Command "go").Path
$goPath | Should -Not -BeNullOrEmpty $goPath | Should -Not -BeNullOrEmpty
$expectedPath = Join-Path -Path $env:AGENT_TOOLSDIRECTORY -ChildPath "go"
# GitHub Windows images don't have `AGENT_TOOLSDIRECTORY` variable
$toolcacheDir = $env:AGENT_TOOLSDIRECTORY ?? $env:RUNNER_TOOL_CACHE
$expectedPath = Join-Path -Path $toolcacheDir -ChildPath "go"
$goPath.startsWith($expectedPath) | Should -BeTrue -Because "'$goPath' is not started with '$expectedPath'" $goPath.startsWith($expectedPath) | Should -BeTrue -Because "'$goPath' is not started with '$expectedPath'"
} }
It "cached version is used without downloading" { It "cached version is used without downloading" {
if ($env:RUNNER_TYPE -eq "self-hosted") {
# Get the installed version of Go
$goVersion = Invoke-Expression "go version"
# Check if Go is installed
$goVersion | Should -Not -BeNullOrEmpty
# Check if the installed version of Go is the expected version
$installedVersion = $goVersion -split " " | Select-Object -Index 2
$installedVersion = $installedVersion -replace "go", "" -replace "v", ""
$expectedVersion = $env:VERSION -replace ".0", ""
$installedVersion | Should -BeLike "$expectedVersion*"
}else {
# Analyze output of previous steps to check if Go was consumed from cache or downloaded # Analyze output of previous steps to check if Go was consumed from cache or downloaded
$useGoLogFile = Get-UseGoLogs $useGoLogFile = Get-UseGoLogs
$useGoLogFile | Should -Exist $useGoLogFile | Should -Exist
$useGoLogContent = Get-Content $useGoLogFile -Raw $useGoLogContent = Get-Content $useGoLogFile -Raw
$useGoLogContent | Should -Match "Found in cache" $useGoLogContent | Should -Match "Found tool in cache"
}
} }
Set-Location -Path "source"
$sourceLocation = Get-Location
It "Run simple code" { It "Run simple code" {
$simpleLocation = Join-Path -Path $sourceLocation -ChildPath "simple" $simpleLocation = Join-Path -Path $sourceLocation -ChildPath "simple"
Set-Location -Path $simpleLocation Set-Location -Path $simpleLocation
"go run simple.go" | Should -ReturnZeroExitCode "go run simple.go" | Should -ReturnZeroExitCode
"go build simple.go" | Should -ReturnZeroExitCode "go build simple.go" | Should -ReturnZeroExitCode
$compiledPackageName = "simple" "./simple" | Should -ReturnZeroExitCode
if ($IsWindows) { $compiledPackageName += ".exe" }
(Resolve-Path "./$compiledPackageName").Path | Should -ReturnZeroExitCode
} }
It "Run maps code" { It "Run maps code" {
@ -81,9 +61,7 @@ Describe "Go" {
Set-Location -Path $mapsLocation Set-Location -Path $mapsLocation
"go run maps.go" | Should -ReturnZeroExitCode "go run maps.go" | Should -ReturnZeroExitCode
"go build maps.go" | Should -ReturnZeroExitCode "go build maps.go" | Should -ReturnZeroExitCode
$compiledPackageName = "maps" "./maps" | Should -ReturnZeroExitCode
if ($IsWindows) { $compiledPackageName += ".exe" }
(Resolve-Path "./$compiledPackageName").Path | Should -ReturnZeroExitCode
} }
It "Run methods code" { It "Run methods code" {
@ -91,8 +69,6 @@ Describe "Go" {
Set-Location -Path $methodsLocation Set-Location -Path $methodsLocation
"go run methods.go" | Should -ReturnZeroExitCode "go run methods.go" | Should -ReturnZeroExitCode
"go build methods.go" | Should -ReturnZeroExitCode "go build methods.go" | Should -ReturnZeroExitCode
$compiledPackageName = "methods" "./methods" | Should -ReturnZeroExitCode
if ($IsWindows) { $compiledPackageName += ".exe" }
(Resolve-Path "./$compiledPackageName").Path | Should -ReturnZeroExitCode
} }
} }

File diff suppressed because it is too large Load Diff