You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
go-versions/.github/workflows/build-go-packages.yml

192 lines
6.2 KiB
YAML

name: Generate Go package
on:
# TODO: currently workflow dispatch endpoint does not work. I will investigate
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 }}
ARCHITECTURE: x64
jobs:
build_go:
name: Build Go ${{ github.event.inputs.VERSION }} [${{ matrix.platform }}]
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
platform: [linux, darwin, win32]
steps:
- uses: actions/checkout@v2
with:
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 }}
run: |
./builders/build-go.ps1 -Version $env:VERSION `
-Platform ${{ matrix.platform }} `
-Architecture $env:ARCHITECTURE
shell: pwsh
- name: Publish artifact
uses: actions/upload-artifact@v2
with:
name: go-${{ env.VERSION }}-${{ matrix.platform }}
path: /home/runner/work/go-versions/artifact
# test_go:
# name: Test Go ${{ github.event.inputs.VERSION }} ${{ matrix.platform }}
# needs: build_go
# runs-on: ${{ matrix.os }}-latest
# 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: 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
# run: ./helpers/clean-toolcache.ps1 -ToolName "go"
# shell: pwsh
# - name: Download artifact
# uses: actions/download-artifact@v2
# with:
# path: ${{ runner.temp }}
# - name: Extract files
# run: |
# if ('${{ matrix.platform }}' -eq 'win32') {
# $artifactName = "go-${{ env.VERSION }}-${{ matrix.platform }}-${{ env.ARCHITECTURE }}.7z"
# 7z.exe x "$artifactName" -y | Out-Null
# } else {
# $artifactName = "go-${{ env.VERSION }}-${{ matrix.platform }}-${{ env.ARCHITECTURE }}.tar.gz"
# tar -xzf $artifactName
# }
# working-directory: ${{ runner.temp }}/go-${{ env.VERSION }}-${{ matrix.platform }}
# shell: pwsh
# - 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 }}/go-${{ env.VERSION }}-${{ matrix.platform }}
# shell: pwsh
# - 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"
# shell: pwsh
# - name: Run tests
# run: |
# Install-Module Pester -Force -Scope CurrentUser -RequiredVersion 4.10.1
# Import-Module Pester
# $pesterParams = @{
# Path="./Go.Tests.ps1";
# Parameters=@{
# Version="$env:VERSION";
# }
# }
# Invoke-Pester -Script $pesterParams -EnableExit -OutputFile "test_results.xml" -OutputFormat NUnitXml
# working-directory: ./tests
# shell: pwsh
publish_release:
name: Publish release
if: github.event.inputs.PUBLISH_RELEASES == 'true'
# needs: test_go
runs-on: ubuntu-latest
outputs:
upload_url: ${{ steps.create_release.outputs.upload_url }}
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: |
Upload 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 Pull Request
needs: publish_release
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
with:
submodules: true
- name: Trigger "Create Pull Request" workflow
uses: actions/github-script@v2
with:
github-token: ${{ secrets.PERSONAL_TOKEN }}
script: |
# TODO: currently 'actions.createWorkflowDispatch' function does not work. I will investigate
github.repos.createDispatchEvent({
owner: context.repo.owner,
repo: context.repo.repo,
event_type: 'create-pr'
});