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 294cb92137..e8868a8be3 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 @@ -38,8 +38,6 @@ import org.gradle.testkit.runner.TaskOutcome; import org.junit.jupiter.api.TestTemplate; import org.junit.jupiter.api.condition.DisabledOnOs; import org.junit.jupiter.api.condition.OS; -import org.testcontainers.containers.GenericContainer; -import org.testcontainers.containers.wait.strategy.Wait; import org.springframework.boot.buildpack.platform.docker.DockerApi; import org.springframework.boot.buildpack.platform.docker.type.ImageName; @@ -70,13 +68,10 @@ class BootBuildImageIntegrationTests { String projectName = this.gradleBuild.getProjectDir().getName(); assertThat(result.task(":bootBuildImage").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); assertThat(result.getOutput()).contains("docker.io/library/" + projectName); - ImageReference imageReference = ImageReference.of(ImageName.of(projectName)); - try (GenericContainer container = new GenericContainer<>(imageReference.toString())) { - container.waitingFor(Wait.forLogMessage("Launched\\n", 1)).start(); - } - finally { - new DockerApi().image().remove(imageReference, false); - } + assertThat(result.getOutput()).contains("---> Test Info buildpack building"); + assertThat(result.getOutput()).contains("env: BP_JVM_VERSION=8.*"); + assertThat(result.getOutput()).contains("---> Test Info buildpack done"); + removeImage(projectName); } @TestTemplate @@ -88,16 +83,13 @@ class BootBuildImageIntegrationTests { String projectName = this.gradleBuild.getProjectDir().getName(); assertThat(result.task(":bootBuildImage").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); assertThat(result.getOutput()).contains("docker.io/library/" + projectName); + assertThat(result.getOutput()).contains("---> Test Info buildpack building"); + assertThat(result.getOutput()).contains("env: BP_JVM_VERSION=8.*"); + assertThat(result.getOutput()).contains("---> Test Info buildpack done"); File buildLibs = new File(this.gradleBuild.getProjectDir(), "build/libs"); assertThat(buildLibs.listFiles()) .containsExactly(new File(buildLibs, this.gradleBuild.getProjectDir().getName() + ".war")); - ImageReference imageReference = ImageReference.of(ImageName.of(projectName)); - try (GenericContainer container = new GenericContainer<>(imageReference.toString())) { - container.waitingFor(Wait.forLogMessage("Launched\\n", 1)).start(); - } - finally { - new DockerApi().image().remove(imageReference, false); - } + removeImage(projectName); } @TestTemplate @@ -108,16 +100,12 @@ class BootBuildImageIntegrationTests { String projectName = this.gradleBuild.getProjectDir().getName(); assertThat(result.task(":bootBuildImage").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); assertThat(result.getOutput()).contains("docker.io/library/" + projectName); + assertThat(result.getOutput()).contains("---> Test Info buildpack building"); + assertThat(result.getOutput()).contains("---> Test Info buildpack done"); File buildLibs = new File(this.gradleBuild.getProjectDir(), "build/libs"); assertThat(buildLibs.listFiles()) .containsExactly(new File(buildLibs, this.gradleBuild.getProjectDir().getName() + ".war")); - ImageReference imageReference = ImageReference.of(ImageName.of(projectName)); - try (GenericContainer container = new GenericContainer<>(imageReference.toString())) { - container.waitingFor(Wait.forLogMessage("Launched\\n", 1)).start(); - } - finally { - new DockerApi().image().remove(imageReference, false); - } + removeImage(projectName); } @TestTemplate @@ -127,13 +115,9 @@ class BootBuildImageIntegrationTests { BuildResult result = this.gradleBuild.build("bootBuildImage", "--pullPolicy=IF_NOT_PRESENT"); assertThat(result.task(":bootBuildImage").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); assertThat(result.getOutput()).contains("example/test-image-name"); - ImageReference imageReference = ImageReference.of(ImageName.of("example/test-image-name")); - try (GenericContainer container = new GenericContainer<>(imageReference.toString())) { - container.waitingFor(Wait.forLogMessage("Launched\\n", 1)).start(); - } - finally { - new DockerApi().image().remove(imageReference, false); - } + assertThat(result.getOutput()).contains("---> Test Info buildpack building"); + assertThat(result.getOutput()).contains("---> Test Info buildpack done"); + removeImage("example/test-image-name"); } @TestTemplate @@ -143,13 +127,9 @@ class BootBuildImageIntegrationTests { BuildResult result = this.gradleBuild.build("bootBuildImage", "--pullPolicy=IF_NOT_PRESENT"); assertThat(result.task(":bootBuildImage").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); assertThat(result.getOutput()).contains("example/test-image-custom"); - ImageReference imageReference = ImageReference.of(ImageName.of("example/test-image-custom")); - try (GenericContainer container = new GenericContainer<>(imageReference.toString())) { - container.waitingFor(Wait.forLogMessage("Launched\\n", 1)).start(); - } - finally { - new DockerApi().image().remove(imageReference, false); - } + assertThat(result.getOutput()).contains("---> Test Info buildpack building"); + assertThat(result.getOutput()).contains("---> Test Info buildpack done"); + removeImage("example/test-image-custom"); } @TestTemplate @@ -157,17 +137,14 @@ class BootBuildImageIntegrationTests { writeMainClass(); writeLongNameResource(); BuildResult result = this.gradleBuild.build("bootBuildImage", "--pullPolicy=IF_NOT_PRESENT", - "--imageName=example/test-image-cmd", "--builder=paketobuildpacks/builder:full", - "--runImage=paketobuildpacks/run:full-cnb"); + "--imageName=example/test-image-cmd", + "--builder=projects.registry.vmware.com/springboot/spring-boot-cnb-builder:0.0.1", + "--runImage=projects.registry.vmware.com/springboot/run:tiny-cnb"); assertThat(result.task(":bootBuildImage").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); assertThat(result.getOutput()).contains("example/test-image-cmd"); - ImageReference imageReference = ImageReference.of(ImageName.of("example/test-image-cmd")); - try (GenericContainer container = new GenericContainer<>(imageReference.toString())) { - container.waitingFor(Wait.forLogMessage("Launched\\n", 1)).start(); - } - finally { - new DockerApi().image().remove(imageReference, false); - } + assertThat(result.getOutput()).contains("---> Test Info buildpack building"); + assertThat(result.getOutput()).contains("---> Test Info buildpack done"); + removeImage("example/test-image-cmd"); } @TestTemplate @@ -175,24 +152,13 @@ class BootBuildImageIntegrationTests { writeMainClass(); writeLongNameResource(); String projectName = this.gradleBuild.getProjectDir().getName(); - ImageReference imageReference = ImageReference.of(ImageName.of(projectName)); - BuildResult result = this.gradleBuild.build("bootBuildImage", "--pullPolicy=ALWAYS"); assertThat(result.task(":bootBuildImage").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); assertThat(result.getOutput()).contains("Pulled builder image").contains("Pulled run image"); - try (GenericContainer container = new GenericContainer<>(imageReference.toString())) { - container.waitingFor(Wait.forLogMessage("Launched\\n", 1)).start(); - } - result = this.gradleBuild.build("bootBuildImage", "--pullPolicy=IF_NOT_PRESENT"); assertThat(result.task(":bootBuildImage").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); assertThat(result.getOutput()).doesNotContain("Pulled builder image").doesNotContain("Pulled run image"); - try (GenericContainer container = new GenericContainer<>(imageReference.toString())) { - container.waitingFor(Wait.forLogMessage("Launched\\n", 1)).start(); - } - finally { - new DockerApi().image().remove(imageReference, false); - } + removeImage(projectName); } @TestTemplate @@ -203,13 +169,9 @@ class BootBuildImageIntegrationTests { String projectName = this.gradleBuild.getProjectDir().getName(); assertThat(result.task(":bootBuildImage").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); assertThat(result.getOutput()).contains("docker.io/library/" + projectName); - ImageReference imageReference = ImageReference.of(ImageName.of(projectName)); - try (GenericContainer container = new GenericContainer<>(imageReference.toString())) { - container.waitingFor(Wait.forLogMessage("Launched\\n", 1)).start(); - } - finally { - new DockerApi().image().remove(imageReference, false); - } + assertThat(result.getOutput()).contains("---> Test Info buildpack building") + .contains("---> Test Info buildpack done"); + removeImage(projectName); } @TestTemplate @@ -220,11 +182,10 @@ class BootBuildImageIntegrationTests { writeBuildpackContent(); BuildResult result = this.gradleBuild.build("bootBuildImage", "--pullPolicy=IF_NOT_PRESENT"); String projectName = this.gradleBuild.getProjectDir().getName(); - ImageReference imageReference = ImageReference.of(ImageName.of(projectName)); assertThat(result.task(":bootBuildImage").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); assertThat(result.getOutput()).contains("docker.io/library/" + projectName); assertThat(result.getOutput()).contains("---> Hello World buildpack"); - new DockerApi().image().remove(imageReference, false); + removeImage(projectName); } @TestTemplate @@ -236,11 +197,10 @@ class BootBuildImageIntegrationTests { tarGzipBuildpackContent(); BuildResult result = this.gradleBuild.build("bootBuildImage", "--pullPolicy=IF_NOT_PRESENT"); String projectName = this.gradleBuild.getProjectDir().getName(); - ImageReference imageReference = ImageReference.of(ImageName.of(projectName)); assertThat(result.task(":bootBuildImage").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); assertThat(result.getOutput()).contains("docker.io/library/" + projectName); assertThat(result.getOutput()).contains("---> Hello World buildpack"); - new DockerApi().image().remove(imageReference, false); + removeImage(projectName); } @TestTemplate @@ -251,24 +211,26 @@ class BootBuildImageIntegrationTests { String projectName = this.gradleBuild.getProjectDir().getName(); assertThat(result.task(":bootBuildImage").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); assertThat(result.getOutput()).contains("docker.io/library/" + projectName); - ImageReference imageReference = ImageReference.of(ImageName.of(projectName)); - try (GenericContainer container = new GenericContainer<>(imageReference.toString())) { - container.waitingFor(Wait.forLogMessage("Launched\\n", 1)).start(); - } - finally { - new DockerApi().image().remove(imageReference, false); - } + assertThat(result.getOutput()).contains("---> Test Info buildpack building") + .contains("---> Test Info buildpack done"); + removeImage(projectName); } @TestTemplate - void failsWithBindingContainingInvalidCertificate() throws IOException { + void buildsImageWithBinding() throws IOException { writeMainClass(); writeLongNameResource(); writeCertificateBindingFiles(); - BuildResult result = this.gradleBuild.buildAndFail("bootBuildImage", "--pullPolicy=IF_NOT_PRESENT"); - assertThat(result.task(":bootBuildImage").getOutcome()).isEqualTo(TaskOutcome.FAILED); - assertThat(result.getOutput()).contains("failed to decode certificate") - .contains("/platform/bindings/certificates/test.crt"); + BuildResult result = this.gradleBuild.build("bootBuildImage", "--pullPolicy=IF_NOT_PRESENT"); + String projectName = this.gradleBuild.getProjectDir().getName(); + assertThat(result.task(":bootBuildImage").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); + assertThat(result.getOutput()).contains("docker.io/library/" + projectName); + assertThat(result.getOutput()).contains("---> Test Info buildpack building"); + assertThat(result.getOutput()).contains("binding: certificates/type=ca-certificates"); + assertThat(result.getOutput()).contains("binding: certificates/test1.crt=---certificate one---"); + assertThat(result.getOutput()).contains("binding: certificates/test2.crt=---certificate two---"); + assertThat(result.getOutput()).contains("---> Test Info buildpack done"); + removeImage(projectName); } @TestTemplate @@ -286,6 +248,7 @@ class BootBuildImageIntegrationTests { writeLongNameResource(); BuildResult result = this.gradleBuild.buildAndFail("bootBuildImage", "--pullPolicy=IF_NOT_PRESENT"); assertThat(result.task(":bootBuildImage").getOutcome()).isEqualTo(TaskOutcome.FAILED); + assertThat(result.getOutput()).contains("Forced builder failure"); assertThat(result.getOutput()).containsPattern("Builder lifecycle '.*' failed with status code"); } @@ -410,10 +373,19 @@ class BootBuildImageIntegrationTests { try (PrintWriter writer = new PrintWriter(new FileWriter(type))) { writer.print("ca-certificates"); } - File cert = new File(bindingDir, "test.crt"); - try (PrintWriter writer = new PrintWriter(new FileWriter(cert))) { - writer.println("not a valid certificate"); + File cert1 = new File(bindingDir, "test1.crt"); + try (PrintWriter writer = new PrintWriter(new FileWriter(cert1))) { + writer.println("---certificate one---"); } + File cert2 = new File(bindingDir, "test2.crt"); + try (PrintWriter writer = new PrintWriter(new FileWriter(cert2))) { + writer.println("---certificate two---"); + } + } + + private void removeImage(String name) throws IOException { + ImageReference imageReference = ImageReference.of(ImageName.of(name)); + new DockerApi().image().remove(imageReference, false); } } diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-failsWithBindingContainingInvalidCertificate.gradle b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageWithBinding.gradle similarity index 74% rename from spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-failsWithBindingContainingInvalidCertificate.gradle rename to spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageWithBinding.gradle index c20cac9d30..d9cb8f4b43 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-failsWithBindingContainingInvalidCertificate.gradle +++ b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageWithBinding.gradle @@ -7,5 +7,6 @@ sourceCompatibility = '1.8' targetCompatibility = '1.8' bootBuildImage { + builder = "projects.registry.vmware.com/springboot/spring-boot-cnb-builder:0.0.1" bindings = [ "${projectDir}/bindings/ca-certificates:/platform/bindings/certificates" ] } diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageWithBuildpackFromBuilder.gradle b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageWithBuildpackFromBuilder.gradle index 7f72543895..148c37228b 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageWithBuildpackFromBuilder.gradle +++ b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageWithBuildpackFromBuilder.gradle @@ -7,5 +7,6 @@ sourceCompatibility = '1.8' targetCompatibility = '1.8' bootBuildImage { - buildpacks = [ "paketo-buildpacks/java" ] + builder = "projects.registry.vmware.com/springboot/spring-boot-cnb-builder:0.0.1" + buildpacks = [ "spring-boot/test-info" ] } diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageWithBuildpackFromDirectory.gradle b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageWithBuildpackFromDirectory.gradle index dcdc9052e5..b21045dce1 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageWithBuildpackFromDirectory.gradle +++ b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageWithBuildpackFromDirectory.gradle @@ -7,5 +7,6 @@ sourceCompatibility = '1.8' targetCompatibility = '1.8' bootBuildImage { + builder = "projects.registry.vmware.com/springboot/spring-boot-cnb-builder:0.0.1" buildpacks = [ "file://${projectDir}/buildpack/hello-world" ] } diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageWithBuildpackFromTarGzip.gradle b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageWithBuildpackFromTarGzip.gradle index 77266efffe..4f3a7b9474 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageWithBuildpackFromTarGzip.gradle +++ b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageWithBuildpackFromTarGzip.gradle @@ -7,5 +7,6 @@ sourceCompatibility = '1.8' targetCompatibility = '1.8' bootBuildImage { + builder = "projects.registry.vmware.com/springboot/spring-boot-cnb-builder:0.0.1" buildpacks = [ "file://${projectDir}/hello-world.tgz" ] } 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 index b6546bc6aa..73c6d37ab9 100644 --- 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 @@ -7,7 +7,6 @@ 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"] + builder = "projects.registry.vmware.com/springboot/spring-boot-cnb-builder:0.0.1" + buildpacks = ["projects.registry.vmware.com/springboot/test-info:latest"] } diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageWithCommandLineOptions.gradle b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageWithCommandLineOptions.gradle new file mode 100644 index 0000000000..8971742147 --- /dev/null +++ b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageWithCommandLineOptions.gradle @@ -0,0 +1,7 @@ +plugins { + id 'java' + id 'org.springframework.boot' version '{version}' +} + +sourceCompatibility = '1.8' +targetCompatibility = '1.8' diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageWithCustomBuilderAndRunImage.gradle b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageWithCustomBuilderAndRunImage.gradle index 9878fe16db..b3fd2aa083 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageWithCustomBuilderAndRunImage.gradle +++ b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageWithCustomBuilderAndRunImage.gradle @@ -8,6 +8,6 @@ targetCompatibility = '1.8' bootBuildImage { imageName = "example/test-image-custom" - builder = "paketobuildpacks/builder:full" - runImage = "paketobuildpacks/run:full-cnb" + builder = "projects.registry.vmware.com/springboot/spring-boot-cnb-builder:0.0.1" + runImage = "projects.registry.vmware.com/springboot/run:tiny-cnb" } diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageWithCustomName.gradle b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageWithCustomName.gradle index e306457624..73e1cc664c 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageWithCustomName.gradle +++ b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageWithCustomName.gradle @@ -8,4 +8,5 @@ targetCompatibility = '1.8' bootBuildImage { imageName = "example/test-image-name" + builder = "projects.registry.vmware.com/springboot/spring-boot-cnb-builder:0.0.1" } diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageWithWarPackagingAndJarConfiguration.gradle b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageWithWarPackagingAndJarConfiguration.gradle index 5aa8c27efe..5c74c2f829 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageWithWarPackagingAndJarConfiguration.gradle +++ b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageWithWarPackagingAndJarConfiguration.gradle @@ -9,3 +9,7 @@ bootBuildImage { sourceCompatibility = '1.8' targetCompatibility = '1.8' + +bootBuildImage { + builder = "projects.registry.vmware.com/springboot/spring-boot-cnb-builder:0.0.1" +} \ No newline at end of file diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-failsWithBuilderError.gradle b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-failsWithBuilderError.gradle index fb706c51ca..cb5cf9966f 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-failsWithBuilderError.gradle +++ b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-failsWithBuilderError.gradle @@ -7,5 +7,6 @@ sourceCompatibility = '1.8' targetCompatibility = '1.8' bootBuildImage { - environment = ["BP_JVM_VERSION": "13.9.9"] + builder = "projects.registry.vmware.com/springboot/spring-boot-cnb-builder:0.0.1" + environment = ["FORCE_FAILURE": "true"] } diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-failsWithBuildpackNotInBuilder.gradle b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-failsWithBuildpackNotInBuilder.gradle index bcd932c770..f9a98a4343 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-failsWithBuildpackNotInBuilder.gradle +++ b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-failsWithBuildpackNotInBuilder.gradle @@ -7,5 +7,6 @@ sourceCompatibility = '1.8' targetCompatibility = '1.8' bootBuildImage { + builder = "projects.registry.vmware.com/springboot/spring-boot-cnb-builder:0.0.1" buildpacks = [ "urn:cnb:builder:example/does-not-exist:0.0.1" ] } diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-failsWithLaunchScript.gradle b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-failsWithLaunchScript.gradle index a719311038..c69f24eabc 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-failsWithLaunchScript.gradle +++ b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-failsWithLaunchScript.gradle @@ -8,4 +8,8 @@ targetCompatibility = '1.8' bootJar { launchScript() -} \ No newline at end of file +} + +bootBuildImage { + builder = "projects.registry.vmware.com/springboot/spring-boot-cnb-builder:0.0.1" +} diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests.gradle b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests.gradle index 5e0df9a58c..cf75779cbb 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests.gradle +++ b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests.gradle @@ -9,3 +9,7 @@ if (project.hasProperty('applyWarPlugin')) { sourceCompatibility = '1.8' targetCompatibility = '1.8' + +bootBuildImage { + builder = "projects.registry.vmware.com/springboot/spring-boot-cnb-builder:0.0.1" +} diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/java/org/springframework/boot/maven/BuildImageTests.java b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/java/org/springframework/boot/maven/BuildImageTests.java index 9ae96ccd1f..a5e1090d3f 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/java/org/springframework/boot/maven/BuildImageTests.java +++ b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/java/org/springframework/boot/maven/BuildImageTests.java @@ -16,21 +16,15 @@ package org.springframework.boot.maven; -import java.io.BufferedReader; import java.io.File; import java.io.IOException; -import java.io.InputStreamReader; -import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.Random; -import java.util.stream.Collectors; import org.junit.jupiter.api.TestTemplate; import org.junit.jupiter.api.extension.ExtendWith; -import org.testcontainers.containers.GenericContainer; -import org.testcontainers.containers.wait.strategy.Wait; import org.springframework.boot.buildpack.platform.docker.DockerApi; import org.springframework.boot.buildpack.platform.docker.type.ImageName; @@ -60,15 +54,9 @@ public class BuildImageTests extends AbstractArchiveIntegrationTests { assertThat(original).doesNotExist(); assertThat(buildLog(project)).contains("Building image") .contains("docker.io/library/build-image:0.0.1.BUILD-SNAPSHOT") - .contains("Successfully built image"); - ImageReference imageReference = ImageReference.of(ImageName.of("build-image"), - "0.0.1.BUILD-SNAPSHOT"); - try (GenericContainer container = new GenericContainer<>(imageReference.toString())) { - container.waitingFor(Wait.forLogMessage("Launched\\n", 1)).start(); - } - finally { - removeImage(imageReference); - } + .contains("---> Test Info buildpack building").contains("env: BP_JVM_VERSION=8.*") + .contains("---> Test Info buildpack done").contains("Successfully built image"); + removeImage("build-image", "0.0.1.BUILD-SNAPSHOT"); }); } @@ -83,15 +71,9 @@ public class BuildImageTests extends AbstractArchiveIntegrationTests { assertThat(classifier).doesNotExist(); assertThat(buildLog(project)).contains("Building image") .contains("docker.io/library/build-image-classifier:0.0.1.BUILD-SNAPSHOT") - .contains("Successfully built image"); - ImageReference imageReference = ImageReference.of(ImageName.of("build-image-classifier"), - "0.0.1.BUILD-SNAPSHOT"); - try (GenericContainer container = new GenericContainer<>(imageReference.toString())) { - container.waitingFor(Wait.forLogMessage("Launched\\n", 1)).start(); - } - finally { - removeImage(imageReference); - } + .contains("---> Test Info buildpack building").contains("env: BP_JVM_VERSION=8.*") + .contains("---> Test Info buildpack done").contains("Successfully built image"); + removeImage("build-image-classifier", "0.0.1.BUILD-SNAPSHOT"); }); } @@ -108,15 +90,9 @@ public class BuildImageTests extends AbstractArchiveIntegrationTests { assertThat(original).doesNotExist(); assertThat(buildLog(project)).contains("Building image") .contains("docker.io/library/build-image-classifier-source:0.0.1.BUILD-SNAPSHOT") + .contains("---> Test Info buildpack building").contains("---> Test Info buildpack done") .contains("Successfully built image"); - ImageReference imageReference = ImageReference.of(ImageName.of("build-image-classifier-source"), - "0.0.1.BUILD-SNAPSHOT"); - try (GenericContainer container = new GenericContainer<>(imageReference.toString())) { - container.waitingFor(Wait.forLogMessage("Launched\\n", 1)).start(); - } - finally { - removeImage(imageReference); - } + removeImage("build-image-classifier-source", "0.0.1.BUILD-SNAPSHOT"); }); } @@ -132,15 +108,9 @@ public class BuildImageTests extends AbstractArchiveIntegrationTests { assertThat(original).isFile(); assertThat(buildLog(project)).contains("Building image") .contains("docker.io/library/build-image-with-repackage:0.0.1.BUILD-SNAPSHOT") + .contains("---> Test Info buildpack building").contains("---> Test Info buildpack done") .contains("Successfully built image"); - ImageReference imageReference = ImageReference.of(ImageName.of("build-image-with-repackage"), - "0.0.1.BUILD-SNAPSHOT"); - try (GenericContainer container = new GenericContainer<>(imageReference.toString())) { - container.waitingFor(Wait.forLogMessage("Launched\\n", 1)).start(); - } - finally { - removeImage(imageReference); - } + removeImage("build-image-with-repackage", "0.0.1.BUILD-SNAPSHOT"); }); } @@ -157,15 +127,9 @@ public class BuildImageTests extends AbstractArchiveIntegrationTests { assertThat(original).isFile(); assertThat(buildLog(project)).contains("Building image") .contains("docker.io/library/build-image-classifier-with-repackage:0.0.1.BUILD-SNAPSHOT") + .contains("---> Test Info buildpack building").contains("---> Test Info buildpack done") .contains("Successfully built image"); - ImageReference imageReference = ImageReference - .of(ImageName.of("build-image-classifier-with-repackage"), "0.0.1.BUILD-SNAPSHOT"); - try (GenericContainer container = new GenericContainer<>(imageReference.toString())) { - container.waitingFor(Wait.forLogMessage("Launched\\n", 1)).start(); - } - finally { - removeImage(imageReference); - } + removeImage("build-image-classifier-with-repackage", "0.0.1.BUILD-SNAPSHOT"); }); } @@ -182,15 +146,9 @@ public class BuildImageTests extends AbstractArchiveIntegrationTests { assertThat(original).isFile(); assertThat(buildLog(project)).contains("Building image").contains( "docker.io/library/build-image-classifier-source-with-repackage:0.0.1.BUILD-SNAPSHOT") + .contains("---> Test Info buildpack building").contains("---> Test Info buildpack done") .contains("Successfully built image"); - ImageReference imageReference = ImageReference - .of(ImageName.of("build-image-classifier-source-with-repackage"), "0.0.1.BUILD-SNAPSHOT"); - try (GenericContainer container = new GenericContainer<>(imageReference.toString())) { - container.waitingFor(Wait.forLogMessage("Launched\\n", 1)).start(); - } - finally { - removeImage(imageReference); - } + removeImage("build-image-classifier-source-with-repackage", "0.0.1.BUILD-SNAPSHOT"); }); } @@ -206,15 +164,9 @@ public class BuildImageTests extends AbstractArchiveIntegrationTests { assertThat(original).doesNotExist(); assertThat(buildLog(project)).contains("Building image") .contains("docker.io/library/build-image-war-packaging:0.0.1.BUILD-SNAPSHOT") + .contains("---> Test Info buildpack building").contains("---> Test Info buildpack done") .contains("Successfully built image"); - ImageReference imageReference = ImageReference.of(ImageName.of("build-image-war-packaging"), - "0.0.1.BUILD-SNAPSHOT"); - try (GenericContainer container = new GenericContainer<>(imageReference.toString())) { - container.waitingFor(Wait.forLogMessage("Launched\\n", 1)).start(); - } - finally { - removeImage(imageReference); - } + removeImage("build-image-war-packaging", "0.0.1.BUILD-SNAPSHOT"); }); } @@ -231,15 +183,9 @@ public class BuildImageTests extends AbstractArchiveIntegrationTests { assertThat(original).doesNotExist(); assertThat(buildLog(project)).contains("Building image") .contains("example.com/test/build-image:0.0.1.BUILD-SNAPSHOT") + .contains("---> Test Info buildpack building").contains("---> Test Info buildpack done") .contains("Successfully built image"); - ImageReference imageReference = ImageReference - .of("example.com/test/build-image:0.0.1.BUILD-SNAPSHOT"); - try (GenericContainer container = new GenericContainer<>(imageReference.toString())) { - container.waitingFor(Wait.forLogMessage("Launched\\n", 1)).start(); - } - finally { - removeImage(imageReference); - } + removeImage("example.com/test/build-image", "0.0.1.BUILD-SNAPSHOT"); }); } @@ -248,18 +194,16 @@ public class BuildImageTests extends AbstractArchiveIntegrationTests { mavenBuild.project("build-image").goals("package") .systemProperty("spring-boot.build-image.pullPolicy", "IF_NOT_PRESENT") .systemProperty("spring-boot.build-image.imageName", "example.com/test/cmd-property-name:v1") - .systemProperty("spring-boot.build-image.builder", "paketobuildpacks/builder:full") - .systemProperty("spring-boot.build-image.runImage", "paketobuildpacks/run:full-cnb") + .systemProperty("spring-boot.build-image.builder", + "projects.registry.vmware.com/springboot/spring-boot-cnb-builder:0.0.1") + .systemProperty("spring-boot.build-image.runImage", + "projects.registry.vmware.com/springboot/run:tiny-cnb") .execute((project) -> { assertThat(buildLog(project)).contains("Building image") - .contains("example.com/test/cmd-property-name:v1").contains("Successfully built image"); - ImageReference imageReference = ImageReference.of("example.com/test/cmd-property-name:v1"); - try (GenericContainer container = new GenericContainer<>(imageReference.toString())) { - container.waitingFor(Wait.forLogMessage("Launched\\n", 1)).start(); - } - finally { - removeImage(imageReference); - } + .contains("example.com/test/cmd-property-name:v1") + .contains("---> Test Info buildpack building").contains("---> Test Info buildpack done") + .contains("Successfully built image"); + removeImage("example.com/test/cmd-property-name", "v1"); }); } @@ -269,15 +213,9 @@ public class BuildImageTests extends AbstractArchiveIntegrationTests { .systemProperty("spring-boot.build-image.pullPolicy", "IF_NOT_PRESENT").execute((project) -> { assertThat(buildLog(project)).contains("Building image") .contains("docker.io/library/build-image-v2-builder:0.0.1.BUILD-SNAPSHOT") + .contains("---> Test Info buildpack building").contains("---> Test Info buildpack done") .contains("Successfully built image"); - ImageReference imageReference = ImageReference - .of("docker.io/library/build-image-v2-builder:0.0.1.BUILD-SNAPSHOT"); - try (GenericContainer container = new GenericContainer<>(imageReference.toString())) { - container.waitingFor(Wait.forLogMessage("Launched\\n", 1)).start(); - } - finally { - removeImage(imageReference); - } + removeImage("docker.io/library/build-image-v2-builder", "0.0.1.BUILD-SNAPSHOT"); }); } @@ -288,42 +226,23 @@ public class BuildImageTests extends AbstractArchiveIntegrationTests { .prepare(this::writeLongNameResource).execute((project) -> { assertThat(buildLog(project)).contains("Building image") .contains("docker.io/library/build-image-empty-env-entry:0.0.1.BUILD-SNAPSHOT") + .contains("---> Test Info buildpack building").contains("---> Test Info buildpack done") .contains("Successfully built image"); - ImageReference imageReference = ImageReference.of(ImageName.of("build-image-empty-env-entry"), - "0.0.1.BUILD-SNAPSHOT"); - try (GenericContainer container = new GenericContainer<>(imageReference.toString())) { - container.waitingFor(Wait.forLogMessage("Launched\\n", 1)).start(); - } - finally { - removeImage(imageReference); - } + removeImage("build-image-empty-env-entry", "0.0.1.BUILD-SNAPSHOT"); }); } @TestTemplate void whenBuildImageIsInvokedWithZipPackaging(MavenBuild mavenBuild) { - mavenBuild.project("build-image-zip-packaging").goals("package") - .systemProperty("spring-boot.build-image.pullPolicy", "IF_NOT_PRESENT") - .prepare(this::writeLongNameResource).execute((project) -> { + mavenBuild.project("build-image-zip-packaging").goals("package").prepare(this::writeLongNameResource) + .systemProperty("spring-boot.build-image.pullPolicy", "IF_NOT_PRESENT").execute((project) -> { File jar = new File(project, "target/build-image-zip-packaging-0.0.1.BUILD-SNAPSHOT.jar"); assertThat(jar).isFile(); assertThat(buildLog(project)).contains("Building image") .contains("docker.io/library/build-image-zip-packaging:0.0.1.BUILD-SNAPSHOT") + .contains("Main-Class: org.springframework.boot.loader.PropertiesLauncher") .contains("Successfully built image"); - ImageReference imageReference = ImageReference.of(ImageName.of("build-image-zip-packaging"), - "0.0.1.BUILD-SNAPSHOT"); - try (GenericContainer container = new GenericContainer<>(imageReference.toString())) { - container.waitingFor(Wait.forLogMessage("Launched\\n", 1)).start(); - container.copyFileFromContainer("/workspace/META-INF/MANIFEST.MF", (inputStream) -> { - String text = new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8)) - .lines().collect(Collectors.joining("\n")); - assertThat(text).contains("Main-Class: org.springframework.boot.loader.PropertiesLauncher"); - return null; - }); - } - finally { - removeImage(imageReference); - } + removeImage("build-image-zip-packaging", "0.0.1.BUILD-SNAPSHOT"); }); } @@ -334,24 +253,21 @@ public class BuildImageTests extends AbstractArchiveIntegrationTests { assertThat(buildLog(project)).contains("Building image") .contains("docker.io/library/build-image-custom-buildpacks:0.0.1.BUILD-SNAPSHOT") .contains("Successfully built image"); - ImageReference imageReference = ImageReference - .of("docker.io/library/build-image-custom-buildpacks:0.0.1.BUILD-SNAPSHOT"); - try (GenericContainer container = new GenericContainer<>(imageReference.toString())) { - container.waitingFor(Wait.forLogMessage("Launched\\n", 1)).start(); - } - finally { - removeImage(imageReference); - } + removeImage("build-image-custom-buildpacks", "0.0.1.BUILD-SNAPSHOT"); }); } @TestTemplate - void failsWithBindingContainingInvalidCertificate(MavenBuild mavenBuild) { + void whenBuildImageIsInvokedWithBinding(MavenBuild mavenBuild) { mavenBuild.project("build-image-bindings").goals("package") - .systemProperty("spring-boot.build-image.pullPolicy", "IF_NOT_PRESENT") - .executeAndFail((project) -> assertThat(buildLog(project)).contains("Building image") - .contains("failed to decode certificate") - .contains("/platform/bindings/ca-certificates/test.crt")); + .systemProperty("spring-boot.build-image.pullPolicy", "IF_NOT_PRESENT").execute((project) -> { + assertThat(buildLog(project)).contains("Building image") + .contains("docker.io/library/build-image-bindings:0.0.1.BUILD-SNAPSHOT") + .contains("binding: ca-certificates/type=ca-certificates") + .contains("binding: ca-certificates/test.crt=---certificate one---") + .contains("Successfully built image"); + removeImage("build-image-bindings", "0.0.1.BUILD-SNAPSHOT"); + }); } @TestTemplate @@ -365,6 +281,7 @@ public class BuildImageTests extends AbstractArchiveIntegrationTests { mavenBuild.project("build-image-builder-error").goals("package") .systemProperty("spring-boot.build-image.pullPolicy", "IF_NOT_PRESENT") .executeAndFail((project) -> assertThat(buildLog(project)).contains("Building image") + .contains("---> Test Info buildpack building").contains("Forced builder failure") .containsPattern("Builder lifecycle '.*' failed with status code")); } @@ -396,7 +313,8 @@ public class BuildImageTests extends AbstractArchiveIntegrationTests { } } - private void removeImage(ImageReference imageReference) { + private void removeImage(String name, String version) { + ImageReference imageReference = ImageReference.of(ImageName.of(name), version); try { new DockerApi().image().remove(imageReference, false); } diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-image-bad-buildpack/pom.xml b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-image-bad-buildpack/pom.xml index 209d6d6e3a..ead5de9ee1 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-image-bad-buildpack/pom.xml +++ b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-image-bad-buildpack/pom.xml @@ -23,6 +23,7 @@ + projects.registry.vmware.com/springboot/spring-boot-cnb-builder:0.0.1 urn:cnb:builder:example/does-not-exist:0.0.1 diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-image-bindings/bindings/ca-certificates/test.crt b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-image-bindings/bindings/ca-certificates/test.crt index e403bc8f31..55229e911f 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-image-bindings/bindings/ca-certificates/test.crt +++ b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-image-bindings/bindings/ca-certificates/test.crt @@ -1 +1 @@ -not a valid certificate \ No newline at end of file +---certificate one--- \ No newline at end of file diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-image-bindings/pom.xml b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-image-bindings/pom.xml index df717aa199..dc85da5408 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-image-bindings/pom.xml +++ b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-image-bindings/pom.xml @@ -23,6 +23,7 @@ + projects.registry.vmware.com/springboot/spring-boot-cnb-builder:0.0.1 ${basedir}/bindings/ca-certificates:/platform/bindings/ca-certificates diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-image-builder-error/pom.xml b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-image-builder-error/pom.xml index 5b7491e88e..f4c6512756 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-image-builder-error/pom.xml +++ b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-image-builder-error/pom.xml @@ -23,8 +23,9 @@ + projects.registry.vmware.com/springboot/spring-boot-cnb-builder:0.0.1 - 13.9.9 + true diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-image-classifier-source-with-repackage/pom.xml b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-image-classifier-source-with-repackage/pom.xml index 7734c543d6..07102b08fd 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-image-classifier-source-with-repackage/pom.xml +++ b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-image-classifier-source-with-repackage/pom.xml @@ -43,6 +43,11 @@ build-image + + + projects.registry.vmware.com/springboot/spring-boot-cnb-builder:0.0.1 + + diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-image-classifier-source/pom.xml b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-image-classifier-source/pom.xml index 30b605a5bc..a46cf9d96b 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-image-classifier-source/pom.xml +++ b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-image-classifier-source/pom.xml @@ -37,6 +37,11 @@ build-image + + + projects.registry.vmware.com/springboot/spring-boot-cnb-builder:0.0.1 + + diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-image-classifier-with-repackage/pom.xml b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-image-classifier-with-repackage/pom.xml index d2f34ba4c6..29abc0f7e8 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-image-classifier-with-repackage/pom.xml +++ b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-image-classifier-with-repackage/pom.xml @@ -27,6 +27,11 @@ build-image + + + projects.registry.vmware.com/springboot/spring-boot-cnb-builder:0.0.1 + + diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-image-classifier/pom.xml b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-image-classifier/pom.xml index ba64b1df5f..fd54fc672c 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-image-classifier/pom.xml +++ b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-image-classifier/pom.xml @@ -21,6 +21,11 @@ build-image + + + projects.registry.vmware.com/springboot/spring-boot-cnb-builder:0.0.1 + + diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-image-cmd-line/pom.xml b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-image-cmd-line/pom.xml new file mode 100644 index 0000000000..0451a8426e --- /dev/null +++ b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-image-cmd-line/pom.xml @@ -0,0 +1,29 @@ + + + 4.0.0 + org.springframework.boot.maven.it + build-image + 0.0.1.BUILD-SNAPSHOT + + UTF-8 + @java.version@ + @java.version@ + + + + + @project.groupId@ + @project.artifactId@ + @project.version@ + + + + build-image + + + + + + + diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-image-cmd-line/src/main/java/org/test/SampleApplication.java b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-image-cmd-line/src/main/java/org/test/SampleApplication.java new file mode 100644 index 0000000000..5053809ef1 --- /dev/null +++ b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-image-cmd-line/src/main/java/org/test/SampleApplication.java @@ -0,0 +1,28 @@ +/* + * Copyright 2012-2021 the original author or authors. + * + * Licensed 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 + * + * https://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.test; + +public class SampleApplication { + + public static void main(String[] args) throws Exception { + System.out.println("Launched"); + synchronized(args) { + args.wait(); // Prevent exit" + } + } + +} diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-image-custom-builder/pom.xml b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-image-custom-builder/pom.xml index 457cb7c933..4ad4b944e4 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-image-custom-builder/pom.xml +++ b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-image-custom-builder/pom.xml @@ -1,6 +1,6 @@ + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 org.springframework.boot.maven.it build-image-v2-builder @@ -23,8 +23,8 @@ - paketobuildpacks/builder:full - paketobuildpacks/run:full-cnb + projects.registry.vmware.com/springboot/spring-boot-cnb-builder:0.0.1 + projects.registry.vmware.com/springboot/run:tiny-cnb 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 4d7308ea20..e308d28ed5 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 @@ -23,10 +23,9 @@ + projects.registry.vmware.com/springboot/spring-boot-cnb-builder:0.0.1 - gcr.io/paketo-buildpacks/bellsoft-liberica:latest - gcr.io/paketo-buildpacks/executable-jar:latest - gcr.io/paketo-buildpacks/spring-boot:latest + urn:cnb:builder:spring-boot/test-info diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-image-custom-name/pom.xml b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-image-custom-name/pom.xml index 57ec39dd84..fac4518529 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-image-custom-name/pom.xml +++ b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-image-custom-name/pom.xml @@ -23,6 +23,7 @@ + projects.registry.vmware.com/springboot/spring-boot-cnb-builder:0.0.1 example.com/test/build-image:${project.version} diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-image-empty-env-entry/pom.xml b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-image-empty-env-entry/pom.xml index e453fd95d6..7143fda8e5 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-image-empty-env-entry/pom.xml +++ b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-image-empty-env-entry/pom.xml @@ -23,6 +23,7 @@ + projects.registry.vmware.com/springboot/spring-boot-cnb-builder:0.0.1 diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-image-final-name/pom.xml b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-image-final-name/pom.xml index 599371978a..0acb2e142c 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-image-final-name/pom.xml +++ b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-image-final-name/pom.xml @@ -24,6 +24,9 @@ final-name + + projects.registry.vmware.com/springboot/spring-boot-cnb-builder:0.0.1 + diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-image-war-packaging/pom.xml b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-image-war-packaging/pom.xml index 5b7c0de349..fbb5204d6f 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-image-war-packaging/pom.xml +++ b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-image-war-packaging/pom.xml @@ -22,6 +22,11 @@ build-image + + + projects.registry.vmware.com/springboot/spring-boot-cnb-builder:0.0.1 + + diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-image-with-repackage/pom.xml b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-image-with-repackage/pom.xml index c9a9bd0322..f7ba2ef253 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-image-with-repackage/pom.xml +++ b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-image-with-repackage/pom.xml @@ -27,6 +27,11 @@ build-image + + + projects.registry.vmware.com/springboot/spring-boot-cnb-builder:0.0.1 + + diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-image-zip-packaging/pom.xml b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-image-zip-packaging/pom.xml index f62888620a..534c654bed 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-image-zip-packaging/pom.xml +++ b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-image-zip-packaging/pom.xml @@ -25,6 +25,9 @@ ZIP + + projects.registry.vmware.com/springboot/spring-boot-cnb-builder:0.0.1 + diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-image/pom.xml b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-image/pom.xml index 0451a8426e..1ede9fbe03 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-image/pom.xml +++ b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-image/pom.xml @@ -21,6 +21,11 @@ build-image + + + projects.registry.vmware.com/springboot/spring-boot-cnb-builder:0.0.1 + + diff --git a/src/spring-boot-builder/README.adoc b/src/spring-boot-builder/README.adoc new file mode 100644 index 0000000000..21a8202851 --- /dev/null +++ b/src/spring-boot-builder/README.adoc @@ -0,0 +1,10 @@ += Spring Boot Test Builder + +This directory contains a Cloud Native Buildpacks https://buildpacks.io/docs/concepts/components/builder/[builder] and https://buildpacks.io/docs/concepts/components/buildpack/[buildpack] that is used by integration tests to verify the behavior of the Spring Boot build plugins. + +== Creating the builder + +* Install the https://buildpacks.io/docs/install-pack/[pack CLI] +* Authenticate to projects.registry.vmware.com via `docker login` +* Use the `build.sh` create the necessary images and push them to the registry + diff --git a/src/spring-boot-builder/build.sh b/src/spring-boot-builder/build.sh new file mode 100755 index 0000000000..aaeb7ec6f4 --- /dev/null +++ b/src/spring-boot-builder/build.sh @@ -0,0 +1,15 @@ +#!/usr/bin/env bash +set -x -eo pipefail + +docker pull paketobuildpacks/build:tiny-cnb +docker tag paketobuildpacks/build:tiny-cnb projects.registry.vmware.com/springboot/build:tiny-cnb +docker push projects.registry.vmware.com/springboot/build:tiny-cnb + +docker pull paketobuildpacks/run:tiny-cnb +docker tag paketobuildpacks/run:tiny-cnb projects.registry.vmware.com/springboot/run:tiny-cnb +docker push projects.registry.vmware.com/springboot/run:tiny-cnb + +cd builder +pack builder create projects.registry.vmware.com/springboot/spring-boot-cnb-builder:0.0.1 --config builder.toml +docker push projects.registry.vmware.com/springboot/spring-boot-cnb-builder:0.0.1 +cd - \ No newline at end of file diff --git a/src/spring-boot-builder/builder/builder.toml b/src/spring-boot-builder/builder/builder.toml new file mode 100644 index 0000000000..7088dcbd70 --- /dev/null +++ b/src/spring-boot-builder/builder/builder.toml @@ -0,0 +1,17 @@ +# Buildpacks to include in builder +[[buildpacks]] +id = "spring-boot/test-info" +version = "0.0.1" +uri = "../buildpacks/test-info" + +# Order used for detection +[[order]] +[[order.group]] +id = "spring-boot/test-info" +version = "0.0.1" + +# Stack that will be used by the builder +[stack] +id = "io.paketo.stacks.tiny" +build-image = "projects.registry.vmware.com/springboot/build:tiny-cnb" +run-image = "projects.registry.vmware.com/springboot/run:tiny-cnb" diff --git a/src/spring-boot-builder/buildpacks/test-info/bin/build b/src/spring-boot-builder/buildpacks/test-info/bin/build new file mode 100755 index 0000000000..a9317aa0c6 --- /dev/null +++ b/src/spring-boot-builder/buildpacks/test-info/bin/build @@ -0,0 +1,35 @@ +#!/usr/bin/env bash +set -eo pipefail + +echo "---> Test Info buildpack building" + +# INPUT ARGUMENTS +platform_dir=$2 +env_dir=${platform_dir}/env +bindings_dir=${platform_dir}/bindings + +if [[ -f ${env_dir}/FORCE_FAILURE ]]; then + echo "Forced builder failure" + exit 1 +fi + +if compgen -G "${env_dir}/*" > /dev/null; then + for var in ${env_dir}/*; do + echo "env: $(basename ${var})=$(<${var})" + done +fi + +if compgen -G "${bindings_dir}/*" > /dev/null; then + for binding in ${bindings_dir}/*; do + for f in ${binding}/*; do + echo "binding: $(basename ${binding})/$(basename ${f})=$(<${f})" + done + done +fi + +echo "META-INF/MANIFEST.MF: " +if [[ -f META-INF/MANIFEST.MF ]]; then + cat META-INF/MANIFEST.MF +fi + +echo "---> Test Info buildpack done" diff --git a/src/spring-boot-builder/buildpacks/test-info/bin/detect b/src/spring-boot-builder/buildpacks/test-info/bin/detect new file mode 100755 index 0000000000..f7e1c76ebc --- /dev/null +++ b/src/spring-boot-builder/buildpacks/test-info/bin/detect @@ -0,0 +1,28 @@ +#!/usr/bin/env bash +set -eo pipefail + +# 1. CHECK IF APPLICABLE +if [[ ! -f META-INF/MANIFEST.MF ]]; then + exit 100 +fi + +# 2. GET ARGS +plan_path=$2 + +# 3. DECLARE DEPENDENCIES (OPTIONAL) +cat >> "${plan_path}" <