Merge pull request #3 from nikita-bykov/migrate-go-versions

Migrate go versions
pull/10/head
Nikita Bykov 5 years ago committed by GitHub
commit de60860b59
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -1,12 +1,11 @@
name: Generate Go.js name: Generate Go package
on: on:
# TODO: currently workflow dispatch endpoint does not work. I will investigate
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: '14.2.0' default: '1.15.0'
PUBLISH_RELEASES: PUBLISH_RELEASES:
description: 'Whether to publish releases' description: 'Whether to publish releases'
required: true required: true
@ -14,12 +13,13 @@ on:
env: env:
VERSION: ${{ github.event.inputs.VERSION }} VERSION: ${{ github.event.inputs.VERSION }}
ARCHITECTURE: x64
jobs: jobs:
build_go: build_go:
name: Build Go ${{ github.event.inputs.VERSION }} ${{ matrix.platform }} name: Build Go ${{ github.event.inputs.VERSION }} [${{ matrix.platform }}]
runs-on: ubuntu-latest runs-on: ubuntu-latest
env:
ARTIFACT_NAME: go-${{ github.event.inputs.VERSION }}-${{ matrix.platform }}-x64
strategy: strategy:
fail-fast: false fail-fast: false
matrix: matrix:
@ -29,57 +29,44 @@ jobs:
with: with:
submodules: true submodules: true
- name: Create artifact directories
run: |
binariesDirectory=$RUNNER_WORKSPACE/binaries
echo ::set-env name=BINARIES_DIRECTORY::$binariesDirectory
mkdir $binariesDirectory
artifactDirectory=$RUNNER_WORKSPACE/artifact
echo ::set-env name=ARTIFACT_DIRECTORY::$artifactDirectory
mkdir $artifactDirectory
- name: Build Go ${{ env.VERSION }} - name: Build Go ${{ env.VERSION }}
shell: pwsh
run: | run: |
./builders/build-go.ps1 -Version $env:VERSION ` ./builders/build-go.ps1 -Version $env:VERSION `
-Platform ${{ matrix.platform }} ` -Platform ${{ matrix.platform }}
-Architecture $env:ARCHITECTURE
shell: pwsh
- name: Publish artifact - name: Publish artifact
uses: actions/upload-artifact@v2 uses: actions/upload-artifact@v2
with: with:
name: go-${{ env.VERSION }}-${{ matrix.platform }} name: ${{ env.ARTIFACT_NAME }}
path: /home/runner/work/go-versions/artifact path: ${{ runner.temp }}/artifact
test_go: test_go:
name: Test Go ${{ github.event.inputs.VERSION }} ${{ matrix.platform }} name: Test Go ${{ github.event.inputs.VERSION }} [${{ matrix.platform }}]
needs: build_go needs: build_go
runs-on: ${{ matrix.os }}-latest runs-on: ${{ matrix.os }}
defaults:
run:
shell: pwsh
env:
ARTIFACT_NAME: go-${{ github.event.inputs.VERSION }}-${{ matrix.platform }}-x64
strategy: strategy:
fail-fast: false fail-fast: false
matrix: matrix:
include: include:
- os: ubuntu - os: ubuntu-latest
platform: linux platform: linux
- os: macos - os: macos-latest
platform: darwin platform: darwin
- os: windows - os: windows-latest
platform: win32 platform: win32
steps: steps:
- uses: actions/checkout@v2 - uses: actions/checkout@v2
with: with:
submodules: true submodules: true
- name: Set AGENT_TOOLSDIRECTORY variable
if: matrix.platform == 'win32'
run: |
# GitHub Windows images don't have `AGENT_TOOLSDIRECTORY` variable
echo ::set-env name=AGENT_TOOLSDIRECTORY::$RUNNER_TOOL_CACHE
shell: bash
- name: Fully cleanup the toolcache directory before testing - name: Fully cleanup the toolcache directory before testing
run: | run: ./helpers/clean-toolcache.ps1 -ToolName "go"
./helpers/clean-toolcache.ps1 -ToolName "go"
shell: pwsh
- name: Download artifact - name: Download artifact
uses: actions/download-artifact@v2 uses: actions/download-artifact@v2
@ -89,20 +76,18 @@ jobs:
- name: Extract files - name: Extract files
run: | run: |
if ('${{ matrix.platform }}' -eq 'win32') { if ('${{ matrix.platform }}' -eq 'win32') {
$artifactName = "go-${{ env.VERSION }}-${{ matrix.platform }}-${{ env.ARCHITECTURE }}.7z" $artifactName = "${{ env.ARTIFACT_NAME }}.7z"
7z.exe x "$artifactName" -y | Out-Null 7z.exe x "$artifactName" -y | Out-Null
} else { } else {
$artifactName = "go-${{ env.VERSION }}-${{ matrix.platform }}-${{ env.ARCHITECTURE }}.tar.gz" $artifactName = "${{ env.ARTIFACT_NAME }}.tar.gz"
tar -xzf $artifactName tar -xzf $artifactName
} }
working-directory: ${{ runner.temp }}/go-${{ env.VERSION }}-${{ matrix.platform }} working-directory: ${{ runner.temp }}/${{ env.ARTIFACT_NAME }}
shell: pwsh
- name: Apply build artifact to the local machine - name: Apply build artifact to the local machine
run: | run: |
if ('${{ matrix.platform }}' -eq 'win32') { powershell ./setup.ps1 } else { sh ./setup.sh } if ('${{ matrix.platform }}' -eq 'win32') { powershell ./setup.ps1 } else { sh ./setup.sh }
working-directory: ${{ runner.temp }}/go-${{ env.VERSION }}-${{ matrix.platform }} working-directory: ${{ runner.temp }}/${{ env.ARTIFACT_NAME }}
shell: pwsh
- name: Setup Go ${{ env.VERSION }} - name: Setup Go ${{ env.VERSION }}
uses: actions/setup-go@v2.1.1 uses: actions/setup-go@v2.1.1
@ -115,7 +100,8 @@ jobs:
Write-Host "We need it because log of previous step 'Setup Go' is not available here yet." 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 "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" Write-Host "to determine if Go.js version was consumed from cache and was downloaded"
shell: pwsh Write-Host "Random values:"
for ($i = 0; $i -lt 200; $i++) { Get-Random }
- name: Run tests - name: Run tests
run: | run: |
@ -127,9 +113,8 @@ jobs:
Version="$env:VERSION"; Version="$env:VERSION";
} }
} }
Invoke-Pester -Script $pesterParams -EnableExit -OutputFile "test_results.xml" -OutputFormat NUnitXml Invoke-Pester -Script $pesterParams -EnableExit
working-directory: ./tests working-directory: ./tests
shell: pwsh
publish_release: publish_release:
name: Publish release name: Publish release
@ -139,6 +124,8 @@ jobs:
outputs: outputs:
upload_url: ${{ steps.create_release.outputs.upload_url }} upload_url: ${{ steps.create_release.outputs.upload_url }}
steps: steps:
- uses: actions/download-artifact@v2
- name: Publish Release ${{ env.VERSION }} - name: Publish Release ${{ env.VERSION }}
id: create_release id: create_release
uses: actions/create-release@v1 uses: actions/create-release@v1
@ -148,50 +135,36 @@ jobs:
tag_name: ${{ env.VERSION }}-${{ github.run_id }} tag_name: ${{ env.VERSION }}-${{ github.run_id }}
release_name: ${{ env.VERSION }} release_name: ${{ env.VERSION }}
body: | body: |
Upload Go.js ${{ env.VERSION }} Upload Go ${{ env.VERSION }}
upload_assets:
name: Upload assets for ${{ matrix.platform }}
needs: publish_release
runs-on: ubuntu-latest
env:
UPLOAD_URL: ${{ needs.publish_release.outputs.upload_url }}
strategy:
matrix:
extension: ['tar.gz']
platform: [linux, darwin]
include:
- platform: win32
extension: 7z
steps:
- uses: actions/download-artifact@v2
with:
name: go-${{ env.VERSION }}-${{ matrix.platform }}
- name: Upload Release Asset - name: Upload release assets
uses: actions/upload-release-asset@v1 uses: actions/github-script@v2
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with: with:
upload_url: ${{ env.UPLOAD_URL }} github-token: ${{ secrets.GITHUB_TOKEN }}
asset_path: ./go-${{ env.VERSION }}-${{ matrix.platform }}-${{ env.ARCHITECTURE }}.${{ matrix.extension }} script: |
asset_name: go-${{ env.VERSION }}-${{ matrix.platform }}-${{ env.ARCHITECTURE }}.${{ matrix.extension }} const fs = require('fs');
asset_content_type: application/zip for (let artifactDir of fs.readdirSync('.')) {
let artifactName = fs.readdirSync(`${artifactDir}`)[0];
create_pr: console.log(`Upload ${artifactName} asset`);
name: Create Pull Request github.repos.uploadReleaseAsset({
needs: upload_assets 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 runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v2
with:
submodules: true
- name: Trigger "Create Pull Request" workflow - name: Trigger "Create Pull Request" workflow
uses: actions/github-script@v2 uses: actions/github-script@v2
with: with:
github-token: ${{ secrets.PERSONAL_TOKEN }} github-token: ${{ secrets.PERSONAL_TOKEN }}
script: | script: |
# TODO: currently 'actions.createWorkflowDispatch' function does not work. I will investigate
github.repos.createDispatchEvent({ github.repos.createDispatchEvent({
owner: context.repo.owner, owner: context.repo.owner,
repo: context.repo.repo, repo: context.repo.repo,

@ -1,14 +1,11 @@
name: Create Pull Request name: Create Pull Request
on: on:
# TODO: currently workflow dispatch endpoint does not work. I will investigate
repository_dispatch: repository_dispatch:
types: [create-pr] types: [create-pr]
workflow_dispatch: workflow_dispatch:
jobs: jobs:
build: create_pr:
name: Create Pull Request name: Create Pull Request
env:
REPOSITORY_NAME: 'go-versions'
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v2 - uses: actions/checkout@v2
@ -18,18 +15,16 @@ jobs:
- name: Create versions-manifest.json - name: Create versions-manifest.json
shell: pwsh shell: pwsh
run: | run: |
./helpers/packages-generation/manifest-generator.ps1 -GitHubRepositoryOwner "${{github.repository_owner}}" ` ./helpers/packages-generation/manifest-generator.ps1 -RepositoryFullName "$env:GITHUB_REPOSITORY" `
-GitHubRepositoryName "$env:REPOSITORY_NAME"` -GitHubAccessToken "${{secrets.GITHUB_TOKEN}}" `
-GitHubAccessToken "${{secrets.GITHUB_TOKEN}}"` -OutputFile "./versions-manifest.json" `
-OutputFile "./versions-manifest.json"`
-ConfigurationFile "./config/go-manifest-config.json" -ConfigurationFile "./config/go-manifest-config.json"
- name: Create GitHub PR - name: Create GitHub PR
shell: pwsh shell: pwsh
run: | run: |
$formattedDate = Get-Date -Format "MM/dd/yyyy" $formattedDate = Get-Date -Format "MM/dd/yyyy"
./helpers/github/create-pull-request.ps1 ` ./helpers/github/create-pull-request.ps1 `
-RepositoryOwner "${{github.repository_owner}}" ` -RepositoryFullName "$env:GITHUB_REPOSITORY" `
-RepositoryName "$env:REPOSITORY_NAME" `
-AccessToken "${{secrets.GITHUB_TOKEN}}" ` -AccessToken "${{secrets.GITHUB_TOKEN}}" `
-BranchName "update-versions-manifest-file" ` -BranchName "update-versions-manifest-file" `
-CommitMessage "Update versions-manifest" ` -CommitMessage "Update versions-manifest" `

2
.gitmodules vendored

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

@ -1,25 +1,25 @@
class GoBuilder { class GoBuilder {
<# <#
.SYNOPSIS .SYNOPSIS
Base Go builder class. Base Node.js builder class.
.DESCRIPTION .DESCRIPTION
Base Go builder class that contains general builder methods. Base Node.js builder class that contains general builder methods.
.PARAMETER Version .PARAMETER Version
The version of Go that should be built. The version of Node.js that should be built.
.PARAMETER Platform .PARAMETER Platform
The platform of Go that should be built. The platform of Node.js that should be built.
.PARAMETER Architecture .PARAMETER Architecture
The architecture with which Go should be built. The architecture with which Node.js should be built.
.PARAMETER TempFolderLocation .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 Node.js package generation.
.PARAMETER ArtifactLocation .PARAMETER ArtifactLocation
The location of generated Go artifact. Using system environment BUILD_BINARIESDIRECTORY variable value. The location of generated Node.js 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.
@ -40,9 +40,8 @@ class GoBuilder {
$this.Architecture = $architecture $this.Architecture = $architecture
$this.TempFolderLocation = [IO.Path]::GetTempPath() $this.TempFolderLocation = [IO.Path]::GetTempPath()
$this.WorkFolderLocation = $env:BINARIES_DIRECTORY $this.WorkFolderLocation = Join-Path $env:RUNNER_TEMP "binaries"
$this.ArtifactFolderLocation = $env:ARTIFACT_DIRECTORY $this.ArtifactFolderLocation = Join-Path $env:RUNNER_TEMP "artifact"
$this.InstallationTemplatesLocation = Join-Path -Path $PSScriptRoot -ChildPath "../installers" $this.InstallationTemplatesLocation = Join-Path -Path $PSScriptRoot -ChildPath "../installers"
} }
@ -95,6 +94,10 @@ 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()

@ -1 +1 @@
Subproject commit 68072bedefb41436c6b70ddfa9adb8e631a3b6cf Subproject commit 1314c6de07d9052cb47c157e2babe11e9396ba23

@ -7,17 +7,13 @@ 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")
function Get-UseGoLogs { function Get-UseGoLogs {
$homeDir = $env:HOME # GitHub Windows images don't have `HOME` variable
if ([string]::IsNullOrEmpty($homeDir)) { $homeDir = $env:HOME ?? $env:HOMEDRIVE
# GitHub Windows images don't have `HOME` variable
$homeDir = $env:HOMEDRIVE
}
$logsFolderPath = Join-Path -Path $homeDir -ChildPath "runners/*/_diag/pages" -Resolve $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 "GoTool" return $logContent -match "setup-go@v"
} | Select-Object -First 1 } | Select-Object -First 1
return $useGoLogFile.Fullname return $useGoLogFile.Fullname
} }
@ -39,7 +35,10 @@ 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'"
} }
@ -48,7 +47,7 @@ Describe "Go" {
$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 tool in cache" $useGoLogContent | Should -Match "Found in cache"
} }
Set-Location -Path "source" Set-Location -Path "source"

Loading…
Cancel
Save