Compare commits

...

21 Commits

Author SHA1 Message Date
MaksimZhukov
7cea0f8549 Merge pull request #14 from actions/update-versions-manifest-file
[versions-manifest] Update for release from 09/02/2020
2020-09-02 14:50:58 +03:00
Service account
817f326783 Update versions-manifest 2020-09-02 11:34:48 +00:00
MaksimZhukov
5b3b061dd1 Merge pull request #13 from actions/v-nibyko/move-go-ci
Migrate go-versions CI to GitHub Actions
2020-08-27 16:28:13 +03:00
Nikita Bykov
e33ef4429e resolved comments 2020-08-26 15:58:05 +03:00
Nikita Bykov
c455148af9 Migrate go-versions CI to GitHub Actions (#12)
* migrated Go to GA

* commented tests

* commented tests

* fixed upload

* fixed trigger_pr

* fixed trigger_pr

* fixed tests

* removed comment

* updated build-go-packages and create-pr

* update

* updated helpers

* fixed build-go-packages

* updated build-go-packages.yml

* updated build-go.ps1

* updated Go.Tests.ps1

* fixed tests

* fixed go tests

* fixed go tests

* fixed tests

* fixed "version is correct" test

* updated "version is correct" test

* fixed Invoke-Expression

* Remove Create-ArtifactDirectories function

* fixed tests

* fixed tests

* fix test

* fixed trigger_pr

* Update to Pester 5

* update

* updated

* fixed test

* fixed tests

* fixed tests

Co-authored-by: Nikita Bykov <v-nibyko@microsoft.com>
2020-08-26 13:18:15 +03:00
Maxim Lobanov
2873528ad9 Add Go 1.15.0
[versions-manifest] Update for release from 08/12/2020
2020-08-12 10:27:45 +03:00
Service account
772e7814a5 Update versions-manifest based on build from 20200812.1 2020-08-12 06:54:58 +00:00
Maxim Lobanov
12335a5b75 Merge pull request #8 from actions/update-versions-manifest-file
[versions-manifest] Update for release from 08/06/2020
2020-08-06 22:17:05 +03:00
Service account
a4d6b93b68 Update versions-manifest based on build from 20200806.3 2020-08-06 19:15:32 +00:00
Maxim Lobanov
41e5fabc82 Merge pull request #7 from actions/v-mazhuk/update-module
Update Git submodule
2020-07-30 14:21:41 +03:00
MaksimZhukov
af49bddae7 Update Git submodule 2020-07-30 13:05:20 +03:00
Maxim Lobanov
dffccd4e4d Merge pull request #6 from actions/update-versions-manifest-file
[versions-manifest] Update for release from 07/17/2020
2020-07-17 10:14:15 +03:00
Service account
02bb9f8abe Update versions-manifest based on build from 20200717.1 2020-07-17 06:53:25 +00:00
Maxim Lobanov
83c2976bd0 Update README.md 2020-07-15 13:31:09 +03:00
Maxim Lobanov
2d148b3dfc Upload 1.13.13, 1.14.5
[versions-manifest] Update for release from 07/15/2020
2020-07-15 07:39:12 +03:00
Service account
773e210944 Update versions-manifest based on build from 20200715.2 2020-07-15 04:36:17 +00:00
Maxim Lobanov
149df221c7 Merge pull request #4 from actions/master
Integrate master changes to main branch
2020-07-14 16:56:40 +03:00
Maxim Lobanov
b34c795b2c Merge pull request #3 from actions/v-malob/switch-default-branch
Switch default branch from "master" to "main"
2020-07-14 16:41:02 +03:00
Maxim Lobanov
3234ea0ee4 switch default branch, update submodule 2020-07-14 16:34:48 +03:00
MaksimZhukov
35de4ce5f5 Merge pull request #1 from actions/update-versions-manifest-file
[versions-manifest] Update for release from 06/16/2020
2020-06-17 10:26:21 +03:00
Service account
4de67f5470 Update versions-manifest based on build from 20200616.39 2020-06-16 23:06:01 +00:00
12 changed files with 1438 additions and 193 deletions

163
.github/workflows/build-go-packages.yml vendored Normal file
View File

@@ -0,0 +1,163 @@
name: Generate Go package
on:
workflow_dispatch:
inputs:
VERSION:
description: 'Go version to build and upload'
required: true
default: '1.15.0'
PUBLISH_RELEASES:
description: 'Whether to publish releases'
required: true
default: 'false'
env:
VERSION: ${{ github.event.inputs.VERSION }}
defaults:
run:
shell: pwsh
jobs:
build_go:
name: Build Go ${{ github.event.inputs.VERSION }} [${{ matrix.platform }}]
runs-on: ubuntu-latest
env:
ARTIFACT_NAME: go-${{ github.event.inputs.VERSION }}-${{ matrix.platform }}-x64
strategy:
fail-fast: false
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 }} [${{ matrix.platform }}]
needs: build_go
runs-on: ${{ matrix.os }}
env:
ARTIFACT_NAME: go-${{ github.event.inputs.VERSION }}-${{ 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.1
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.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'
});

33
.github/workflows/create-pr.yml vendored Normal file
View File

