windows-builder/images/go-windows/build.ps1 (43 lines of code) (raw):

$projectID = gcloud config get-value project [Net.ServicePointManager]::SecurityProtocol = "tls12, tls11, tls" $ProgressPreference = 'SilentlyContinue' $ErrorActionPreference = "Stop" function Get-GitURL { Invoke-RestMethod -Uri https://api.github.com/repos/git-for-windows/git/releases/latest ` | Select-Object -ExpandProperty "assets" ` | Where-Object { $_.name -match "^MinGit-\d+\.\d+\.\d+-64-bit.zip$" } ` | Select-Object -First 1 -ExpandProperty "browser_download_url" } $git_url=Get-GitURL Write-Host "Downloading Git ($git_url)" Invoke-WebRequest -Uri $git_url -OutFile git.zip function Get-GoTags { for ($page=0;; $page++) { $resp = Invoke-RestMethod -Uri https://api.github.com/repos/golang/go/tags?page=$page If ($resp.Length -eq 0) { # Ran out of pages, bail. break } $resp | Select-Object -Property name ` | Foreach-Object { if ($_ -match 'go(1\.\d+\.\d+)') { $matches[1]} } } } $latest_go = Get-GoTags | Sort-Object -Descending {[version] $_} | Select-Object -First 1 $go_url = "https://dl.google.com/go/go$latest_go.windows-386.zip" Write-Host "Downloading Go $latest_go ($go_url)" Invoke-WebRequest -Uri $go_url -Outfile go.zip gcloud --quiet auth configure-docker Write-Host "Running Docker build" docker build -t gcr.io/$projectID/go-windows . if ($?) { docker push gcr.io/$projectID/go-windows if ($?) { Write-Host "Successfully pushed!" } else { Write-Host "Failed to push..." exit 1 } } else { Write-Host "Failed to build docker image" exit 1 }