Commit 76e42ff9 authored by Scott Frederick's avatar Scott Frederick

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
parent 9c24ca06
...@@ -63,6 +63,7 @@ final class Buildpacks { ...@@ -63,6 +63,7 @@ final class Buildpacks {
private String getOrderToml() { private String getOrderToml() {
StringBuilder builder = new StringBuilder(); StringBuilder builder = new StringBuilder();
builder.append("[[order]]\n\n");
for (Buildpack buildpack : this.buildpacks) { for (Buildpack buildpack : this.buildpacks) {
appendToOrderToml(builder, buildpack.getCoordinates()); appendToOrderToml(builder, buildpack.getCoordinates());
} }
...@@ -70,15 +71,12 @@ final class Buildpacks { ...@@ -70,15 +71,12 @@ final class Buildpacks {
} }
private void appendToOrderToml(StringBuilder builder, BuildpackCoordinates coordinates) { private void appendToOrderToml(StringBuilder builder, BuildpackCoordinates coordinates) {
builder.append("[[order]]\n"); builder.append(" [[order.group]]\n");
builder.append("group = [\n"); builder.append(" id = \"" + coordinates.getId() + "\"\n");
builder.append(" { ");
builder.append("id = \"" + coordinates.getId() + "\"");
if (StringUtils.hasText(coordinates.getVersion())) { if (StringUtils.hasText(coordinates.getVersion())) {
builder.append(", version = \"" + coordinates.getVersion() + "\""); builder.append(" version = \"" + coordinates.getVersion() + "\"\n");
} }
builder.append(" }\n"); builder.append("\n");
builder.append("]\n\n");
} }
static Buildpacks of(List<Buildpack> buildpacks) { static Buildpacks of(List<Buildpack> buildpacks) {
......
...@@ -94,17 +94,18 @@ class BuildpacksTests { ...@@ -94,17 +94,18 @@ class BuildpacksTests {
private String getExpectedToml() { private String getExpectedToml() {
StringBuilder toml = new StringBuilder(); StringBuilder toml = new StringBuilder();
toml.append("[[order]]\n"); toml.append("[[order]]\n");
toml.append("group = [\n"); toml.append("\n");
toml.append(" { id = \"example/buildpack1\", version = \"0.0.1\" }\n"); toml.append(" [[order.group]]\n");
toml.append("]\n\n"); toml.append(" id = \"example/buildpack1\"\n");
toml.append("[[order]]\n"); toml.append(" version = \"0.0.1\"\n");
toml.append("group = [\n"); toml.append("\n");
toml.append(" { id = \"example/buildpack2\", version = \"0.0.2\" }\n"); toml.append(" [[order.group]]\n");
toml.append("]\n\n"); toml.append(" id = \"example/buildpack2\"\n");
toml.append("[[order]]\n"); toml.append(" version = \"0.0.2\"\n");
toml.append("group = [\n"); toml.append("\n");
toml.append(" { id = \"example/buildpack3\" }\n"); toml.append(" [[order.group]]\n");
toml.append("]\n\n"); toml.append(" id = \"example/buildpack3\"\n");
toml.append("\n");
return toml.toString(); return toml.toString();
} }
......
...@@ -146,7 +146,7 @@ class EphemeralBuilderTests extends AbstractJsonTests { ...@@ -146,7 +146,7 @@ class EphemeralBuilderTests extends AbstractJsonTests {
assertBuildpackLayerContent(builder, 2, "/cnb/buildpacks/example_buildpack3/0.0.3/buildpack.toml"); assertBuildpackLayerContent(builder, 2, "/cnb/buildpacks/example_buildpack3/0.0.3/buildpack.toml");
File orderDirectory = unpack(getLayer(builder.getArchive(), 3), "order"); File orderDirectory = unpack(getLayer(builder.getArchive(), 3), "order");
assertThat(new File(orderDirectory, "cnb/order.toml")).usingCharset(StandardCharsets.UTF_8) 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 { private void assertBuildpackLayerContent(EphemeralBuilder builder, int index, String s) throws Exception {
......
[[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" }
]
[[order]] [[order]]
group = [
{ id = "example/buildpack1" }
]
[[order]] [[order.group]]
group = [ id = "example/buildpack1"
{ id = "example/buildpack2" } version = "0.0.1"
]
[[order]] [[order.group]]
group = [ id = "example/buildpack2"
{ id = "example/buildpack3" } version = "0.0.2"
]
[[order.group]]
id = "example/buildpack3"
version = "0.0.3"
...@@ -203,7 +203,7 @@ class BootBuildImageIntegrationTests { ...@@ -203,7 +203,7 @@ class BootBuildImageIntegrationTests {
} }
@TestTemplate @TestTemplate
void buildsImageWithBuildpackFromImage() throws IOException { void buildsImageWithBuildpacksFromImages() throws IOException {
writeMainClass(); writeMainClass();
writeLongNameResource(); writeLongNameResource();
BuildResult result = this.gradleBuild.build("bootBuildImage", "--pullPolicy=IF_NOT_PRESENT"); BuildResult result = this.gradleBuild.build("bootBuildImage", "--pullPolicy=IF_NOT_PRESENT");
......
...@@ -7,5 +7,7 @@ sourceCompatibility = '1.8' ...@@ -7,5 +7,7 @@ sourceCompatibility = '1.8'
targetCompatibility = '1.8' targetCompatibility = '1.8'
bootBuildImage { bootBuildImage {
buildpacks = [ "gcr.io/paketo-buildpacks/java:latest" ] buildpacks = ["gcr.io/paketo-buildpacks/bellsoft-liberica:latest",
"gcr.io/paketo-buildpacks/executable-jar:latest",
"gcr.io/paketo-buildpacks/spring-boot:latest"]
} }
...@@ -24,7 +24,9 @@ ...@@ -24,7 +24,9 @@
<configuration> <configuration>
<image> <image>
<buildpacks> <buildpacks>
<buildpack>paketo-buildpacks/java</buildpack> <buildpack>gcr.io/paketo-buildpacks/bellsoft-liberica:latest</buildpack>
<buildpack>gcr.io/paketo-buildpacks/executable-jar:latest</buildpack>
<buildpack>gcr.io/paketo-buildpacks/spring-boot:latest</buildpack>
</buildpacks> </buildpacks>
</image> </image>
</configuration> </configuration>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment