Compare commits

..

No commits in common. "main" and "1.18.1-2168022110" have entirely different histories.

14 changed files with 891 additions and 2608 deletions

2
.github/CODEOWNERS vendored
View File

@ -1 +1 @@
* @actions/setup-actions-team * @actions/virtual-environments-owners

View File

@ -1,17 +1,15 @@
name: Generate Go package name: Generate Go package
run-name: Generate Go ${{ inputs.VERSION || '1.19.0' }}
on: on:
workflow_dispatch: workflow_dispatch:
inputs: inputs:
VERSION: VERSION:
description: 'Go version to build and upload' description: 'Go version to build and upload'
required: true required: true
default: '1.19.0' default: '1.15.0'
PUBLISH_RELEASES: PUBLISH_RELEASES:
description: 'Whether to publish releases' description: 'Whether to publish releases'
type: boolean
required: true required: true
default: false default: 'false'
pull_request: pull_request:
paths-ignore: paths-ignore:
- 'versions-manifest.json' - 'versions-manifest.json'
@ -20,12 +18,153 @@ on:
branches: branches:
- 'main' - 'main'
env:
VERSION: ${{ github.event.inputs.VERSION || '1.15.3' }}
defaults:
run:
shell: pwsh
jobs: jobs:
go: build_go:
name: Go name: Build Go ${{ github.event.inputs.VERSION || '1.15.3' }} [${{ matrix.platform }}]
uses: actions/versions-package-tools/.github/workflows/build-tool-packages.yml@main runs-on: ubuntu-latest
with: env:
tool-name: "go" ARTIFACT_NAME: go-${{ github.event.inputs.VERSION || '1.15.3' }}-${{ matrix.platform }}-x64
tool-version: ${{ inputs.VERSION || '1.19.0' }} strategy:
publish-release: ${{ inputs.PUBLISH_RELEASES || false }} fail-fast: false
secrets: inherit matrix:
platform: [linux, darwin, win32]
steps:
- uses: actions/checkout@v2
with:
submodules: true
- name: Build Go ${{ env.VERSION }}
run: |
./builders/build-go.ps1 -Version $env:VERSION `
-Platform ${{ matrix.platform }}
- name: Publish artifact
uses: actions/upload-artifact@v2
with:
name: ${{ env.ARTIFACT_NAME }}
path: ${{ runner.temp }}/artifact
test_go:
name: Test Go ${{ github.event.inputs.VERSION || '1.15.3' }} [${{ matrix.platform }}]
needs: build_go
runs-on: ${{ matrix.os }}
env:
ARTIFACT_NAME: go-${{ github.event.inputs.VERSION || '1.15.3' }}-${{ matrix.platform }}-x64
strategy:
fail-fast: false
matrix:
include:
- os: ubuntu-latest
platform: linux
- os: macos-latest
platform: darwin
- os: windows-latest
platform: win32
steps:
- uses: actions/checkout@v2
with:
submodules: true
- name: Fully cleanup the toolcache directory before testing
run: ./helpers/clean-toolcache.ps1 -ToolName "go"
- name: Download artifact
uses: actions/download-artifact@v2
with:
path: ${{ runner.temp }}
- name: Extract files
run: |
if ('${{ matrix.platform }}' -eq 'win32') {
$artifactName = "${{ env.ARTIFACT_NAME }}.zip"
7z.exe x "$artifactName" -y | Out-Null
} else {
$artifactName = "${{ env.ARTIFACT_NAME }}.tar.gz"
tar -xzf $artifactName
}
working-directory: ${{ runner.temp }}/${{ env.ARTIFACT_NAME }}
- name: Apply build artifact to the local machine
run: |
if ('${{ matrix.platform }}' -eq 'win32') { powershell ./setup.ps1 } else { sh ./setup.sh }
working-directory: ${{ runner.temp }}/${{ env.ARTIFACT_NAME }}
- name: Setup Go ${{ env.VERSION }}
uses: actions/setup-go@v2.1.3
with:
go-version: ${{ env.VERSION }}
- name: Wait for the logs
run: |
Write-Host "Fake step that do nothing"
Write-Host "We need it because log of previous step 'Setup Go' is not available here yet."
Write-Host "In testing step (Go.Tests.ps1) we analyze build log of 'Setup Go' task"
Write-Host "to determine if Go.js version was consumed from cache and was downloaded"
for ($i = 0; $i -lt 200; $i++) { Get-Random }
- name: Run tests
run: |
Install-Module Pester -Force -Scope CurrentUser
Import-Module Pester
Invoke-Pester -Script ./Go.Tests.ps1 -EnableExit
working-directory: ./tests
publish_release:
name: Publish release
if: github.event_name == 'workflow_dispatch' && github.event.inputs.PUBLISH_RELEASES == 'true'
needs: test_go
runs-on: ubuntu-latest
steps:
- uses: actions/download-artifact@v2
- name: Publish Release ${{ env.VERSION }}
id: create_release
uses: actions/create-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: ${{ env.VERSION }}-${{ github.run_id }}
release_name: ${{ env.VERSION }}
body: |
Go ${{ env.VERSION }}
- name: Upload release assets
uses: actions/github-script@v2
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
script: |
const fs = require('fs');
for (let artifactDir of fs.readdirSync('.')) {
let artifactName = fs.readdirSync(`${artifactDir}`)[0];
console.log(`Upload ${artifactName} asset`);
github.repos.uploadReleaseAsset({
owner: context.repo.owner,
repo: context.repo.repo,
release_id: ${{ steps.create_release.outputs.id }},
name: artifactName,
data: fs.readFileSync(`./${artifactDir}/${artifactName}`)
});
}
trigger_pr:
name: Trigger "Create Pull Request" workflow
needs: publish_release
runs-on: ubuntu-latest
steps:
- name: Trigger "Create Pull Request" workflow
uses: actions/github-script@v3
with:
github-token: ${{ secrets.PERSONAL_TOKEN }}
script: |
github.actions.createWorkflowDispatch({
owner: context.repo.owner,
repo: context.repo.repo,
workflow_id: 'create-pr.yml',
ref: 'main'
});

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

@ -2,9 +2,32 @@ name: Create Pull Request
on: on:
workflow_dispatch: workflow_dispatch:
defaults:
run:
shell: pwsh
jobs: jobs:
create-pr: create_pr:
uses: actions/versions-package-tools/.github/workflows/create-pr-to-update-manifest.yml@main name: Create Pull Request
with: runs-on: ubuntu-latest
tool-name: "go" steps:
secrets: inherit - uses: actions/checkout@v2
with:
submodules: true
- name: Create versions-manifest.json
run: |
./helpers/packages-generation/manifest-generator.ps1 -RepositoryFullName "$env:GITHUB_REPOSITORY" `
-GitHubAccessToken "${{secrets.GITHUB_TOKEN}}" `
-OutputFile "./versions-manifest.json" `
-ConfigurationFile "./config/go-manifest-config.json"
- name: Create GitHub PR
run: |
$formattedDate = Get-Date -Format "MM/dd/yyyy"
./helpers/github/create-pull-request.ps1 `
-RepositoryFullName "$env:GITHUB_REPOSITORY" `
-AccessToken "${{secrets.GITHUB_TOKEN}}" `
-BranchName "update-versions-manifest-file" `
-CommitMessage "Update versions-manifest" `
-PullRequestTitle "[versions-manifest] Update for release from ${formattedDate}" `
-PullRequestBody "Update versions-manifest.json for release from ${formattedDate}"

