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
This commit is contained in:
Scott Frederick
2021-02-23 13:56:57 -06:00
parent 9c24ca06ae
commit 76e42ff96f
9 changed files with 45 additions and 58 deletions

View File

@@ -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<Buildpack> buildpacks) {

View File

@@ -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();
}

View File

@@ -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 {

View File

@@ -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" }
]

View File

@@ -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"

View File

@@ -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");

View File

@@ -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" ]
}

View File

@@ -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"]
}

View File

@@ -24,7 +24,9 @@
<configuration>
<image>
<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>
</image>
</configuration>