From 4fa57a8191b1d23c6466725b688519f83c0ac5dd Mon Sep 17 00:00:00 2001 From: Sebastiaan van Stijn Date: Sat, 20 Jul 2019 12:54:50 +0200 Subject: [PATCH] Windows: fix Golang version checks for GO_VERSION build-arg This check was used to make sure we don't bump Go versions independently (Linux/Windows). The Dockerfile switched to using a build-arg to allow overriding the Go version, which rendered this check non-functional. It also fails if Linux versions use a specific variant of the image; 08:41:31 ERROR: Failed 'ERROR: Mismatched GO versions between Dockerfile and Dockerfile.windows. Update your PR to ensure that both files are updated and in sync. ${GO_VERSION}-stretch ${GO_VERSION}' at 07/20/2019 08:41:31 08:41:31 At C:\gopath\src\github.com\docker\docker\hack\ci\windows.ps1:448 char:9 08:41:31 + Throw "ERROR: Mismatched GO versions between Dockerfile and D ... 08:41:31 + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This patch fixes the check by looking for the value of `GO_VERSION` instead of looking at the `FROM` line (which is harder to parse). Signed-off-by: Sebastiaan van Stijn --- hack/ci/windows.ps1 | 17 +++-------------- hack/make.ps1 | 2 +- 2 files changed, 4 insertions(+), 15 deletions(-) diff --git a/hack/ci/windows.ps1 b/hack/ci/windows.ps1 index 3e4c83a93d..8828f73d01 100644 --- a/hack/ci/windows.ps1 +++ b/hack/ci/windows.ps1 @@ -426,20 +426,9 @@ Try { Write-Host -ForegroundColor Green "INFO: Location for testing is $env:TEMP" # CI Integrity check - ensure Dockerfile.windows and Dockerfile go versions match - $goVersionDockerfileWindows=$(Get-Content ".\Dockerfile.windows" | Select-String "^ENV GO_VERSION" | Select-object -First 1).ToString().Replace("ENV GO_VERSION=","").Replace("\","").Replace("``","").Trim() - $goVersionDockerfile=$(Get-Content ".\Dockerfile" | Select-String "^ENV GO_VERSION" | Select-object -First 1) - - # As of go 1.11, Dockerfile changed to be in the format like "FROM golang:1.11.0 AS base". - # If a version number ends with .0 (as in 1.11.0, a convention used in golang docker - # image versions), it needs to be removed (i.e. "1.11.0" becomes "1.11"). - if ($null -eq $goVersionDockerfile) { - $goVersionDockerfile=$(Get-Content ".\Dockerfile" | Select-String "^FROM golang:" | Select-object -First 1) - if ($null -ne $goVersionDockerfile) { - $goVersionDockerfile = $goVersionDockerfile.ToString().Split(" ")[1].Split(":")[1] -replace '\.0$','' - } - } else { - $goVersionDockerfile = $goVersionDockerfile.ToString().Split(" ")[2] - } + $goVersionDockerfileWindows=(Select-String -Path ".\Dockerfile.windows" -Pattern "^ARG[\s]+GO_VERSION=(.*)$").Matches.groups[1].Value + $goVersionDockerfile=(Select-String -Path ".\Dockerfile" -Pattern "^ARG[\s]+GO_VERSION=(.*)$").Matches.groups[1].Value + if ($null -eq $goVersionDockerfile) { Throw "ERROR: Failed to extract golang version from Dockerfile" } diff --git a/hack/make.ps1 b/hack/make.ps1 index 6e5bc45e50..3c51716ed3 100644 --- a/hack/make.ps1 +++ b/hack/make.ps1 @@ -134,7 +134,7 @@ Function Check-InContainer() { # outside of a container where it may be out of date with master. Function Verify-GoVersion() { Try { - $goVersionDockerfile=(Select-String -Path ".\Dockerfile" -Pattern "^FROM golang:").ToString().Split(" ")[1].SubString(7) -replace '\.0$','' + $goVersionDockerfile=(Select-String -Path ".\Dockerfile" -Pattern "^ARG[\s]+GO_VERSION=(.*)$").Matches.groups[1].Value.TrimEnd(".0") $goVersionInstalled=(go version).ToString().Split(" ")[2].SubString(2) } Catch [Exception] {