@@ -0,0 +1,33 @@
name: Create Pull Request
on:
workflow_dispatch:
defaults:
run:
shell: pwsh
jobs:
create_pr:
name: Create Pull Request
runs-on: ubuntu-latest
steps:
- 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}"

2
.gitmodules vendored
View File

@@ -1,4 +1,4 @@
[submodule "helpers"]
path = helpers
url = https://github.com/actions/versions-package-tools
branch = master
branch = main

View File

@@ -29,22 +29,20 @@ Here are a few things you can do that will increase the likelihood of your pull
### Directory structure
```
├── azure-pipelines/
| └──templates/
├── .github/
| └──workflows/
├── builders/
├── helpers/
├── installers/
└── tests/
└──sources/
```
- `azure-pipelines*` - contains global YAML definitions for build pipelines. Reusable templates for specific jobs are located in `templates` subfolder.
- `.github/workflows` - contains repository workflow files.
- `builders` - contains Go builder classes and functions.
- `helpers` - contains global helper functions and functions.
- `helpers` - contains global helper classes and functions.
- `installers` - contains installation script templates.
- `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
- [How to Contribute to Open Source](https://opensource.guide/how-to-contribute/)

View File

@@ -9,7 +9,7 @@ The file [versions-manifest.json](./versions-manifest.json) contains the list of
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
We are trying to prepare packages for new versions of Go as soon as they are released. Please open an issue 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.
## Contribution
Contributions are welcome! See [Contributor's Guide](./CONTRIBUTING.md) for more details about contribution process and code structure

View File

@@ -1,65 +0,0 @@
name: $(date:yyyyMMdd)$(rev:.r)-Go-$(VERSION)
trigger: none
pr:
autoCancel: true
branches:
include:
- master
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

@@ -1,21 +0,0 @@
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

@@ -1,75 +0,0 @@
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

@@ -16,10 +16,13 @@ class GoBuilder {
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.
The location of temporary files that will be used during Go package generation.
.PARAMETER ArtifactLocation
The location of generated Go artifact. Using system environment BUILD_BINARIESDIRECTORY variable value.
.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.
@@ -40,9 +43,8 @@ class GoBuilder {
$this.Architecture = $architecture
$this.TempFolderLocation = [IO.Path]::GetTempPath()
$this.WorkFolderLocation = $env:BUILD_BINARIESDIRECTORY
$this.ArtifactFolderLocation = $env:BUILD_STAGINGDIRECTORY
$this.WorkFolderLocation = Join-Path $env:RUNNER_TEMP "binaries"
$this.ArtifactFolderLocation = Join-Path $env:RUNNER_TEMP "artifact"
$this.InstallationTemplatesLocation = Join-Path -Path $PSScriptRoot -ChildPath "../installers"
}
@@ -95,6 +97,10 @@ class GoBuilder {
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()

Submodule helpers updated: 350e2888aa...3b38e3de4c

View File

@@ -1,20 +1,22 @@
param (
[version] [Parameter (Mandatory = $true)] [ValidateNotNullOrEmpty()]
$Version
)
Import-Module (Join-Path $PSScriptRoot "../helpers/pester-extensions.psm1")
Import-Module (Join-Path $PSScriptRoot "../helpers/common-helpers.psm1")
BeforeAll {
Set-Location -Path "source"
$sourceLocation = Get-Location
function Get-UseGoLogs {
$logsFolderPath = Join-Path -Path $env:AGENT_HOMEDIRECTORY -ChildPath "_diag" | Join-Path -ChildPath "pages"
# GitHub Windows images don't have `HOME` variable
$homeDir = $env:HOME ?? $env:HOMEDRIVE
$logsFolderPath = Join-Path -Path $homeDir -ChildPath "runners/*/_diag/pages" -Resolve
$useGoLogFile = Get-ChildItem -Path $logsFolderPath | Where-Object {
$logContent = Get-Content $_.Fullname -Raw
return $logContent -match "GoTool"
return $logContent -match "setup-go@v"
} | Select-Object -First 1
return $useGoLogFile.Fullname
}
}
Describe "Go" {
It "is available" {
@@ -22,6 +24,7 @@ Describe "Go" {
}
It "version is correct" {
[version]$Version = $env:VERSION
$versionOutput = Invoke-Expression -Command "go version"
$finalVersion = $Version.ToString(3)
If ($Version.Build -eq "0"){
@@ -33,7 +36,10 @@ Describe "Go" {
It "is used from tool-cache" {
$goPath = (Get-Command "go").Path
$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'"
}
@@ -42,11 +48,9 @@ Describe "Go" {
$useGoLogFile = Get-UseGoLogs
$useGoLogFile | Should -Exist
$useGoLogContent = Get-Content $useGoLogFile -Raw
$useGoLogContent | Should -Match "Found tool in cache"
$useGoLogContent | Should -Match "Found in cache"
}
Set-Location -Path "source"
$sourceLocation = Get-Location
It "Run simple code" {
$simpleLocation = Join-Path -Path $sourceLocation -ChildPath "simple"

1202
versions-manifest.json Normal file

File diff suppressed because it is too large Load Diff