diff --git a/independent-projects/tools/base-codestarts/src/main/resources/codestarts/quarkus/tooling/dockerfiles/base/Dockerfile-layout.include.qute b/independent-projects/tools/base-codestarts/src/main/resources/codestarts/quarkus/tooling/dockerfiles/base/Dockerfile-jar.include.qute similarity index 88% rename from independent-projects/tools/base-codestarts/src/main/resources/codestarts/quarkus/tooling/dockerfiles/base/Dockerfile-layout.include.qute rename to independent-projects/tools/base-codestarts/src/main/resources/codestarts/quarkus/tooling/dockerfiles/base/Dockerfile-jar.include.qute index 602635478ad53d..e74a68ee77e700 100644 --- a/independent-projects/tools/base-codestarts/src/main/resources/codestarts/quarkus/tooling/dockerfiles/base/Dockerfile-layout.include.qute +++ b/independent-projects/tools/base-codestarts/src/main/resources/codestarts/quarkus/tooling/dockerfiles/base/Dockerfile-jar.include.qute @@ -3,7 +3,7 @@ # # Before building the container image run: # -# {#insert quarkusbuild /} +# {buildtool.cli} {cmd} # # Then, build the image with: # @@ -77,15 +77,20 @@ # accessed directly. (example: "foo.example.com,bar.example.com") # ### -{#if dockerfile.jvm.from} -FROM {dockerfile.jvm.from} -{#else} -FROM registry.access.redhat.com/ubi8/openjdk-{java.version}:1.20 -{/if} +FROM {image} ENV LANGUAGE='en_US:en' -{#insert copy /} +{#if type == 'fast-jar'} +# We make four distinct layers so if there are application changes the library layers can be re-used +COPY --chown=185 {buildtool.build-dir}/quarkus-app/lib/ /deployments/lib/ +COPY --chown=185 {buildtool.build-dir}/quarkus-app/*.jar /deployments/ +COPY --chown=185 {buildtool.build-dir}/quarkus-app/app/ /deployments/app/ +COPY --chown=185 {buildtool.build-dir}/quarkus-app/quarkus/ /deployments/quarkus/ +{#else} +COPY {buildtool.build-dir}/lib/* /deployments/lib/ +COPY {buildtool.build-dir}/*-runner.jar /deployments/quarkus-run.jar +{/if} EXPOSE 8080 USER 185 @@ -95,4 +100,4 @@ ENV AB_JOLOKIA_OFF="" ENV JAVA_OPTS_APPEND="-Dquarkus.http.host=0.0.0.0 -Djava.util.logging.manager=org.jboss.logmanager.LogManager" ENV JAVA_APP_JAR="/deployments/quarkus-run.jar" -ENTRYPOINT [ "/opt/jboss/container/java/run/run-java.sh" ] +ENTRYPOINT [ "/opt/jboss/container/java/run/run-java.sh" ] \ No newline at end of file diff --git a/independent-projects/tools/base-codestarts/src/main/resources/codestarts/quarkus/tooling/dockerfiles/base/Dockerfile-native.include.qute b/independent-projects/tools/base-codestarts/src/main/resources/codestarts/quarkus/tooling/dockerfiles/base/Dockerfile-native.include.qute new file mode 100644 index 00000000000000..348ac7393ad085 --- /dev/null +++ b/independent-projects/tools/base-codestarts/src/main/resources/codestarts/quarkus/tooling/dockerfiles/base/Dockerfile-native.include.qute @@ -0,0 +1,32 @@ +#### +# This Dockerfile is used in order to build a container that runs the Quarkus application in native (no JVM) mode. +{#if type == 'native-micro'} +# It uses a micro base image, tuned for Quarkus native executables. +# It reduces the size of the resulting container image. +# Check https://quarkus.io/guides/quarkus-runtime-base-image for further information about this image. +{/if} +# +# Before building the container image run: +# +# {buildtool.cli} {buildtool.cmd.package-native} +# +# Then, build the image with: +# +# docker build -f src/main/docker/Dockerfile.{type} -t quarkus/{project.artifact-id} . +# +# Then run the container using: +# +# docker run -i --rm -p 8080:8080 quarkus/{project.artifact-id} +# +### +FROM {image} +WORKDIR /work/ +RUN chown 1001 /work \ + && chmod "g+rwX" /work \ + && chown 1001:root /work +COPY --chown=1001:root {buildtool.build-dir}/*-runner /work/application + +EXPOSE 8080 +USER 1001 + +ENTRYPOINT ["./application", "-Dquarkus.http.host=0.0.0.0"] \ No newline at end of file diff --git a/independent-projects/tools/base-codestarts/src/main/resources/codestarts/quarkus/tooling/dockerfiles/base/src/main/docker/Dockerfile.tpl.qute.jvm b/independent-projects/tools/base-codestarts/src/main/resources/codestarts/quarkus/tooling/dockerfiles/base/src/main/docker/Dockerfile.tpl.qute.jvm index bcd1e2e6f711ac..899f7a4a8ca564 100644 --- a/independent-projects/tools/base-codestarts/src/main/resources/codestarts/quarkus/tooling/dockerfiles/base/src/main/docker/Dockerfile.tpl.qute.jvm +++ b/independent-projects/tools/base-codestarts/src/main/resources/codestarts/quarkus/tooling/dockerfiles/base/src/main/docker/Dockerfile.tpl.qute.jvm @@ -1,11 +1,4 @@ -{#include Dockerfile-layout type='jvm'} - {#quarkusbuild}{buildtool.cli} {buildtool.cmd.package}{/quarkusbuild} - {#copy} -# We make four distinct layers so if there are application changes the library layers can be re-used -COPY --chown=185 {buildtool.build-dir}/quarkus-app/lib/ /deployments/lib/ -COPY --chown=185 {buildtool.build-dir}/quarkus-app/*.jar /deployments/ -COPY --chown=185 {buildtool.build-dir}/quarkus-app/app/ /deployments/app/ -COPY --chown=185 {buildtool.build-dir}/quarkus-app/quarkus/ /deployments/quarkus/ - {/copy} -{/include} - +{#include Dockerfile-jar + type='fast-jar' + image=dockerfile.jvm.from.format(java.version) + cmd=buildtool.cmd.package /} \ No newline at end of file diff --git a/independent-projects/tools/base-codestarts/src/main/resources/codestarts/quarkus/tooling/dockerfiles/base/src/main/docker/Dockerfile.tpl.qute.legacy-jar b/independent-projects/tools/base-codestarts/src/main/resources/codestarts/quarkus/tooling/dockerfiles/base/src/main/docker/Dockerfile.tpl.qute.legacy-jar index a1c61bb037cc35..bdb3ddf95eb257 100644 --- a/independent-projects/tools/base-codestarts/src/main/resources/codestarts/quarkus/tooling/dockerfiles/base/src/main/docker/Dockerfile.tpl.qute.legacy-jar +++ b/independent-projects/tools/base-codestarts/src/main/resources/codestarts/quarkus/tooling/dockerfiles/base/src/main/docker/Dockerfile.tpl.qute.legacy-jar @@ -1,7 +1,4 @@ -{#include Dockerfile-layout type='legacy-jar'} - {#quarkusbuild}{buildtool.cli} {buildtool.cmd.package-legacy-jar}{/quarkusbuild} - {#copy} -COPY {buildtool.build-dir}/lib/* /deployments/lib/ -COPY {buildtool.build-dir}/*-runner.jar /deployments/quarkus-run.jar - {/copy} -{/include} +{#include Dockerfile-jar + type='legacy-jar' + image=dockerfile.jvm.from.format(java.version) + cmd=buildtool.cmd.package-legacy-jar /} \ No newline at end of file diff --git a/independent-projects/tools/base-codestarts/src/main/resources/codestarts/quarkus/tooling/dockerfiles/base/src/main/docker/Dockerfile.tpl.qute.native b/independent-projects/tools/base-codestarts/src/main/resources/codestarts/quarkus/tooling/dockerfiles/base/src/main/docker/Dockerfile.tpl.qute.native index dd2a17091aa4a1..24266bd13dafdd 100644 --- a/independent-projects/tools/base-codestarts/src/main/resources/codestarts/quarkus/tooling/dockerfiles/base/src/main/docker/Dockerfile.tpl.qute.native +++ b/independent-projects/tools/base-codestarts/src/main/resources/codestarts/quarkus/tooling/dockerfiles/base/src/main/docker/Dockerfile.tpl.qute.native @@ -1,27 +1 @@ -#### -# This Dockerfile is used in order to build a container that runs the Quarkus application in native (no JVM) mode. -# -# Before building the container image run: -# -# {buildtool.cli} {buildtool.cmd.package-native} -# -# Then, build the image with: -# -# docker build -f src/main/docker/Dockerfile.native -t quarkus/{project.artifact-id} . -# -# Then run the container using: -# -# docker run -i --rm -p 8080:8080 quarkus/{project.artifact-id} -# -### -FROM {dockerfile.native.from} -WORKDIR /work/ -RUN chown 1001 /work \ - && chmod "g+rwX" /work \ - && chown 1001:root /work -COPY --chown=1001:root {buildtool.build-dir}/*-runner /work/application - -EXPOSE 8080 -USER 1001 - -ENTRYPOINT ["./application", "-Dquarkus.http.host=0.0.0.0"] +{#include Dockerfile-native type='native' image=dockerfile.native.from /} diff --git a/independent-projects/tools/base-codestarts/src/main/resources/codestarts/quarkus/tooling/dockerfiles/base/src/main/docker/Dockerfile.tpl.qute.native-micro b/independent-projects/tools/base-codestarts/src/main/resources/codestarts/quarkus/tooling/dockerfiles/base/src/main/docker/Dockerfile.tpl.qute.native-micro index fe30d4da1cf5df..93553867138430 100644 --- a/independent-projects/tools/base-codestarts/src/main/resources/codestarts/quarkus/tooling/dockerfiles/base/src/main/docker/Dockerfile.tpl.qute.native-micro +++ b/independent-projects/tools/base-codestarts/src/main/resources/codestarts/quarkus/tooling/dockerfiles/base/src/main/docker/Dockerfile.tpl.qute.native-micro @@ -1,30 +1 @@ -#### -# This Dockerfile is used in order to build a container that runs the Quarkus application in native (no JVM) mode. -# It uses a micro base image, tuned for Quarkus native executables. -# It reduces the size of the resulting container image. -# Check https://quarkus.io/guides/quarkus-runtime-base-image for further information about this image. -# -# Before building the container image run: -# -# {buildtool.cli} {buildtool.cmd.package-native} -# -# Then, build the image with: -# -# docker build -f src/main/docker/Dockerfile.native-micro -t quarkus/{project.artifact-id} . -# -# Then run the container using: -# -# docker run -i --rm -p 8080:8080 quarkus/{project.artifact-id} -# -### -FROM {dockerfile.native-micro.from} -WORKDIR /work/ -RUN chown 1001 /work \ - && chmod "g+rwX" /work \ - && chown 1001:root /work -COPY --chown=1001:root {buildtool.build-dir}/*-runner /work/application - -EXPOSE 8080 -USER 1001 - -ENTRYPOINT ["./application", "-Dquarkus.http.host=0.0.0.0"] +{#include Dockerfile-native type='native-micro' image=dockerfile.native-micro.from /} diff --git a/independent-projects/tools/base-codestarts/src/main/resources/codestarts/quarkus/tooling/dockerfiles/codestart.yml b/independent-projects/tools/base-codestarts/src/main/resources/codestarts/quarkus/tooling/dockerfiles/codestart.yml index df807e43d53c9c..ce3b6d0cd4bc63 100644 --- a/independent-projects/tools/base-codestarts/src/main/resources/codestarts/quarkus/tooling/dockerfiles/codestart.yml +++ b/independent-projects/tools/base-codestarts/src/main/resources/codestarts/quarkus/tooling/dockerfiles/codestart.yml @@ -8,3 +8,5 @@ language: from: registry.access.redhat.com/ubi8/ubi-minimal:8.10 native-micro: from: quay.io/quarkus/quarkus-micro-image:2.0 + jvm: + from: registry.access.redhat.com/ubi8/openjdk-%s:1.20 diff --git a/independent-projects/tools/codestarts/src/main/java/io/quarkus/devtools/codestarts/core/reader/QuteCodestartFileReader.java b/independent-projects/tools/codestarts/src/main/java/io/quarkus/devtools/codestarts/core/reader/QuteCodestartFileReader.java index b2d6f606cb6109..78da7c1aed91dd 100644 --- a/independent-projects/tools/codestarts/src/main/java/io/quarkus/devtools/codestarts/core/reader/QuteCodestartFileReader.java +++ b/independent-projects/tools/codestarts/src/main/java/io/quarkus/devtools/codestarts/core/reader/QuteCodestartFileReader.java @@ -3,8 +3,10 @@ import java.io.IOException; import java.io.Reader; import java.io.StringReader; +import java.util.Arrays; import java.util.Map; import java.util.Optional; +import java.util.concurrent.CompletableFuture; import java.util.concurrent.CompletionStage; import java.util.regex.Pattern; @@ -197,6 +199,15 @@ public CompletionStage resolve(EvalContext context) { return CompletedStage.of(compareVersionTo(value, (String) e)); }); } + case "format": + CompletableFuture[] paramStages = context.getParams().stream() + .map(context::evaluate) + .map(CompletionStage::toCompletableFuture) + .toArray(CompletableFuture[]::new); + + return CompletableFuture.allOf(paramStages) + .thenApply(a -> Arrays.stream(paramStages).map(CompletableFuture::join).toArray(Object[]::new)) + .thenApply(a -> String.format(value, a)); default: return Results.notFound(context); }