View File

@ -4,10 +4,94 @@ on:
- cron: '0 3,15 * * *' - cron: '0 3,15 * * *'
workflow_dispatch: workflow_dispatch:
env:
TOOL_NAME: "Go"
defaults:
run:
shell: pwsh
jobs: jobs:
get-new-go-versions: find_new_versions:
uses: actions/versions-package-tools/.github/workflows/get-new-tool-versions.yml@main name: Find new versions
with: runs-on: ubuntu-latest
tool-name: "Go" outputs:
image-url: "https://go.dev/images/gopher-footer.jpg" versions_output: ${{ steps.Get_new_versions.outputs.TOOL_VERSIONS }}
secrets: inherit steps:
- uses: actions/checkout@v2
with:
submodules: true
- id: Get_new_versions
name: Get new versions
run: ./helpers/get-new-tool-versions/get-new-tool-versions.ps1 -ToolName ${{ env.TOOL_NAME }}
check_new_versions:
name: Check new versions
runs-on: ubuntu-latest
needs: find_new_versions
env:
TOOL_VERSIONS: ${{needs.find_new_versions.outputs.versions_output}}
steps:
- uses: actions/checkout@v2
with:
submodules: true
- name: Check Versions
if: env.TOOL_VERSIONS == ''
run: |
Write-Host "No new versions were found"
Import-Module "./helpers/github/github-api.psm1"
$gitHubApi = Get-GitHubApi -RepositoryFullName "$env:GITHUB_REPOSITORY" `
-AccessToken "${{ secrets.PERSONAL_TOKEN }}"
$gitHubApi.CancelWorkflow("$env:GITHUB_RUN_ID")
Start-Sleep -Seconds 60
- name: Send Slack notification
run: |
$pipelineUrl = "$env:GITHUB_SERVER_URL/$env:GITHUB_REPOSITORY/actions/runs/$env:GITHUB_RUN_ID"
$message = "The following versions of '${{ env.TOOL_NAME }}' are available to upload: ${{ env.TOOL_VERSIONS }}\nLink to the pipeline: $pipelineUrl"
./helpers/get-new-tool-versions/send-slack-notification.ps1 -Url "${{ secrets.SLACK_CHANNEL_URL }}" `
-ToolName "${{ env.TOOL_NAME }}" `
-ImageUrl "https://golang.org/lib/godoc/images/footer-gopher.jpg" `
-Text "$message"
trigger_builds:
name: Trigger builds
runs-on: ubuntu-latest
needs: [find_new_versions, check_new_versions]
env:
TOOL_VERSIONS: ${{needs.find_new_versions.outputs.versions_output}}
environment: Get Available Tools Versions - Publishing Approval
steps:
- uses: actions/checkout@v2
with:
submodules: true
- name: Trigger "Build go packages" workflow
run:
./helpers/github/run-ci-builds.ps1 -RepositoryFullName "$env:GITHUB_REPOSITORY" `
-AccessToken "${{ secrets.PERSONAL_TOKEN }}" `
-WorkflowFileName "build-go-packages.yml" `
-WorkflowDispatchRef "main" `
-ToolVersions "${{ env.TOOL_VERSIONS }}" `
-PublishReleases "true"
check_build:
name: Check build for failures
runs-on: ubuntu-latest
needs: [find_new_versions, check_new_versions, trigger_builds]
if: failure()
steps:
- uses: actions/checkout@v2
with:
submodules: true
- name: Send Slack notification if build fails
run: |
$pipelineUrl = "$env:GITHUB_SERVER_URL/$env:GITHUB_REPOSITORY/actions/runs/$env:GITHUB_RUN_ID"
$message = "The build of the '${{ env.TOOL_NAME }}' detection pipeline failed :progress-error:\nLink to the pipeline: $pipelineUrl"
./helpers/get-new-tool-versions/send-slack-notification.ps1 -Url "${{ secrets.SLACK_CHANNEL_URL }}" `
-ToolName "${{ env.TOOL_NAME }}" `
-Text "$message" `
-ImageUrl "https://golang.org/lib/godoc/images/footer-gopher.jpg"

View File

@ -1,21 +1,48 @@
name: Validate manifest name: Validate manifest
on: 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: schedule:
- cron: '0 8,20 * * *' - cron: '0 8,20 * * *'
workflow_dispatch:
pull_request: pull_request:
branches: branches:
- main - main
paths: paths:
- 'versions-manifest.json' - 'versions-manifest.json'
env:
TOOL_NAME: "Go"
defaults:
run:
shell: pwsh
jobs: jobs:
manifest: validation:
uses: actions/versions-package-tools/.github/workflows/validate-manifest.yml@main runs-on: ubuntu-latest
with: steps:
tool-name: "Go" - uses: actions/checkout@v2
image-url: "https://go.dev/images/gopher-footer.jpg" with:
secrets: inherit submodules: true
- name: Validate python-versions manifest
run: .\helpers\packages-generation\manifest-validator.ps1 -ManifestPath '.\versions-manifest.json'
check_build:
name: Check validation for failures
runs-on: ubuntu-latest
needs: [validation]
if: failure()
steps:
- uses: actions/checkout@v2
with:
submodules: true
- name: Send Slack notification if validation fails
run: |
$pipelineUrl = "$env:GITHUB_SERVER_URL/$env:GITHUB_REPOSITORY/actions/runs/$env:GITHUB_RUN_ID"
$message = "The validation of go-versions manifest failed. \nLink to the pipeline: $pipelineUrl"
.\helpers\get-new-tool-versions\send-slack-notification.ps1 -Url "${{ secrets.SLACK_CHANNEL_URL }}" `
-ToolName "${{ env.TOOL_NAME }}" `
-Text "$message" `
-ImageUrl "https://golang.org/lib/godoc/images/footer-gopher.jpg"

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

@ -58,7 +58,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))"

View File

@ -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,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 6f1aa3ce73ce0ea4b58995a63b56a8677607762a

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,9 +1,7 @@
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 {
BeforeAll {
Set-Location -Path "source" Set-Location -Path "source"
$sourceLocation = Get-Location $sourceLocation = Get-Location
@ -20,6 +18,7 @@ Describe "Go" {
} }
} }
Describe "Go" {
It "is available" { It "is available" {
"go version" | Should -ReturnZeroExitCode "go version" | Should -ReturnZeroExitCode
} }
@ -45,25 +44,12 @@ Describe "Go" {
} }
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 in cache"
} }
}
It "Run simple code" { It "Run simple code" {

File diff suppressed because it is too large Load Diff