From 76e42ff96f4bd4add2ca3c4ac10574d6e1afc527 Mon Sep 17 00:00:00 2001 From: Scott Frederick Date: Tue, 23 Feb 2021 13:56:57 -0600 Subject: [PATCH] Correct grouping of custom buildpacks This commit corrects the order.toml file that is generated and added to the builder when building an image using custom buildpacks with the Maven or Gradle plugin in order to support buildpacks that depend on detection as a group. Fixes gh-25378 --- .../buildpack/platform/build/Buildpacks.java | 12 ++++------ .../platform/build/BuildpacksTests.java | 23 ++++++++++--------- .../platform/build/EphemeralBuilderTests.java | 2 +- .../platform/build/order-versions.toml | 15 ------------ .../boot/buildpack/platform/build/order.toml | 21 ++++++++--------- .../BootBuildImageIntegrationTests.java | 2 +- ...s-buildsImageWithBuildpackFromImage.gradle | 11 --------- ...buildsImageWithBuildpacksFromImages.gradle | 13 +++++++++++ .../build-image-custom-buildpacks/pom.xml | 4 +++- 9 files changed, 45 insertions(+), 58 deletions(-) delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-buildpack-platform/src/test/resources/org/springframework/boot/buildpack/platform/build/order-versions.toml delete mode 100644 spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageWithBuildpackFromImage.gradle create mode 100644 spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageWithBuildpacksFromImages.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-buildpack-platform/src/main/java/org/springframework/boot/buildpack/platform/build/Buildpacks.java b/spring-boot-project/spring-boot-tools/spring-boot-buildpack-platform/src/main/java/org/springframework/boot/buildpack/platform/build/Buildpacks.java index bf04b623995..6657dcd0747 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-buildpack-platform/src/main/java/org/springframework/boot/buildpack/platform/build/Buildpacks.java +++ b/spring-boot-project/spring-boot-tools/spring-boot-buildpack-platform/src/main/java/org/springframework/boot/buildpack/platform/build/Buildpacks.java @@ -63,6 +63,7 @@ final class Buildpacks { private String getOrderToml() { StringBuilder builder = new StringBuilder(); + builder.append("[[order]]\n\n"); for (Buildpack buildpack : this.buildpacks) { appendToOrderToml(builder, buildpack.getCoordinates()); } @@ -70,15 +71,12 @@ final class Buildpacks { } private void appendToOrderToml(StringBuilder builder, BuildpackCoordinates coordinates) { - builder.append("[[order]]\n"); - builder.append("group = [\n"); - builder.append(" { "); - builder.append("id = \"" + coordinates.getId() + "\""); + builder.append(" [[order.group]]\n"); + builder.append(" id = \"" + coordinates.getId() + "\"\n"); if (StringUtils.hasText(coordinates.getVersion())) { - builder.append(", version = \"" + coordinates.getVersion() + "\""); + builder.append(" version = \"" + coordinates.getVersion() + "\"\n"); } - builder.append(" }\n"); - builder.append("]\n\n"); + builder.append("\n"); } static Buildpacks of(List buildpacks) { diff --git a/spring-boot-project/spring-boot-tools/spring-boot-buildpack-platform/src/test/java/org/springframework/boot/buildpack/platform/build/BuildpacksTests.java b/spring-boot-project/spring-boot-tools/spring-boot-buildpack-platform/src/test/java/org/springframework/boot/buildpack/platform/build/BuildpacksTests.java index a45b2a72472..0d13924f833 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-buildpack-platform/src/test/java/org/springframework/boot/buildpack/platform/build/BuildpacksTests.java +++ b/spring-boot-project/spring-boot-tools/spring-boot-buildpack-platform/src/test/java/org/springframework/boot/buildpack/platform/build/BuildpacksTests.java @@ -94,17 +94,18 @@ class BuildpacksTests { private String getExpectedToml() { StringBuilder toml = new StringBuilder(); toml.append("[[order]]\n"); - toml.append("group = [\n"); - toml.append(" { id = \"example/buildpack1\", version = \"0.0.1\" }\n"); - toml.append("]\n\n"); - toml.append("[[order]]\n"); - toml.append("group = [\n"); - toml.append(" { id = \"example/buildpack2\", version = \"0.0.2\" }\n"); - toml.append("]\n\n"); - toml.append("[[order]]\n"); - toml.append("group = [\n"); - toml.append(" { id = \"example/buildpack3\" }\n"); - toml.append("]\n\n"); + toml.append("\n"); + toml.append(" [[order.group]]\n"); + toml.append(" id = \"example/buildpack1\"\n"); + toml.append(" version = \"0.0.1\"\n"); + toml.append("\n"); + toml.append(" [[order.group]]\n"); + toml.append(" id = \"example/buildpack2\"\n"); + toml.append(" version = \"0.0.2\"\n"); + toml.append("\n"); + toml.append(" [[order.group]]\n"); + toml.append(" id = \"example/buildpack3\"\n"); + toml.append("\n"); return toml.toString(); } diff --git a/spring-boot-project/spring-boot-tools/spring-boot-buildpack-platform/src/test/java/org/springframework/boot/buildpack/platform/build/EphemeralBuilderTests.java b/spring-boot-project/spring-boot-tools/spring-boot-buildpack-platform/src/test/java/org/springframework/boot/buildpack/platform/build/EphemeralBuilderTests.java index 2452003b4f8..b0b5b3e792b 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-buildpack-platform/src/test/java/org/springframework/boot/buildpack/platform/build/EphemeralBuilderTests.java +++ b/spring-boot-project/spring-boot-tools/spring-boot-buildpack-platform/src/test/java/org/springframework/boot/buildpack/platform/build/EphemeralBuilderTests.java @@ -146,7 +146,7 @@ class EphemeralBuilderTests extends AbstractJsonTests { assertBuildpackLayerContent(builder, 2, "/cnb/buildpacks/example_buildpack3/0.0.3/buildpack.toml"); File orderDirectory = unpack(getLayer(builder.getArchive(), 3), "order"); assertThat(new File(orderDirectory, "cnb/order.toml")).usingCharset(StandardCharsets.UTF_8) - .hasContent(content("order-versions.toml")); + .hasContent(content("order.toml")); } private void assertBuildpackLayerContent(EphemeralBuilder builder, int index, String s) throws Exception { diff --git a/spring-boot-project/spring-boot-tools/spring-boot-buildpack-platform/src/test/resources/org/springframework/boot/buildpack/platform/build/order-versions.toml b/spring-boot-project/spring-boot-tools/spring-boot-buildpack-platform/src/test/resources/org/springframework/boot/buildpack/platform/build/order-versions.toml deleted file mode 100644 index 365b2c49527..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-buildpack-platform/src/test/resources/org/springframework/boot/buildpack/platform/build/order-versions.toml +++ /dev/null @@ -1,15 +0,0 @@ -[[order]] -group = [ - { id = "example/buildpack1", version = "0.0.1" } -] - -[[order]] -group = [ - { id = "example/buildpack2", version = "0.0.2" } -] - -[[order]] -group = [ - { id = "example/buildpack3", version = "0.0.3" } -] - diff --git a/spring-boot-project/spring-boot-tools/spring-boot-buildpack-platform/src/test/resources/org/springframework/boot/buildpack/platform/build/order.toml b/spring-boot-project/spring-boot-tools/spring-boot-buildpack-platform/src/test/resources/org/springframework/boot/buildpack/platform/build/order.toml index 90415774d6b..f3170354502 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-buildpack-platform/src/test/resources/org/springframework/boot/buildpack/platform/build/order.toml +++ b/spring-boot-project/spring-boot-tools/spring-boot-buildpack-platform/src/test/resources/org/springframework/boot/buildpack/platform/build/order.toml @@ -1,15 +1,14 @@ [[order]] -group = [ - { id = "example/buildpack1" } -] -[[order]] -group = [ - { id = "example/buildpack2" } -] + [[order.group]] + id = "example/buildpack1" + version = "0.0.1" -[[order]] -group = [ - { id = "example/buildpack3" } -] + [[order.group]] + id = "example/buildpack2" + version = "0.0.2" + + [[order.group]] + id = "example/buildpack3" + version = "0.0.3" diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests.java b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests.java index e1f9f03c977..b433d743f7e 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests.java +++ b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests.java @@ -203,7 +203,7 @@ class BootBuildImageIntegrationTests { } @TestTemplate - void buildsImageWithBuildpackFromImage() throws IOException { + void buildsImageWithBuildpacksFromImages() throws IOException { writeMainClass(); writeLongNameResource(); BuildResult result = this.gradleBuild.build("bootBuildImage", "--pullPolicy=IF_NOT_PRESENT"); diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageWithBuildpackFromImage.gradle b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageWithBuildpackFromImage.gradle deleted file mode 100644 index 5890a4fc655..00000000000 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageWithBuildpackFromImage.gradle +++ /dev/null @@ -1,11 +0,0 @@ -plugins { - id 'java' - id 'org.springframework.boot' version '{version}' -} - -sourceCompatibility = '1.8' -targetCompatibility = '1.8' - -bootBuildImage { - buildpacks = [ "gcr.io/paketo-buildpacks/java:latest" ] -} diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageWithBuildpacksFromImages.gradle b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageWithBuildpacksFromImages.gradle new file mode 100644 index 00000000000..b6546bc6aa2 --- /dev/null +++ b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageWithBuildpacksFromImages.gradle @@ -0,0 +1,13 @@ +plugins { + id 'java' + id 'org.springframework.boot' version '{version}' +} + +sourceCompatibility = '1.8' +targetCompatibility = '1.8' + +bootBuildImage { + buildpacks = ["gcr.io/paketo-buildpacks/bellsoft-liberica:latest", + "gcr.io/paketo-buildpacks/executable-jar:latest", + "gcr.io/paketo-buildpacks/spring-boot:latest"] +} diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-image-custom-buildpacks/pom.xml b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-image-custom-buildpacks/pom.xml index 360d426dd6b..4d7308ea208 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-image-custom-buildpacks/pom.xml +++ b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-image-custom-buildpacks/pom.xml @@ -24,7 +24,9 @@ - paketo-buildpacks/java + gcr.io/paketo-buildpacks/bellsoft-liberica:latest + gcr.io/paketo-buildpacks/executable-jar:latest + gcr.io/paketo-buildpacks/spring-boot:latest