From 076054da6bb2f70b1402464b89b17388e62d4222 Mon Sep 17 00:00:00 2001 From: Alpar Torok Date: Mon, 17 Dec 2018 14:59:13 +0200 Subject: [PATCH 1/2] Fix build on sles with new docker version Closes #36414 --- .../elasticsearch/gradle/BuildPlugin.groovy | 28 +++++++------ .../gradle/BuildPluginTests.java | 40 +++++++++++++++++++ 2 files changed, 56 insertions(+), 12 deletions(-) create mode 100644 buildSrc/src/test/groovy/org/elasticsearch/gradle/BuildPluginTests.java diff --git a/buildSrc/src/main/groovy/org/elasticsearch/gradle/BuildPlugin.groovy b/buildSrc/src/main/groovy/org/elasticsearch/gradle/BuildPlugin.groovy index 5a32586b979ff..8542d468cad8e 100644 --- a/buildSrc/src/main/groovy/org/elasticsearch/gradle/BuildPlugin.groovy +++ b/buildSrc/src/main/groovy/org/elasticsearch/gradle/BuildPlugin.groovy @@ -292,18 +292,7 @@ class BuildPlugin implements Plugin { it.standardOutput = dockerVersionOutput }) final String dockerVersion = dockerVersionOutput.toString().trim() - final Matcher matcher = dockerVersion =~ /Docker version (\d+\.\d+)\.\d+(?:-ce)?, build [0-9a-f]{7}/ - assert matcher.matches() : dockerVersion - final dockerMajorMinorVersion = matcher.group(1) - final String[] majorMinor = dockerMajorMinorVersion.split("\\.") - if (Integer.parseInt(majorMinor[0]) < 17 - || (Integer.parseInt(majorMinor[0]) == 17 && Integer.parseInt(majorMinor[1]) < 5)) { - final String message = String.format( - Locale.ROOT, - "building Docker images requires Docker version 17.05+ due to use of multi-stage builds yet was [%s]", - dockerVersion) - throwDockerRequiredException(message) - } + checkDockerVersionRecent(dockerVersion) final ByteArrayOutputStream dockerImagesErrorOutput = new ByteArrayOutputStream() // the Docker binary executes, check that we can execute a privileged command @@ -338,6 +327,21 @@ class BuildPlugin implements Plugin { } } + protected static void checkDockerVersionRecent(String dockerVersion) { + final Matcher matcher = dockerVersion =~ /Docker version (\d+\.\d+)\.\d+(?:-ce)?, build [0-9a-f]{7,}/ + assert matcher.matches(): dockerVersion + final dockerMajorMinorVersion = matcher.group(1) + final String[] majorMinor = dockerMajorMinorVersion.split("\\.") + if (Integer.parseInt(majorMinor[0]) < 17 + || (Integer.parseInt(majorMinor[0]) == 17 && Integer.parseInt(majorMinor[1]) < 5)) { + final String message = String.format( + Locale.ROOT, + "building Docker images requires Docker version 17.05+ due to use of multi-stage builds yet was [%s]", + dockerVersion) + throwDockerRequiredException(message) + } + } + private static void throwDockerRequiredException(final String message) { throw new GradleException( message + "\nyou can address this by attending to the reported issue, " diff --git a/buildSrc/src/test/groovy/org/elasticsearch/gradle/BuildPluginTests.java b/buildSrc/src/test/groovy/org/elasticsearch/gradle/BuildPluginTests.java new file mode 100644 index 0000000000000..7157fbf467f9b --- /dev/null +++ b/buildSrc/src/test/groovy/org/elasticsearch/gradle/BuildPluginTests.java @@ -0,0 +1,40 @@ +/* + * Licensed to Elasticsearch under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.elasticsearch.gradle; + +import org.elasticsearch.gradle.test.GradleUnitTestCase; +import org.gradle.api.GradleException; +import org.junit.Test; + + +public class BuildPluginTests extends GradleUnitTestCase { + + @Test + public void checkDockerVersionRecent() { + BuildPlugin.checkDockerVersionRecent("Docker version 18.06.1-ce, build e68fc7a215d7"); + BuildPlugin.checkDockerVersionRecent("Docker version 17.05.0, build e68fc7a"); + BuildPlugin.checkDockerVersionRecent("Docker version 17.05.1, build e68fc7a"); + } + + @Test(expected = GradleException.class) + public void checkDockerVersionRecentOl() { + BuildPlugin.checkDockerVersionRecent("Docker version 17.04.0, build e68fc7a"); + } + +} From 1d7bb1803b97bacf2a1d071a56321d3c29c281ef Mon Sep 17 00:00:00 2001 From: Alpar Torok Date: Mon, 17 Dec 2018 15:54:41 +0200 Subject: [PATCH 2/2] PR review --- .../main/groovy/org/elasticsearch/gradle/BuildPlugin.groovy | 2 +- .../groovy/org/elasticsearch/gradle/BuildPluginTests.java | 5 ++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/buildSrc/src/main/groovy/org/elasticsearch/gradle/BuildPlugin.groovy b/buildSrc/src/main/groovy/org/elasticsearch/gradle/BuildPlugin.groovy index 8542d468cad8e..9f81354bef12d 100644 --- a/buildSrc/src/main/groovy/org/elasticsearch/gradle/BuildPlugin.groovy +++ b/buildSrc/src/main/groovy/org/elasticsearch/gradle/BuildPlugin.groovy @@ -328,7 +328,7 @@ class BuildPlugin implements Plugin { } protected static void checkDockerVersionRecent(String dockerVersion) { - final Matcher matcher = dockerVersion =~ /Docker version (\d+\.\d+)\.\d+(?:-ce)?, build [0-9a-f]{7,}/ + final Matcher matcher = dockerVersion =~ /Docker version (\d+\.\d+)\.\d+(?:-ce)?, build [0-9a-f]{7,40}/ assert matcher.matches(): dockerVersion final dockerMajorMinorVersion = matcher.group(1) final String[] majorMinor = dockerMajorMinorVersion.split("\\.") diff --git a/buildSrc/src/test/groovy/org/elasticsearch/gradle/BuildPluginTests.java b/buildSrc/src/test/groovy/org/elasticsearch/gradle/BuildPluginTests.java index 7157fbf467f9b..90af9a2401ace 100644 --- a/buildSrc/src/test/groovy/org/elasticsearch/gradle/BuildPluginTests.java +++ b/buildSrc/src/test/groovy/org/elasticsearch/gradle/BuildPluginTests.java @@ -25,15 +25,14 @@ public class BuildPluginTests extends GradleUnitTestCase { - @Test - public void checkDockerVersionRecent() { + public void testPassingDockerVersions() { BuildPlugin.checkDockerVersionRecent("Docker version 18.06.1-ce, build e68fc7a215d7"); BuildPlugin.checkDockerVersionRecent("Docker version 17.05.0, build e68fc7a"); BuildPlugin.checkDockerVersionRecent("Docker version 17.05.1, build e68fc7a"); } @Test(expected = GradleException.class) - public void checkDockerVersionRecentOl() { + public void testFailingDockerVersions() { BuildPlugin.checkDockerVersionRecent("Docker version 17.04.0, build e68fc7a"); }