diff --git a/build-parent/pom.xml b/build-parent/pom.xml index 21cc3efc74497..894e6650e92fe 100644 --- a/build-parent/pom.xml +++ b/build-parent/pom.xml @@ -85,13 +85,13 @@ 2.2.0 - docker.io/postgres:17 - docker.io/mariadb:10.11 + docker.io/library/postgres:17 + docker.io/library/mariadb:10.11 icr.io/db2_community/db2:12.1.0.0 mcr.microsoft.com/mssql/server:2022-latest - docker.io/mysql:8.4 + docker.io/library/mysql:8.4 docker.io/gvenzl/oracle-free:23-slim-faststart - docker.io/mongo:7.0 + docker.io/library/mongo:7.0 4.13.2 @@ -110,6 +110,16 @@ 2.44.0 + + + quay.io/artemiscloud/activemq-artemis-broker:1.0.25 + quay.io/apicurio/apicurio-registry-mem:2.6.13.Final + quay.io/jbosstm/lra-coordinator:latest + docker.io/library/rabbitmq:3.12-management + docker.io/apachepulsar/pulsar:3.2.4 + docker.io/library/redis:7 + quay.io/infinispan/server:latest + diff --git a/core/processor/src/main/java/io/quarkus/annotation/processor/documentation/config/discovery/DiscoveryConfigProperty.java b/core/processor/src/main/java/io/quarkus/annotation/processor/documentation/config/discovery/DiscoveryConfigProperty.java index 636bde16d9671..04cf700b1d628 100644 --- a/core/processor/src/main/java/io/quarkus/annotation/processor/documentation/config/discovery/DiscoveryConfigProperty.java +++ b/core/processor/src/main/java/io/quarkus/annotation/processor/documentation/config/discovery/DiscoveryConfigProperty.java @@ -13,6 +13,7 @@ public class DiscoveryConfigProperty { private final SourceElementType sourceElementType; private final String defaultValue; private final String defaultValueForDoc; + private final boolean escapeDefaultValueForDoc; private final Deprecation deprecation; private final String mapKey; private final boolean unnamedMapKey; @@ -24,8 +25,8 @@ public class DiscoveryConfigProperty { public DiscoveryConfigProperty(String path, String sourceType, String sourceElementName, SourceElementType sourceElementType, - String defaultValue, - String defaultValueForDoc, Deprecation deprecation, String mapKey, boolean unnamedMapKey, + String defaultValue, String defaultValueForDoc, boolean escapeDefaultValueForDoc, + Deprecation deprecation, String mapKey, boolean unnamedMapKey, ResolvedType type, boolean converted, boolean enforceHyphenateEnumValue, boolean section, boolean sectionGenerated) { this.path = path; @@ -34,6 +35,7 @@ public DiscoveryConfigProperty(String path, String sourceType, String sourceElem this.sourceElementType = sourceElementType; this.defaultValue = defaultValue; this.defaultValueForDoc = defaultValueForDoc; + this.escapeDefaultValueForDoc = escapeDefaultValueForDoc; this.deprecation = deprecation; this.mapKey = mapKey; this.unnamedMapKey = unnamedMapKey; @@ -68,6 +70,10 @@ public String getDefaultValueForDoc() { return defaultValueForDoc; } + public boolean isEscapeDefaultValueForDoc() { + return escapeDefaultValueForDoc; + } + public Deprecation getDeprecation() { return deprecation; } @@ -150,6 +156,7 @@ public static class Builder { private final ResolvedType type; private String defaultValue; private String defaultValueForDoc; + private boolean escapeDefaultValueForDoc = true; private Deprecation deprecation; private String mapKey; private boolean unnamedMapKey = false; @@ -180,6 +187,11 @@ public Builder defaultValueForDoc(String defaultValueForDoc) { return this; } + public Builder escapeDefaultValueForDoc(boolean escapeDefaultValueForDoc) { + this.escapeDefaultValueForDoc = escapeDefaultValueForDoc; + return this; + } + public Builder deprecated(String since, String replacement, String reason) { this.deprecation = new Deprecation(since, replacement, reason); return this; @@ -220,7 +232,7 @@ public DiscoveryConfigProperty build() { } return new DiscoveryConfigProperty(name, sourceType, sourceElementName, sourceElementType, defaultValue, - defaultValueForDoc, + defaultValueForDoc, escapeDefaultValueForDoc, deprecation, mapKey, unnamedMapKey, type, converted, enforceHyphenateEnumValue, section, sectionGenerated); } } diff --git a/core/processor/src/main/java/io/quarkus/annotation/processor/documentation/config/model/ConfigProperty.java b/core/processor/src/main/java/io/quarkus/annotation/processor/documentation/config/model/ConfigProperty.java index 1b0ebcdfbd34f..2a3cb5c7e78f4 100644 --- a/core/processor/src/main/java/io/quarkus/annotation/processor/documentation/config/model/ConfigProperty.java +++ b/core/processor/src/main/java/io/quarkus/annotation/processor/documentation/config/model/ConfigProperty.java @@ -27,6 +27,7 @@ public final class ConfigProperty extends AbstractConfigItem { private final EnumAcceptedValues enumAcceptedValues; private final String defaultValue; + private final boolean escapeDefaultValue; private final String javadocSiteLink; @@ -35,7 +36,7 @@ public ConfigProperty(ConfigPhase phase, String sourceType, String sourceElement boolean list, boolean optional, boolean secret, String mapKey, boolean unnamedMapKey, boolean withinMap, boolean converted, @JsonProperty("enum") boolean isEnum, EnumAcceptedValues enumAcceptedValues, - String defaultValue, String javadocSiteLink, + String defaultValue, boolean escapeDefaultValue, String javadocSiteLink, Deprecation deprecation) { super(sourceType, sourceElementName, sourceElementType, path, type, deprecation); this.phase = phase; @@ -52,6 +53,7 @@ public ConfigProperty(ConfigPhase phase, String sourceType, String sourceElement this.isEnum = isEnum; this.enumAcceptedValues = enumAcceptedValues; this.defaultValue = defaultValue; + this.escapeDefaultValue = escapeDefaultValue; this.javadocSiteLink = javadocSiteLink; } @@ -121,6 +123,10 @@ public String getDefaultValue() { return defaultValue; } + public boolean isEscapeDefaultValue() { + return escapeDefaultValue; + } + public String getJavadocSiteLink() { return javadocSiteLink; } diff --git a/core/processor/src/main/java/io/quarkus/annotation/processor/documentation/config/resolver/ConfigResolver.java b/core/processor/src/main/java/io/quarkus/annotation/processor/documentation/config/resolver/ConfigResolver.java index 390e657bb538a..15918de84404d 100644 --- a/core/processor/src/main/java/io/quarkus/annotation/processor/documentation/config/resolver/ConfigResolver.java +++ b/core/processor/src/main/java/io/quarkus/annotation/processor/documentation/config/resolver/ConfigResolver.java @@ -213,7 +213,7 @@ private void resolveProperty(ConfigRoot configRoot, Map e discoveryConfigProperty.isUnnamedMapKey(), context.isWithinMap(), discoveryConfigProperty.isConverted(), discoveryConfigProperty.getType().isEnum(), - enumAcceptedValues, defaultValue, + enumAcceptedValues, defaultValue, discoveryConfigProperty.isEscapeDefaultValueForDoc(), JavadocUtil.getJavadocSiteLink(typeBinaryName), deprecation); context.getItemCollection().addItem(configProperty); diff --git a/core/processor/src/main/java/io/quarkus/annotation/processor/documentation/config/scanner/ConfigMappingListener.java b/core/processor/src/main/java/io/quarkus/annotation/processor/documentation/config/scanner/ConfigMappingListener.java index b5b96067ea0cc..0782fc393e5a1 100644 --- a/core/processor/src/main/java/io/quarkus/annotation/processor/documentation/config/scanner/ConfigMappingListener.java +++ b/core/processor/src/main/java/io/quarkus/annotation/processor/documentation/config/scanner/ConfigMappingListener.java @@ -152,8 +152,12 @@ public void onEnclosedMethod(DiscoveryRootElement discoveryRootElement, TypeElem AnnotationMirror configDocDefaultAnnotation = methodAnnotations.get(Types.ANNOTATION_CONFIG_DOC_DEFAULT); if (configDocDefaultAnnotation != null) { - builder.defaultValueForDoc( - configDocDefaultAnnotation.getElementValues().values().iterator().next().getValue().toString()); + String value = (String) utils.element().getAnnotationValues(configDocDefaultAnnotation).get("value"); + builder.defaultValueForDoc(value); + Boolean escape = (Boolean) utils.element().getAnnotationValues(configDocDefaultAnnotation).get("escape"); + if (escape != null) { + builder.escapeDefaultValueForDoc(escape); + } } if (resolvedType.isMap()) { diff --git a/core/runtime/src/main/java/io/quarkus/runtime/annotations/ConfigDocDefault.java b/core/runtime/src/main/java/io/quarkus/runtime/annotations/ConfigDocDefault.java index ece03bd17604e..523564588cbb7 100644 --- a/core/runtime/src/main/java/io/quarkus/runtime/annotations/ConfigDocDefault.java +++ b/core/runtime/src/main/java/io/quarkus/runtime/annotations/ConfigDocDefault.java @@ -22,4 +22,6 @@ public @interface ConfigDocDefault { String value(); + + boolean escape() default true; } diff --git a/devtools/config-doc-maven-plugin/src/main/java/io/quarkus/maven/config/doc/generator/AbstractFormatter.java b/devtools/config-doc-maven-plugin/src/main/java/io/quarkus/maven/config/doc/generator/AbstractFormatter.java index a3ae0eadab1d1..a5aa1fbd5fc01 100644 --- a/devtools/config-doc-maven-plugin/src/main/java/io/quarkus/maven/config/doc/generator/AbstractFormatter.java +++ b/devtools/config-doc-maven-plugin/src/main/java/io/quarkus/maven/config/doc/generator/AbstractFormatter.java @@ -252,7 +252,11 @@ private String formatSingleDefaultValue(ConfigProperty configProperty, String de } } - return escapeDefaultValue(defaultValue); + if (configProperty.isEscapeDefaultValue()) { + return escapeDefaultValue(defaultValue); + } else { + return defaultValue; + } } private static String trimFinalDot(String javadoc) { diff --git a/docs/src/main/asciidoc/_attributes.adoc b/docs/src/main/asciidoc/_attributes.adoc index 498613d9c8dc2..f59247c377766 100644 --- a/docs/src/main/asciidoc/_attributes.adoc +++ b/docs/src/main/asciidoc/_attributes.adoc @@ -11,6 +11,11 @@ :mandrel-flavor: ${mandrel.image-tag-for-documentation} :surefire-version: ${version.surefire.plugin} :gradle-version: ${gradle-wrapper.version} +:db2-image: ${db2.image} +:mariadb-image: ${mariadb.image} +:mssql-image: ${mssql.image} +:oracle-image: ${oracle.image} +:postgres-image: ${postgres.image} :elasticsearch-version: ${elasticsearch-server.version} :elasticsearch-image: ${elasticsearch.image} :opensearch-image: ${opensearch.image} @@ -18,7 +23,15 @@ :infinispan-protostream-version: ${infinispan.protostream.version} :logstash-image: ${logstash.image} :kibana-image: ${kibana.image} -:keycloak-docker-image: ${keycloak.docker.image} +:keycloak-image: ${keycloak.docker.image} +:amqp-image: ${amqp.image} +:apicurio-registry-image: ${apicurio-registry.image} +:narayana-lra-image: ${narayana-lra.image} +:mongo-image: ${mongo.image} +:rabbitmq-image: ${rabbitmq.image} +:pulsar-image: ${pulsar.image} +:redis-image: ${redis.image} +:infinispan-image: ${infinispan.image} :jandex-version: ${jandex.version} :jandex-gradle-plugin-version: ${jandex-gradle-plugin.version} :kotlin-version: ${kotlin.version} diff --git a/docs/src/main/asciidoc/amqp-dev-services.adoc b/docs/src/main/asciidoc/amqp-dev-services.adoc index 57554e7112c05..7760241df0998 100644 --- a/docs/src/main/asciidoc/amqp-dev-services.adoc +++ b/docs/src/main/asciidoc/amqp-dev-services.adoc @@ -50,9 +50,9 @@ You can set the port by configuring the `quarkus.amqp.devservices.port` property Dev Services for AMQP uses https://quay.io/repository/artemiscloud/activemq-artemis-broker[activemq-artemis-broker] images. You can configure the image and version using the `quarkus.amqp.devservices.image-name` property: -[source, properties] +[source, properties, subs=attributes+] ---- -quarkus.amqp.devservices.image-name=quay.io/artemiscloud/activemq-artemis-broker:latest +quarkus.amqp.devservices.image-name={amqp-image} ---- IMPORTANT: The configured image must be _compatible_ with the `activemq-artemis-broker` one. @@ -65,12 +65,12 @@ The ports 5672 and 8161 (web console) are exposed. Dev Services for AMQP supports xref:compose-dev-services.adoc[Compose Dev Services]. It relies on a `compose-devservices.yml`, such as: -[source,yaml] +[source,yaml,subs=attributes+] ---- name: services: artemis: - image: quay.io/artemiscloud/activemq-artemis-broker:1.0.28 + image: {amqp-image} ports: - "5672" - "8161" diff --git a/docs/src/main/asciidoc/amqp.adoc b/docs/src/main/asciidoc/amqp.adoc index b61117c1d8e44..e03d44f08cdb8 100644 --- a/docs/src/main/asciidoc/amqp.adoc +++ b/docs/src/main/asciidoc/amqp.adoc @@ -366,14 +366,14 @@ Open `http://localhost:8080/quotes.html` in your browser and request some quotes When not running in dev or test mode, you will need to start your AMQP broker. You can follow the instructions from the https://activemq.apache.org/components/artemis/documentation/latest/using-server.html[Apache ActiveMQ Artemis website] or create a `docker-compose.yaml` file with the following content: -[source, yaml] +[source, yaml ,subs=attributes+] ---- version: '2' services: artemis: - image: quay.io/artemiscloud/activemq-artemis-broker:1.0.25 + image: {amqp-image} ports: - "8161:8161" - "61616:61616" diff --git a/docs/src/main/asciidoc/apicurio-registry-dev-services.adoc b/docs/src/main/asciidoc/apicurio-registry-dev-services.adoc index cc04b67ef4411..7a539a66901a4 100644 --- a/docs/src/main/asciidoc/apicurio-registry-dev-services.adoc +++ b/docs/src/main/asciidoc/apicurio-registry-dev-services.adoc @@ -75,9 +75,9 @@ Note that the Kafka channels in SmallRye Reactive messaging are automatically co Dev Services for Apicurio Registry uses `apicurio/apicurio-registry-mem` images. You can select any 2.x version from https://hub.docker.com/r/apicurio/apicurio-registry-mem: -[source, properties] +[source,properties,subs=attributes+] ---- -quarkus.apicurio-registry.devservices.image-name=apicurio/apicurio-registry-mem:latest-snapshot +quarkus.apicurio-registry.devservices.image-name={apicurio-registry-image} ---- [[Compose]] @@ -86,12 +86,12 @@ quarkus.apicurio-registry.devservices.image-name=apicurio/apicurio-registry-mem: The Apicurio Dev Services supports xref:compose-dev-services.adoc[Compose Dev Services]. It relies on a `compose-devservices.yml`, such as: -[source,yaml] +[source,yaml,subs=attributes+] ---- name: services: apicurio: - image: apicurio/apicurio-registry-mem:2.4.2.Final + image: {apicurio-registry-image} ports: - "8080" ----- \ No newline at end of file +---- diff --git a/docs/src/main/asciidoc/compose-dev-services.adoc b/docs/src/main/asciidoc/compose-dev-services.adoc index 86548b8d1e908..310e830b595ba 100644 --- a/docs/src/main/asciidoc/compose-dev-services.adoc +++ b/docs/src/main/asciidoc/compose-dev-services.adoc @@ -56,11 +56,11 @@ Let's see how to use Compose Dev Services with examples ranging from simple to m In a Quarkus project already configured to use the `quarkus-jdbc-postgresql` extension, you can create a `compose-devservices.yml` file in the root of the project and define a custom service using Compose: -[source, yaml] +[source, yaml, subs=attributes+] ---- services: db: - image: postgres:17 + image: {postgres-image} healthcheck: test: pg_isready -U myuser -d mydb interval: 5s @@ -84,11 +84,11 @@ and the application datasource will be configured by extracting connection infor For more complex scenarios, you can define custom networks and service dependencies: -[source, yaml] +[source, yaml, subs=attributes+] ---- services: db: - image: postgres:17 + image: {postgres-image} ports: - '5432' environment: @@ -101,7 +101,7 @@ services: - postgres-data:/var/lib/postgresql/data cache: - image: redis:7 + image: {redis-image} command: redis-server --save 60 1 --loglevel warning ports: - '6379' @@ -111,7 +111,7 @@ services: - db message-broker: - image: rabbitmq:3-management + image: {rabbitmq-image} ports: - '5672' - '15672' @@ -294,11 +294,11 @@ quarkus.compose.devservices.files=src/main/docker/base-compose.yml,src/main/dock With profiles, Compose files can define a set of active profiles so that started services are adjusted for various usages and environments. You can specify the profiles to activate by setting the `quarkus.compose.devservices.profiles` property in the `application.properties` file: -[source, yaml] +[source, yaml, subs=attributes+] ---- services: db: - image: postgres:17 + image: {postgres-image} profiles: - dev - local @@ -319,11 +319,11 @@ services: You can configure Compose Dev Services to not discover specific services by adding the `io.quarkus.devservices.compose.ignore` label to the service in your Compose file: -[source, yaml] +[source, yaml, subs=attributes+] ---- services: db: - image: postgres:17 + image: {postgres-image} labels: io.quarkus.devservices.compose.ignore: true ports: @@ -345,11 +345,11 @@ Compose Dev Services provides several ways to ensure services are ready before y Compose Dev Services respects the health checks defined in your Compose file. It's recommended to configure health checks for your services to ensure they are ready before your application tries to use them: -[source, yaml] +[source, yaml, subs=attributes+] ---- services: db: - image: postgres:17 + image: {postgres-image} healthcheck: test: pg_isready -U myuser -d mydb interval: 5s @@ -419,11 +419,11 @@ This property sets the maximum time to wait for all Dev Services to start. The d Compose Dev Services starts services in the order they are defined in the Compose file. If you need to start services in a specific order, you can use the `depends_on` attribute: -[source, yaml] +[source, yaml, subs=attributes+] ---- services: db: - image: postgres:17 + image: {postgres-image} ports: - '5432' environment: @@ -444,11 +444,11 @@ services: Compose Dev Services automatically exposes the configuration of discovered services to your application. For example, when a database service is discovered with the following compose service description: -[source, yaml] +[source, yaml, subs=attributes+] ---- services: db: - image: mysql:17 + image: {mysql-image} ports: - '9906:3306' labels: diff --git a/docs/src/main/asciidoc/databases-dev-services.adoc b/docs/src/main/asciidoc/databases-dev-services.adoc index f46e11c103169..92e8a4457a3a5 100644 --- a/docs/src/main/asciidoc/databases-dev-services.adoc +++ b/docs/src/main/asciidoc/databases-dev-services.adoc @@ -55,9 +55,10 @@ By default, Quarkus uses the default image for the current version of Testcontai An example file is shown below: .src/main/resources/container-license-acceptance.txt +[source,subs=attributes+] ---- -ibmcom/db2:11.5.0.0a -mcr.microsoft.com/mssql/server:2022-latest +{db2-image} +{mssql-image} ---- === Capturing Logs @@ -249,14 +250,14 @@ psql -h localhost -p -U quarkus The random port can be found with `docker ps` -[source, bash] +[source, bash, subs=attributes+] ---- docker ps # returns something like this: CONTAINER ID IMAGE [..] PORTS [..] -b826e3a168c4 postgres:14.2 [..] 0.0.0.0:49174->5432/tcp, :::49174->5432/tcp [..] <1> +b826e3a168c4 {postgres-image} [..] 0.0.0.0:49174->5432/tcp, :::49174->5432/tcp [..] <1> ---- <1> The random port is `49174`. @@ -283,10 +284,10 @@ docker ps --format "table {{.ID}}\t{{.Image}}\t{{.Labels}}\t{{.Ports}} An example output using Dev Services for PostgreSQL is the following: -[source, bash] +[source, bash, subs=attributes+] ---- CONTAINER ID IMAGE LABELS PORTS -a7034c91a392 postgres:14 org.testcontainers.sessionId=xyz,datasource=default,org.testcontainers=true 0.0.0.0:49154->5432/tcp, :::49154->5432/tcp +a7034c91a392 {postgres-image} org.testcontainers.sessionId=xyz,datasource=default,org.testcontainers=true 0.0.0.0:49154->5432/tcp, :::49154->5432/tcp ---- In the labels tab, we see that Quarkus added the datasource label, which can be very useful in differentiating containers when multiple @@ -299,12 +300,12 @@ Dev Services have been started. The Database Dev Services supports xref:compose-dev-services.adoc[Compose Dev Services]. It relies on a `compose-devservices.yml`, such as: -[source,yaml] +[source,yaml,subs=attributes+] ---- name: services: postgresql: - image: docker.io/postgres:17 + image: {postgres-image} ports: - "5432" environment: @@ -312,7 +313,7 @@ services: POSTGRES_PASSWORD: quarkus POSTGRES_DB: quarkus oracle: - image: docker.io/gvenzl/oracle-free:23-slim-faststart + image: {oracle-image} ports: - "1521" environment: @@ -323,7 +324,7 @@ services: labels: io.quarkus.devservices.compose.wait_for.logs: .*DATABASE IS READY TO USE.* mssql: - image: mcr.microsoft.com/mssql/server:2022-latest + image: {mssql-image} ports: - "1433" environment: diff --git a/docs/src/main/asciidoc/getting-started-dev-services.adoc b/docs/src/main/asciidoc/getting-started-dev-services.adoc index 59372a18ad1c5..9419abce1b560 100644 --- a/docs/src/main/asciidoc/getting-started-dev-services.adoc +++ b/docs/src/main/asciidoc/getting-started-dev-services.adoc @@ -225,8 +225,9 @@ If you like, use your container tool to see what containers are running. For example, if you're using Docker, run `docker ps`, and for podman, run `podman ps`. You should see something like the following: +[source,bash,subs=attributes+] ---- -ff88dcedd899 docker.io/library/postgres:14 postgres -c fsync... 20 minutes ago Up 20 minutes 0.0.0.0:34789->5432/tcp nostalgic_bassi +ff88dcedd899 {postgres-image} postgres -c fsync... 20 minutes ago Up 20 minutes 0.0.0.0:34789->5432/tcp nostalgic_bassi ---- Stop Quarkus and run `docker ps` again. diff --git a/docs/src/main/asciidoc/getting-started-reactive.adoc b/docs/src/main/asciidoc/getting-started-reactive.adoc index 0d2efa4f4ad32..7001bad27ff54 100644 --- a/docs/src/main/asciidoc/getting-started-reactive.adoc +++ b/docs/src/main/asciidoc/getting-started-reactive.adoc @@ -300,12 +300,12 @@ To run the application, don’t forget to start a database and provide the confi For example, you can use Docker to run your database: -[source, bash] +[source, bash, subs=attributes+] ---- docker run -it --rm=true \ --name postgres-quarkus -e POSTGRES_USER=quarkus \ -e POSTGRES_PASSWORD=quarkus -e POSTGRES_DB=fruits \ - -p 5432:5432 postgres:14.1 + -p 5432:5432 {postgres-image} ---- Then, launch the application using: diff --git a/docs/src/main/asciidoc/getting-started-testing.adoc b/docs/src/main/asciidoc/getting-started-testing.adoc index be609b38112d5..4e4afb794353e 100644 --- a/docs/src/main/asciidoc/getting-started-testing.adoc +++ b/docs/src/main/asciidoc/getting-started-testing.adoc @@ -1392,7 +1392,7 @@ The Testcontainers library usually return connection strings without respecting The following example illustrates the use with PostgreSQL, but the approach is applicable to all containers. -[source,java] +[source,java,subs=attributes+] ---- import io.quarkus.test.common.DevServicesContext; import io.quarkus.test.common.QuarkusTestResourceLifecycleManager; @@ -1417,7 +1417,7 @@ public class CustomResource implements QuarkusTestResourceLifecycleManager, DevS @Override public Map start() { // start a container making sure to call withNetworkMode() with the value of containerNetworkId if present - container = new PostgreSQLContainer<>("postgres:latest").withLogConsumer(outputFrame -> {}); + container = new PostgreSQLContainer<>("{postgres-image}").withLogConsumer(outputFrame -> {}); // apply the network to the container containerNetworkId.ifPresent(container::withNetworkMode); diff --git a/docs/src/main/asciidoc/infinispan-client.adoc b/docs/src/main/asciidoc/infinispan-client.adoc index 35b6cd4e70283..74abc18729134 100644 --- a/docs/src/main/asciidoc/infinispan-client.adoc +++ b/docs/src/main/asciidoc/infinispan-client.adoc @@ -283,9 +283,9 @@ However, in production, you will run your own Infinispan (or Red Hat Data Grid). Let's start an Infinispan server on the port 11222 using: -[source, shell] +[source, shell, subs=attributes+] ---- -docker run -it -p 11222:11222 -e USER="admin" -e PASS="password" quay.io/infinispan/server:latest +docker run -it -p 11222:11222 -e USER="admin" -e PASS="password" {infinispan-image} ---- Then, open the `src/main/resources/application.properties` file and add: diff --git a/docs/src/main/asciidoc/infinispan-dev-services.adoc b/docs/src/main/asciidoc/infinispan-dev-services.adoc index feb5f744ee796..78dcf31cb120d 100644 --- a/docs/src/main/asciidoc/infinispan-dev-services.adoc +++ b/docs/src/main/asciidoc/infinispan-dev-services.adoc @@ -209,12 +209,12 @@ You can disable the sharing with `quarkus.infinispan-client.devservices.shared=f Dev Services for Infinispan supports xref:compose-dev-services.adoc[Compose Dev Services]. It relies on a `compose-devservices.yml`, such as: -[source,yaml] +[source,yaml,subs=attributes+] ---- name: test-project services: infinispan: - image: quay.io/infinispan/server:15.0.18.Final + image: {infinispan-image} ports: - '11222' environment: diff --git a/docs/src/main/asciidoc/jms.adoc b/docs/src/main/asciidoc/jms.adoc index ba8b26979874f..d95382ea63721 100644 --- a/docs/src/main/asciidoc/jms.adoc +++ b/docs/src/main/asciidoc/jms.adoc @@ -81,9 +81,9 @@ implementation("org.amqphub.quarkus:quarkus-qpid-jms") Then, we need an AMQP broker. In this case we will use an Apache ActiveMQ Artemis server. You can follow the instructions from the https://activemq.apache.org/components/artemis/[Apache Artemis website] or start a broker via docker using the https://artemiscloud.io/[ArtemisCloud] container image: -[source,bash] +[source,bash,subs=attributes+] ---- -docker run -it --rm -p 8161:8161 -p 61616:61616 -p 5672:5672 -e AMQ_USER=quarkus -e AMQ_PASSWORD=quarkus quay.io/artemiscloud/activemq-artemis-broker:1.0.25 +docker run -it --rm -p 8161:8161 -p 61616:61616 -p 5672:5672 -e AMQ_USER=quarkus -e AMQ_PASSWORD=quarkus {amqp-image} ---- === The price producer diff --git a/docs/src/main/asciidoc/kafka-schema-registry-avro.adoc b/docs/src/main/asciidoc/kafka-schema-registry-avro.adoc index aedae339110be..3bd1e50b4dc34 100644 --- a/docs/src/main/asciidoc/kafka-schema-registry-avro.adoc +++ b/docs/src/main/asciidoc/kafka-schema-registry-avro.adoc @@ -317,7 +317,7 @@ You can ignore the `docker-compose` instructions here, as well as the Apicurio R Create a `docker-compose.yaml` file at the root of the project with the following content: -[source,yaml] +[source,yaml,subs=attributes+] ---- services: @@ -333,7 +333,7 @@ services: LOG_DIR: "/tmp/logs" schema-registry: - image: apicurio/apicurio-registry-mem:2.6.13.Final + image: {apicurio-registry-image} ports: - 8081:8080 depends_on: diff --git a/docs/src/main/asciidoc/kafka-schema-registry-json-schema.adoc b/docs/src/main/asciidoc/kafka-schema-registry-json-schema.adoc index 3fb0a32b2276c..b37e194345c11 100644 --- a/docs/src/main/asciidoc/kafka-schema-registry-json-schema.adoc +++ b/docs/src/main/asciidoc/kafka-schema-registry-json-schema.adoc @@ -345,7 +345,7 @@ You can ignore the `docker-compose` instructions here, as well as the Apicurio R Create a `docker-compose.yaml` file at the root of the project with the following content: -[source,yaml] +[source,yaml,subs=attributes+] ---- services: @@ -361,7 +361,7 @@ services: LOG_DIR: "/tmp/logs" schema-registry: - image: apicurio/apicurio-registry-mem:2.6.13.Final + image: {apicurio-registry-image} ports: - 8081:8080 depends_on: diff --git a/docs/src/main/asciidoc/lra-dev-services.adoc b/docs/src/main/asciidoc/lra-dev-services.adoc index 51f92546b580d..b2b6ee02acf94 100644 --- a/docs/src/main/asciidoc/lra-dev-services.adoc +++ b/docs/src/main/asciidoc/lra-dev-services.adoc @@ -77,12 +77,12 @@ images at https://quay.io/repository/jbosstm/lra-coordinator?tab=tags. The LRA Dev Services supports xref:compose-dev-services.adoc[Compose Dev Services]. It relies on a `compose-devservices.yml`, such as: -[source,yaml] +[source,yaml,subs=attributes+] ---- name: services: - mongo: - image: quay.io/jbosstm/lra-coordinator:7.2.2.Final-3.24.4 + narayana-lra: + image: {narayana-lra-image} ports: - "8080" ---- diff --git a/docs/src/main/asciidoc/mongodb-dev-services.adoc b/docs/src/main/asciidoc/mongodb-dev-services.adoc index bfa9f64036c7a..930cffaaf8a35 100644 --- a/docs/src/main/asciidoc/mongodb-dev-services.adoc +++ b/docs/src/main/asciidoc/mongodb-dev-services.adoc @@ -4,6 +4,7 @@ and pull requests should be submitted there: https://github.com/quarkusio/quarkus/tree/main/docs/src/main/asciidoc //// = Dev Services for MongoDB +include::_attributes.adoc[] Quarkus supports a feature called Dev Services that allows you to create various datasources without any config. In the case of MongoDB this support extends to the default MongoDB connection. What that means practically, is that if you have not configured `quarkus.mongodb.connection-string` nor `quarkus.mongodb.hosts`, Quarkus will automatically start a MongoDB container when @@ -35,12 +36,12 @@ You can disable the sharing with `quarkus.mongodb.devservices.shared=false`. The MongoDB Dev Services supports xref:compose-dev-services.adoc[Compose Dev Services]. It relies on a `compose-devservices.yml`, such as: -[source,yaml] +[source,yaml,subs=attributes+] ---- name: services: mongo: - image: docker.io/mongo:7.0 + image: {mongo-image} ports: - "27017" ---- diff --git a/docs/src/main/asciidoc/mongodb.adoc b/docs/src/main/asciidoc/mongodb.adoc index 8a1de3096508f..d1bd16cc09e08 100644 --- a/docs/src/main/asciidoc/mongodb.adoc +++ b/docs/src/main/asciidoc/mongodb.adoc @@ -372,9 +372,9 @@ startup time if the Mongo Client is inactive. Alternatively, Mongo Clients may a As by default, `MongoClient` is configured to access a local MongoDB database on port 27017 (the default MongoDB port), if you have a local running database on this port, there is nothing more to do before being able to test it! If you want to use Docker to run a MongoDB database, you can use the following command to launch one: -[source,bash] +[source,bash,subs=attributes+] ---- -docker run -ti --rm -p 27017:27017 mongo:4.4 +docker run -ti --rm -p 27017:27017 {mongo-image} ---- [NOTE] diff --git a/docs/src/main/asciidoc/pulsar-getting-started.adoc b/docs/src/main/asciidoc/pulsar-getting-started.adoc index d3108b3170879..4f65b64a22bc9 100644 --- a/docs/src/main/asciidoc/pulsar-getting-started.adoc +++ b/docs/src/main/asciidoc/pulsar-getting-started.adoc @@ -398,14 +398,14 @@ Open `http://localhost:8080/quotes.html` in your browser and request some quotes When not running in dev or test mode, you will need to start your Pulsar broker. You can follow the instructions from the https://pulsar.apache.org/docs/3.0.x/getting-started-docker/[Run a standalone Pulsar cluster in Docker] or create a `docker-compose.yaml` file with the following content: -[source, yaml] +[source, yaml ,subs=attributes+] ---- version: '3.8' services: pulsar: - image: apachepulsar/pulsar:3.2.4 + image: {pulsar-image} command: [ "sh", "-c", "bin/apply-config-from-env.py conf/standalone.conf && bin/pulsar standalone -nfw -nss" diff --git a/docs/src/main/asciidoc/quartz.adoc b/docs/src/main/asciidoc/quartz.adoc index a0d6851bee834..3182858c31b3e 100644 --- a/docs/src/main/asciidoc/quartz.adoc +++ b/docs/src/main/asciidoc/quartz.adoc @@ -319,7 +319,7 @@ http { In the root directory, create a `docker-compose.yml` file with the following content: -[source,yaml] +[source,yaml,subs=attributes+] ---- version: '3' @@ -337,7 +337,7 @@ services: - postgres nginx: <2> - image: nginx:1.17.6 + image: nginx:latest volumes: - ./nginx.conf:/etc/nginx/nginx.conf:ro depends_on: @@ -347,8 +347,8 @@ services: networks: - tasks-network - postgres: <3> - image: postgres:14.1 + db: <3> + image: {postgres-image} container_name: quarkus_test environment: - POSTGRES_USER=quarkus_test diff --git a/docs/src/main/asciidoc/rabbitmq-dev-services.adoc b/docs/src/main/asciidoc/rabbitmq-dev-services.adoc index 684e5f87609cf..0da7f132e6d0b 100644 --- a/docs/src/main/asciidoc/rabbitmq-dev-services.adoc +++ b/docs/src/main/asciidoc/rabbitmq-dev-services.adoc @@ -50,9 +50,9 @@ You can set the port by configuring the `quarkus.rabbitmq.devservices.port` prop Dev Services for RabbitMQ uses official images available at https://hub.docker.com/_/rabbitmq. You can configure the image and version with the `quarkus.rabbitmq.devservices.image-name` property: -[source, properties] +[source, properties, subs=attributes+] ---- -quarkus.rabbitmq.devservices.image-name=rabbitmq:latest +quarkus.rabbitmq.devservices.image-name={rabbitmq-image} ---- == Access the management UI diff --git a/docs/src/main/asciidoc/rabbitmq.adoc b/docs/src/main/asciidoc/rabbitmq.adoc index 09f6ea5cb2e9a..1762ef5a980fb 100644 --- a/docs/src/main/asciidoc/rabbitmq.adoc +++ b/docs/src/main/asciidoc/rabbitmq.adoc @@ -419,14 +419,14 @@ Open `http://localhost:8080/quotes.html` in your browser and request some quotes When not running in dev or test mode, you will need to start your RabbitMQ broker. You can follow the instructions from the https://hub.docker.com/_/rabbitmq[RabbitMQ Docker website] or create a `docker-compose.yaml` file with the following content: -[source, yaml] +[source, yaml, subs=attributes+] ---- version: '2' services: rabbit: - image: rabbitmq:3.12-management + image: {rabbitmq-image} ports: - "5672:5672" networks: diff --git a/docs/src/main/asciidoc/reactive-sql-clients.adoc b/docs/src/main/asciidoc/reactive-sql-clients.adoc index 8ccfc20be61d7..3e485582cc5bc 100644 --- a/docs/src/main/asciidoc/reactive-sql-clients.adoc +++ b/docs/src/main/asciidoc/reactive-sql-clients.adoc @@ -81,9 +81,9 @@ If you start the application in dev mode, Quarkus provides you with a https://qu You might also start a database up front: -[source,bash] +[source,bash,subs=attributes+] ---- -docker run -it --rm=true --name quarkus_test -e POSTGRES_USER=quarkus_test -e POSTGRES_PASSWORD=quarkus_test -e POSTGRES_DB=quarkus_test -p 5432:5432 postgres:14.1 +docker run -it --rm=true --name quarkus_test -e POSTGRES_USER=quarkus_test -e POSTGRES_PASSWORD=quarkus_test -e POSTGRES_DB=quarkus_test -p 5432:5432 {postgres-image} ---- ==== diff --git a/docs/src/main/asciidoc/redis.adoc b/docs/src/main/asciidoc/redis.adoc index 8320f67c3ef31..5a62abcfe5d9d 100644 --- a/docs/src/main/asciidoc/redis.adoc +++ b/docs/src/main/asciidoc/redis.adoc @@ -479,9 +479,9 @@ However, in production, you will run your own Redis (or used a Cloud offering). Let's start a Redis server on the port 6379 using: -[source, shell] +[source, shell, subs=attributes+] ---- -docker run --ulimit memlock=-1:-1 -it --rm=true --memory-swappiness=0 --name redis_quarkus_test -p 6379:6379 redis:5.0.6 +docker run --ulimit memlock=-1:-1 -it --rm=true --memory-swappiness=0 --name redis_quarkus_test -p 6379:6379 {redis-image} ---- Then, open the `src/main/resources/application.properties` file and add: diff --git a/docs/src/main/asciidoc/security-getting-started-tutorial.adoc b/docs/src/main/asciidoc/security-getting-started-tutorial.adoc index 4e3f961d57883..48644eb385357 100644 --- a/docs/src/main/asciidoc/security-getting-started-tutorial.adoc +++ b/docs/src/main/asciidoc/security-getting-started-tutorial.adoc @@ -308,7 +308,7 @@ You can configure it to use plain text or custom passwords. * For custom iterations: `BcryptUtil.bcryptHash(password, iterationCount)` where higher iterations (12-14) provide more security but slower performance. ==== -- For more information about configuring passwords and roles, see xref:configure-the-application[Configure the application]. +- For more information about configuring passwords and roles, see xref:configure-the-application[Configure the application]. - For more information on hashing passwords and available options, see xref:security-jpa.adoc#password-storage-and-hashing[Password storage and hashing]. [NOTE] @@ -534,11 +534,11 @@ Then, compile and run your application in either JVM or native mode. === Start the PostgreSQL server -[source,bash] +[source,bash,subs=attributes+] ---- docker run --rm=true --name security-getting-started -e POSTGRES_USER=quarkus \ -e POSTGRES_PASSWORD=quarkus -e POSTGRES_DB=quarkus \ - -p 5432:5432 postgres:17 + -p 5432:5432 {postgres-image} ---- === Compile and run the application diff --git a/docs/src/main/asciidoc/security-keycloak-authorization.adoc b/docs/src/main/asciidoc/security-keycloak-authorization.adoc index 65ce9b2a87466..7f1d7732adfd9 100644 --- a/docs/src/main/asciidoc/security-keycloak-authorization.adoc +++ b/docs/src/main/asciidoc/security-keycloak-authorization.adoc @@ -316,7 +316,7 @@ docker run --name keycloak \ -e KC_BOOTSTRAP_ADMIN_PASSWORD=admin \ -p 8543:8443 \ -v "$(pwd)"/config/keycloak-keystore.jks:/etc/keycloak-keystore.jks \ - {keycloak-docker-image} \ + {keycloak-image} \ start --hostname-strict=false --https-key-store-file=/etc/keycloak-keystore.jks <1> ---- <1> For Keycloak keystore, use the `keycloak-keystore.jks` file located at https://github.com/quarkusio/quarkus-quickstarts/blob/main/security-keycloak-authorization-quickstart/config/keycloak-keystore.jks[quarkus-quickstarts/security-keycloak-authorization-quickstart/config]. diff --git a/docs/src/main/asciidoc/security-oidc-bearer-token-authentication-tutorial.adoc b/docs/src/main/asciidoc/security-oidc-bearer-token-authentication-tutorial.adoc index 011dac9dff9cf..08360fa077686 100644 --- a/docs/src/main/asciidoc/security-oidc-bearer-token-authentication-tutorial.adoc +++ b/docs/src/main/asciidoc/security-oidc-bearer-token-authentication-tutorial.adoc @@ -233,7 +233,7 @@ For more information, see the <> sectio ==== [source,bash,subs=attributes+] ---- -docker run --name keycloak -e KC_BOOTSTRAP_ADMIN_USERNAME=admin -e KC_BOOTSTRAP_ADMIN_PASSWORD=admin -p 8180:8080 {keycloak-docker-image} start-dev +docker run --name keycloak -e KC_BOOTSTRAP_ADMIN_USERNAME=admin -e KC_BOOTSTRAP_ADMIN_PASSWORD=admin -p 8180:8080 {keycloak-image} start-dev ---- ==== . You can access your Keycloak server at http://localhost:8180[localhost:8180]. diff --git a/docs/src/main/asciidoc/security-oidc-code-flow-authentication-tutorial.adoc b/docs/src/main/asciidoc/security-oidc-code-flow-authentication-tutorial.adoc index 71ef99baa09af..18481b8dc17c9 100644 --- a/docs/src/main/asciidoc/security-oidc-code-flow-authentication-tutorial.adoc +++ b/docs/src/main/asciidoc/security-oidc-code-flow-authentication-tutorial.adoc @@ -198,7 +198,7 @@ To start a Keycloak server, use Docker and run the following command: [source,bash,subs=attributes+] ---- -docker run --name keycloak -e KC_BOOTSTRAP_ADMIN_USERNAME=admin -e KC_BOOTSTRAP_ADMIN_PASSWORD=admin -p 8180:8080 {keycloak-docker-image} start-dev +docker run --name keycloak -e KC_BOOTSTRAP_ADMIN_USERNAME=admin -e KC_BOOTSTRAP_ADMIN_PASSWORD=admin -p 8180:8080 {keycloak-image} start-dev ---- You can access your Keycloak Server at http://localhost:8180[localhost:8180]. diff --git a/docs/src/main/asciidoc/security-openid-connect-client.adoc b/docs/src/main/asciidoc/security-openid-connect-client.adoc index db5f8fea0b6d5..9d5e3d7d4e079 100644 --- a/docs/src/main/asciidoc/security-openid-connect-client.adoc +++ b/docs/src/main/asciidoc/security-openid-connect-client.adoc @@ -502,7 +502,7 @@ To start a Keycloak Server, you can use Docker and just run the following comman [source,bash,subs=attributes+] ---- -docker run --name keycloak -e KC_BOOTSTRAP_ADMIN_USERNAME=admin -e KC_BOOTSTRAP_ADMIN_PASSWORD=admin -p 8180:8080 {keycloak-docker-image} start-dev +docker run --name keycloak -e KC_BOOTSTRAP_ADMIN_USERNAME=admin -e KC_BOOTSTRAP_ADMIN_PASSWORD=admin -p 8180:8080 {keycloak-image} start-dev ---- You can access your Keycloak Server at http://localhost:8180[localhost:8180]. diff --git a/docs/src/main/asciidoc/security-openid-connect-dev-services.adoc b/docs/src/main/asciidoc/security-openid-connect-dev-services.adoc index bcdd4e0d336cd..b759b6d48bd40 100644 --- a/docs/src/main/asciidoc/security-openid-connect-dev-services.adoc +++ b/docs/src/main/asciidoc/security-openid-connect-dev-services.adoc @@ -247,7 +247,7 @@ For more information, see xref:security-oidc-bearer-token-authentication.adoc#be [[keycloak-initialization]] === Keycloak initialization -The `{keycloak-docker-image}` image which contains a Keycloak distribution powered by Quarkus is used to start a container by default. +The `{keycloak-image}` image which contains a Keycloak distribution powered by Quarkus is used to start a container by default. `quarkus.keycloak.devservices.image-name` can be used to change the Keycloak image name. For example, set it to `quay.io/keycloak/keycloak:19.0.3-legacy` to use a Keycloak distribution powered by WildFly. Be aware that a Quarkus-based Keycloak distribution is only available starting from Keycloak `20.0.0`. diff --git a/docs/src/main/asciidoc/security-openid-connect-multitenancy.adoc b/docs/src/main/asciidoc/security-openid-connect-multitenancy.adoc index 3e3a77bd9be07..bb49fb382a9cf 100644 --- a/docs/src/main/asciidoc/security-openid-connect-multitenancy.adoc +++ b/docs/src/main/asciidoc/security-openid-connect-multitenancy.adoc @@ -343,7 +343,7 @@ To start a Keycloak server, you can use Docker and run the following command: [source,bash,subs=attributes+] ---- -docker run --name keycloak -e KC_BOOTSTRAP_ADMIN_USERNAME=admin -e KC_BOOTSTRAP_ADMIN_PASSWORD=admin -p 8180:8080 {keycloak-docker-image} start-dev +docker run --name keycloak -e KC_BOOTSTRAP_ADMIN_USERNAME=admin -e KC_BOOTSTRAP_ADMIN_PASSWORD=admin -p 8180:8080 {keycloak-image} start-dev ---- Access your Keycloak server at http://localhost:8180[localhost:8180]. diff --git a/docs/src/main/asciidoc/spring-data-jpa.adoc b/docs/src/main/asciidoc/spring-data-jpa.adoc index 1e5ec05f38791..5d5215c47afb0 100644 --- a/docs/src/main/asciidoc/spring-data-jpa.adoc +++ b/docs/src/main/asciidoc/spring-data-jpa.adoc @@ -139,9 +139,9 @@ This configuration assumes that PostgreSQL will be running locally. A very easy way to accomplish that is by using the following Docker command: -[source,bash] +[source,bash,subs=attributes+] ---- -docker run -it --rm=true --name quarkus_test -e POSTGRES_USER=quarkus_test -e POSTGRES_PASSWORD=quarkus_test -e POSTGRES_DB=quarkus_test -p 5432:5432 postgres:14.1 +docker run -it --rm=true --name quarkus_test -e POSTGRES_USER=quarkus_test -e POSTGRES_PASSWORD=quarkus_test -e POSTGRES_DB=quarkus_test -p 5432:5432 {postgres-image} ---- If you plan on using a different setup, please change your `application.properties` accordingly. diff --git a/docs/src/main/asciidoc/spring-data-rest.adoc b/docs/src/main/asciidoc/spring-data-rest.adoc index 65047c5991897..0b40ec408212f 100644 --- a/docs/src/main/asciidoc/spring-data-rest.adoc +++ b/docs/src/main/asciidoc/spring-data-rest.adoc @@ -158,9 +158,9 @@ This configuration assumes that PostgreSQL will be running locally. A very easy way to accomplish that is by using the following Docker command: -[source,bash] +[source,bash,subs=attributes+] ---- -docker run -it --rm=true --name quarkus_test -e POSTGRES_USER=quarkus_test -e POSTGRES_PASSWORD=quarkus_test -e POSTGRES_DB=quarkus_test -p 5432:5432 postgres:14.1 +docker run -it --rm=true --name quarkus_test -e POSTGRES_USER=quarkus_test -e POSTGRES_PASSWORD=quarkus_test -e POSTGRES_DB=quarkus_test -p 5432:5432 {postgres-image} ---- If you plan on using a different setup, please change your `application.properties` accordingly. diff --git a/extensions/datasource/runtime/src/main/java/io/quarkus/datasource/runtime/DevServicesBuildTimeConfig.java b/extensions/datasource/runtime/src/main/java/io/quarkus/datasource/runtime/DevServicesBuildTimeConfig.java index 6d96e50df3830..adc649c2fed52 100644 --- a/extensions/datasource/runtime/src/main/java/io/quarkus/datasource/runtime/DevServicesBuildTimeConfig.java +++ b/extensions/datasource/runtime/src/main/java/io/quarkus/datasource/runtime/DevServicesBuildTimeConfig.java @@ -26,8 +26,19 @@ public interface DevServicesBuildTimeConfig { /** * The container image name for container-based Dev Service providers. - *

+ * * This has no effect if the provider is not a container-based database, such as H2 or Derby. + * + * Defaults depend on the configured `datasource`: + * + * * DB2: `{db2-image}` + * * MariaDB: `{mariadb-image}` + * * Microsoft SQL Server: `{mssql-image}` + * * MySQL: `{mysql-image}` + * * Oracle Express Edition: `{oracle-image}` + * * PostgreSQL: `{postgres-image}` + * + * @asciidoclet */ Optional<@WithConverter(TrimmedStringConverter.class) String> imageName(); diff --git a/extensions/devservices/keycloak/src/main/java/io/quarkus/devservices/keycloak/KeycloakDevServicesConfig.java b/extensions/devservices/keycloak/src/main/java/io/quarkus/devservices/keycloak/KeycloakDevServicesConfig.java index aeef5f2dde1d5..3b51ab3133ada 100644 --- a/extensions/devservices/keycloak/src/main/java/io/quarkus/devservices/keycloak/KeycloakDevServicesConfig.java +++ b/extensions/devservices/keycloak/src/main/java/io/quarkus/devservices/keycloak/KeycloakDevServicesConfig.java @@ -7,6 +7,7 @@ import java.util.OptionalInt; import java.util.Set; +import io.quarkus.runtime.annotations.ConfigDocDefault; import io.quarkus.runtime.annotations.ConfigDocMapKey; import io.quarkus.runtime.annotations.ConfigRoot; import io.quarkus.runtime.configuration.MemorySize; @@ -40,6 +41,7 @@ public interface KeycloakDevServicesConfig { * ends with `-legacy`. * Override with `quarkus.keycloak.devservices.keycloak-x-image`. */ + @ConfigDocDefault(value = "`{keycloak-image}`", escape = false) Optional imageName(); /** diff --git a/extensions/elasticsearch-rest-client-common/deployment/src/main/java/io/quarkus/elasticsearch/restclient/common/deployment/ElasticsearchCommonBuildTimeConfig.java b/extensions/elasticsearch-rest-client-common/deployment/src/main/java/io/quarkus/elasticsearch/restclient/common/deployment/ElasticsearchCommonBuildTimeConfig.java index c67319b1bc6f5..1fb226fdf62f8 100644 --- a/extensions/elasticsearch-rest-client-common/deployment/src/main/java/io/quarkus/elasticsearch/restclient/common/deployment/ElasticsearchCommonBuildTimeConfig.java +++ b/extensions/elasticsearch-rest-client-common/deployment/src/main/java/io/quarkus/elasticsearch/restclient/common/deployment/ElasticsearchCommonBuildTimeConfig.java @@ -58,8 +58,8 @@ interface ElasticsearchDevServicesBuildTimeConfig { * * Defaults depend on the configured `distribution`: * - * * For the `elastic` distribution: {elasticsearch-image} - * * For the `opensearch` distribution: {opensearch-image} + * * For the `elastic` distribution: `{elasticsearch-image}` + * * For the `opensearch` distribution: `{opensearch-image}` * * @asciidoclet */ diff --git a/extensions/infinispan-client/deployment/src/main/java/io/quarkus/infinispan/client/deployment/devservices/InfinispanDevServiceProcessor.java b/extensions/infinispan-client/deployment/src/main/java/io/quarkus/infinispan/client/deployment/devservices/InfinispanDevServiceProcessor.java index 3327c7b5ee94a..8a69e01c0cdc6 100644 --- a/extensions/infinispan-client/deployment/src/main/java/io/quarkus/infinispan/client/deployment/devservices/InfinispanDevServiceProcessor.java +++ b/extensions/infinispan-client/deployment/src/main/java/io/quarkus/infinispan/client/deployment/devservices/InfinispanDevServiceProcessor.java @@ -1,9 +1,9 @@ package io.quarkus.infinispan.client.deployment.devservices; +import static io.quarkus.devservices.common.ConfigureUtil.getDefaultImageNameFor; import static io.quarkus.devservices.common.ContainerLocator.locateContainerWithLabels; import static io.quarkus.runtime.LaunchMode.DEVELOPMENT; import static org.infinispan.server.test.core.InfinispanContainer.DEFAULT_USERNAME; -import static org.infinispan.server.test.core.InfinispanContainer.IMAGE_BASENAME; import java.io.Closeable; import java.time.Duration; @@ -17,7 +17,6 @@ import org.infinispan.client.hotrod.configuration.ClientIntelligence; import org.infinispan.client.hotrod.impl.ConfigurationProperties; -import org.infinispan.commons.util.Version; import org.infinispan.server.test.core.InfinispanContainer; import org.jboss.logging.Logger; import org.testcontainers.containers.BindMode; @@ -240,7 +239,8 @@ private RunningDevService startContainer(String clientName, DockerStatusBuildIte .map(containerAddress -> getRunningDevService(clientName, containerAddress.getId(), null, containerAddress.getUrl(), DEFAULT_USERNAME, DEFAULT_PASSWORD, properties)) // TODO can this be always right ? .or(() -> ComposeLocator.locateContainer(composeProjectBuildItem, - List.of(devServicesConfig.imageName().orElse(IMAGE_BASENAME), "infinispan", "datagrid"), + List.of(devServicesConfig.imageName().orElseGet(() -> getDefaultImageNameFor("infinispan")), + "infinispan", "datagrid"), DEFAULT_INFINISPAN_PORT, launchMode, useSharedNetwork) .map(address -> getRunningDevService(clientName, address, properties))) .orElseGet(infinispanServerSupplier); @@ -290,7 +290,7 @@ private static class QuarkusInfinispanContainer extends InfinispanContainer { public QuarkusInfinispanContainer(String clientName, InfinispanDevServicesConfig config, LaunchMode launchMode, String defaultNetworkId, boolean useSharedNetwork) { - super(config.imageName().orElse(IMAGE_BASENAME + ":" + Version.getUnbrandedVersion())); + super(config.imageName().orElseGet(() -> getDefaultImageNameFor("infinispan"))); this.fixedExposedPort = config.port(); this.useSharedNetwork = useSharedNetwork; if (launchMode == DEVELOPMENT) { diff --git a/extensions/infinispan-client/deployment/src/main/resources/infinispan-devservice.properties b/extensions/infinispan-client/deployment/src/main/resources/infinispan-devservice.properties new file mode 100644 index 0000000000000..6f29492d8c251 --- /dev/null +++ b/extensions/infinispan-client/deployment/src/main/resources/infinispan-devservice.properties @@ -0,0 +1 @@ +default.image=${infinispan.image} diff --git a/extensions/infinispan-client/runtime/src/main/java/io/quarkus/infinispan/client/runtime/InfinispanDevServicesConfig.java b/extensions/infinispan-client/runtime/src/main/java/io/quarkus/infinispan/client/runtime/InfinispanDevServicesConfig.java index c541232951532..8dd858d3df8d6 100644 --- a/extensions/infinispan-client/runtime/src/main/java/io/quarkus/infinispan/client/runtime/InfinispanDevServicesConfig.java +++ b/extensions/infinispan-client/runtime/src/main/java/io/quarkus/infinispan/client/runtime/InfinispanDevServicesConfig.java @@ -5,6 +5,7 @@ import java.util.Optional; import java.util.OptionalInt; +import io.quarkus.runtime.annotations.ConfigDocDefault; import io.quarkus.runtime.annotations.ConfigDocMapKey; import io.quarkus.runtime.annotations.ConfigGroup; import io.smallrye.config.WithDefault; @@ -70,6 +71,7 @@ public interface InfinispanDevServicesConfig { * The image to use. * Note that only official Infinispan images are supported. */ + @ConfigDocDefault(value = "`{infinispan-image}`", escape = false) Optional imageName(); /** diff --git a/extensions/mongodb-client/deployment/src/main/java/io/quarkus/mongodb/deployment/DevServicesBuildTimeConfig.java b/extensions/mongodb-client/deployment/src/main/java/io/quarkus/mongodb/deployment/DevServicesBuildTimeConfig.java index d693fca198cfd..af8ad36bfcb57 100644 --- a/extensions/mongodb-client/deployment/src/main/java/io/quarkus/mongodb/deployment/DevServicesBuildTimeConfig.java +++ b/extensions/mongodb-client/deployment/src/main/java/io/quarkus/mongodb/deployment/DevServicesBuildTimeConfig.java @@ -3,6 +3,7 @@ import java.util.Map; import java.util.Optional; +import io.quarkus.runtime.annotations.ConfigDocDefault; import io.quarkus.runtime.annotations.ConfigDocMapKey; import io.quarkus.runtime.annotations.ConfigGroup; import io.smallrye.config.WithDefault; @@ -22,6 +23,7 @@ public interface DevServicesBuildTimeConfig { /** * The container image name to use, for container based DevServices providers. */ + @ConfigDocDefault(value = "`{mongo-image}`", escape = false) Optional imageName(); /** diff --git a/extensions/narayana-lra/deployment/src/main/java/io/quarkus/narayana/lra/deployment/devservice/DevServicesLRAProcessor.java b/extensions/narayana-lra/deployment/src/main/java/io/quarkus/narayana/lra/deployment/devservice/DevServicesLRAProcessor.java index 1fa6fda48a377..72d6effdd8fa5 100644 --- a/extensions/narayana-lra/deployment/src/main/java/io/quarkus/narayana/lra/deployment/devservice/DevServicesLRAProcessor.java +++ b/extensions/narayana-lra/deployment/src/main/java/io/quarkus/narayana/lra/deployment/devservice/DevServicesLRAProcessor.java @@ -1,5 +1,6 @@ package io.quarkus.narayana.lra.deployment.devservice; +import static io.quarkus.devservices.common.ConfigureUtil.getDefaultImageNameFor; import static io.quarkus.devservices.common.ContainerLocator.locateContainerWithLabels; import java.util.List; @@ -63,7 +64,7 @@ public DevServicesResultBuildItem lraCoordinatorDevService( return lraCoordinatorContainerLocator .locateContainer(config.serviceName(), config.shared(), launchMode.getLaunchMode()) .or(() -> ComposeLocator.locateContainer(compose, - List.of(config.imageName(), "lra-coordinator"), + List.of(config.imageName().orElseGet(() -> getDefaultImageNameFor("narayana-lra")), "lra-coordinator"), LRA_COORDINATOR_CONTAINER_PORT, launchMode.getLaunchMode(), useSharedNetwork)) .map(containerAddress -> DevServicesResultBuildItem.discovered() .feature(Feature.NARAYANA_LRA) @@ -97,7 +98,8 @@ private void logDevServiceStarted(String connectionInfo) { private Startable createContainer(DevServicesComposeProjectBuildItem compose, LRACoordinatorDevServicesBuildTimeConfig config, boolean useSharedNetwork, LaunchModeBuildItem launchMode) { - return new LRACoordinatorContainer(DockerImageName.parse(config.imageName()), + return new LRACoordinatorContainer( + DockerImageName.parse(config.imageName().orElseGet(() -> getDefaultImageNameFor("narayana-lra"))), config.port().orElse(0), compose.getDefaultNetworkId(), useSharedNetwork) diff --git a/extensions/narayana-lra/deployment/src/main/java/io/quarkus/narayana/lra/deployment/devservice/LRACoordinatorDevServicesBuildTimeConfig.java b/extensions/narayana-lra/deployment/src/main/java/io/quarkus/narayana/lra/deployment/devservice/LRACoordinatorDevServicesBuildTimeConfig.java index 31d08ffd5831c..09f65cea3172c 100644 --- a/extensions/narayana-lra/deployment/src/main/java/io/quarkus/narayana/lra/deployment/devservice/LRACoordinatorDevServicesBuildTimeConfig.java +++ b/extensions/narayana-lra/deployment/src/main/java/io/quarkus/narayana/lra/deployment/devservice/LRACoordinatorDevServicesBuildTimeConfig.java @@ -1,8 +1,10 @@ package io.quarkus.narayana.lra.deployment.devservice; import java.util.Map; +import java.util.Optional; import java.util.OptionalInt; +import io.quarkus.runtime.annotations.ConfigDocDefault; import io.quarkus.runtime.annotations.ConfigDocMapKey; import io.smallrye.config.WithDefault; @@ -26,8 +28,8 @@ public interface LRACoordinatorDevServicesBuildTimeConfig { /** * Optional override of the LRA coordinator container image to use. */ - @WithDefault("quay.io/jbosstm/lra-coordinator:7.2.2.Final-3.25.0") - String imageName(); + @ConfigDocDefault(value = "`{narayana-lra-image}`", escape = false) + Optional imageName(); /** * Indicates if the LRA coordinator managed by Quarkus Dev Services is shared. diff --git a/extensions/narayana-lra/deployment/src/main/resources/narayana-lra-devservice.properties b/extensions/narayana-lra/deployment/src/main/resources/narayana-lra-devservice.properties new file mode 100644 index 0000000000000..b01cf71c0d735 --- /dev/null +++ b/extensions/narayana-lra/deployment/src/main/resources/narayana-lra-devservice.properties @@ -0,0 +1 @@ +default.image=${narayana-lra.image} diff --git a/extensions/redis-client/deployment/src/main/java/io/quarkus/redis/deployment/client/DevServicesConfig.java b/extensions/redis-client/deployment/src/main/java/io/quarkus/redis/deployment/client/DevServicesConfig.java index 48623c9b696e0..a2446bf8cd7cf 100644 --- a/extensions/redis-client/deployment/src/main/java/io/quarkus/redis/deployment/client/DevServicesConfig.java +++ b/extensions/redis-client/deployment/src/main/java/io/quarkus/redis/deployment/client/DevServicesConfig.java @@ -4,6 +4,7 @@ import java.util.Optional; import java.util.OptionalInt; +import io.quarkus.runtime.annotations.ConfigDocDefault; import io.quarkus.runtime.annotations.ConfigDocMapKey; import io.quarkus.runtime.annotations.ConfigGroup; import io.smallrye.config.WithDefault; @@ -26,6 +27,7 @@ public interface DevServicesConfig { * If you want to use Redis Stack modules (bloom, graph, search...), use: * {@code redis/redis-stack:latest}. */ + @ConfigDocDefault(value = "`{redis-image}`", escape = false) Optional imageName(); /** diff --git a/extensions/redis-client/deployment/src/main/java/io/quarkus/redis/deployment/client/DevServicesRedisProcessor.java b/extensions/redis-client/deployment/src/main/java/io/quarkus/redis/deployment/client/DevServicesRedisProcessor.java index dd12904190ab2..7d8836b3ec3d2 100644 --- a/extensions/redis-client/deployment/src/main/java/io/quarkus/redis/deployment/client/DevServicesRedisProcessor.java +++ b/extensions/redis-client/deployment/src/main/java/io/quarkus/redis/deployment/client/DevServicesRedisProcessor.java @@ -1,6 +1,7 @@ package io.quarkus.redis.deployment.client; import static io.quarkus.devservices.common.ConfigureUtil.configureSharedServiceLabel; +import static io.quarkus.devservices.common.ConfigureUtil.getDefaultImageNameFor; import static io.quarkus.devservices.common.ContainerLocator.locateContainerWithLabels; import static io.quarkus.redis.runtime.client.config.RedisConfig.HOSTS; import static io.quarkus.redis.runtime.client.config.RedisConfig.getPropertyName; @@ -38,7 +39,6 @@ public class DevServicesRedisProcessor { private static final Logger log = Logger.getLogger(DevServicesRedisProcessor.class); - private static final String REDIS_IMAGE = "docker.io/redis:7"; private static final int REDIS_EXPOSED_PORT = 6379; private static final String REDIS_SCHEME = "redis://"; @@ -84,8 +84,10 @@ public void startRedisContainers(LaunchModeBuildItem launchMode, .serviceName(name) .serviceConfig(redisConfig) .startable(() -> new QuarkusPortRedisContainer( - DockerImageName.parse(redisConfig.imageName().orElse(REDIS_IMAGE)) - .asCompatibleSubstituteFor(REDIS_IMAGE), + DockerImageName + .parse(redisConfig.imageName() + .orElseGet(() -> getDefaultImageNameFor("redis"))) + .asCompatibleSubstituteFor("redis"), redisConfig.port(), composeProjectBuildItem.getDefaultNetworkId(), useSharedNetwork) @@ -128,7 +130,7 @@ private DevServicesResultBuildItem discoverRunningService(DevServicesComposeProj boolean useSharedNetwork) { return redisContainerLocator.locateContainer(devServicesConfig.serviceName(), devServicesConfig.shared(), launchMode) .or(() -> ComposeLocator.locateContainer(composeProjectBuildItem, - List.of(devServicesConfig.imageName().orElse("redis")), + List.of(devServicesConfig.imageName().orElseGet(() -> getDefaultImageNameFor("redis"))), REDIS_EXPOSED_PORT, launchMode, useSharedNetwork)) .map(containerAddress -> { String redisUrl = REDIS_SCHEME + containerAddress.getUrl(); diff --git a/extensions/redis-client/deployment/src/main/resources/redis-devservice.properties b/extensions/redis-client/deployment/src/main/resources/redis-devservice.properties new file mode 100644 index 0000000000000..c9c6f87bc1c51 --- /dev/null +++ b/extensions/redis-client/deployment/src/main/resources/redis-devservice.properties @@ -0,0 +1 @@ +default.image=${redis.image} diff --git a/extensions/schema-registry/devservice/deployment/src/main/java/io/quarkus/apicurio/registry/devservice/ApicurioRegistryBuildTimeConfig.java b/extensions/schema-registry/devservice/deployment/src/main/java/io/quarkus/apicurio/registry/devservice/ApicurioRegistryBuildTimeConfig.java index 95f8f70bfc549..98507fde7821a 100644 --- a/extensions/schema-registry/devservice/deployment/src/main/java/io/quarkus/apicurio/registry/devservice/ApicurioRegistryBuildTimeConfig.java +++ b/extensions/schema-registry/devservice/deployment/src/main/java/io/quarkus/apicurio/registry/devservice/ApicurioRegistryBuildTimeConfig.java @@ -4,11 +4,7 @@ import java.util.Optional; import java.util.OptionalInt; -import io.quarkus.runtime.annotations.ConfigDocMapKey; -import io.quarkus.runtime.annotations.ConfigDocSection; -import io.quarkus.runtime.annotations.ConfigGroup; -import io.quarkus.runtime.annotations.ConfigPhase; -import io.quarkus.runtime.annotations.ConfigRoot; +import io.quarkus.runtime.annotations.*; import io.smallrye.config.ConfigMapping; import io.smallrye.config.WithDefault; @@ -47,8 +43,8 @@ interface ApicurioRegistryDevServicesBuildTimeConfig { * Note that only Apicurio Registry 2.x images are supported. * Specifically, the image repository must end with {@code apicurio/apicurio-registry-mem}. */ - @WithDefault("quay.io/apicurio/apicurio-registry-mem:2.4.2.Final") - String imageName(); + @ConfigDocDefault(value = "`{apicurio-registry-image}`", escape = false) + Optional imageName(); /** * Indicates if the Apicurio Registry instance managed by Quarkus Dev Services is shared. diff --git a/extensions/schema-registry/devservice/deployment/src/main/java/io/quarkus/apicurio/registry/devservice/DevServicesApicurioRegistryProcessor.java b/extensions/schema-registry/devservice/deployment/src/main/java/io/quarkus/apicurio/registry/devservice/DevServicesApicurioRegistryProcessor.java index a30802460dcd4..2b83d2a270ea5 100644 --- a/extensions/schema-registry/devservice/deployment/src/main/java/io/quarkus/apicurio/registry/devservice/DevServicesApicurioRegistryProcessor.java +++ b/extensions/schema-registry/devservice/deployment/src/main/java/io/quarkus/apicurio/registry/devservice/DevServicesApicurioRegistryProcessor.java @@ -1,5 +1,6 @@ package io.quarkus.apicurio.registry.devservice; +import static io.quarkus.devservices.common.ConfigureUtil.getDefaultImageNameFor; import static io.quarkus.devservices.common.ContainerLocator.locateContainerWithLabels; import static io.quarkus.devservices.common.Labels.QUARKUS_DEV_SERVICE; @@ -234,7 +235,7 @@ private static final class ApicurioRegistryDevServiceCfg { public ApicurioRegistryDevServiceCfg(ApicurioRegistryDevServicesBuildTimeConfig config) { this.devServicesEnabled = config.enabled().orElse(true); - this.imageName = config.imageName(); + this.imageName = config.imageName().orElseGet(() -> getDefaultImageNameFor("apicurio-registry")); this.fixedExposedPort = config.port().orElse(0); this.shared = config.shared(); this.serviceName = config.serviceName(); diff --git a/extensions/schema-registry/devservice/deployment/src/main/resources/apicurio-registry-devservice.properties b/extensions/schema-registry/devservice/deployment/src/main/resources/apicurio-registry-devservice.properties new file mode 100644 index 0000000000000..a49ff60d67f3c --- /dev/null +++ b/extensions/schema-registry/devservice/deployment/src/main/resources/apicurio-registry-devservice.properties @@ -0,0 +1 @@ +default.image=${apicurio-registry.image} diff --git a/extensions/smallrye-reactive-messaging-amqp/deployment/src/main/java/io/quarkus/smallrye/reactivemessaging/amqp/deployment/AmqpDevServicesBuildTimeConfig.java b/extensions/smallrye-reactive-messaging-amqp/deployment/src/main/java/io/quarkus/smallrye/reactivemessaging/amqp/deployment/AmqpDevServicesBuildTimeConfig.java index 0b89620630f8f..aaad61ab118bf 100644 --- a/extensions/smallrye-reactive-messaging-amqp/deployment/src/main/java/io/quarkus/smallrye/reactivemessaging/amqp/deployment/AmqpDevServicesBuildTimeConfig.java +++ b/extensions/smallrye-reactive-messaging-amqp/deployment/src/main/java/io/quarkus/smallrye/reactivemessaging/amqp/deployment/AmqpDevServicesBuildTimeConfig.java @@ -3,6 +3,7 @@ import java.util.Map; import java.util.Optional; +import io.quarkus.runtime.annotations.ConfigDocDefault; import io.quarkus.runtime.annotations.ConfigDocMapKey; import io.quarkus.runtime.annotations.ConfigGroup; import io.smallrye.config.WithDefault; @@ -34,8 +35,8 @@ public interface AmqpDevServicesBuildTimeConfig { * page * to find the available versions. */ - @WithDefault("quay.io/artemiscloud/activemq-artemis-broker:1.0.25") - String imageName(); + @ConfigDocDefault(value = "`{amqp-image}`", escape = false) + Optional imageName(); /** * The value of the {@code AMQ_EXTRA_ARGS} environment variable to pass to the container. diff --git a/extensions/smallrye-reactive-messaging-amqp/deployment/src/main/java/io/quarkus/smallrye/reactivemessaging/amqp/deployment/AmqpDevServicesProcessor.java b/extensions/smallrye-reactive-messaging-amqp/deployment/src/main/java/io/quarkus/smallrye/reactivemessaging/amqp/deployment/AmqpDevServicesProcessor.java index db712fffaa844..a7d7ce9d31ecf 100644 --- a/extensions/smallrye-reactive-messaging-amqp/deployment/src/main/java/io/quarkus/smallrye/reactivemessaging/amqp/deployment/AmqpDevServicesProcessor.java +++ b/extensions/smallrye-reactive-messaging-amqp/deployment/src/main/java/io/quarkus/smallrye/reactivemessaging/amqp/deployment/AmqpDevServicesProcessor.java @@ -1,5 +1,6 @@ package io.quarkus.smallrye.reactivemessaging.amqp.deployment; +import static io.quarkus.devservices.common.ConfigureUtil.getDefaultImageNameFor; import static io.quarkus.devservices.common.ContainerLocator.locateContainerWithLabels; import static io.quarkus.devservices.common.Labels.QUARKUS_DEV_SERVICE; @@ -291,7 +292,7 @@ private static final class AmqpDevServiceCfg { public AmqpDevServiceCfg(AmqpDevServicesBuildTimeConfig devServicesConfig) { this.devServicesEnabled = devServicesConfig.enabled().orElse(true); - this.imageName = devServicesConfig.imageName(); + this.imageName = devServicesConfig.imageName().orElseGet(() -> getDefaultImageNameFor("amqp")); this.fixedExposedPort = devServicesConfig.port().orElse(0); this.extra = devServicesConfig.extraArgs(); this.shared = devServicesConfig.shared(); diff --git a/extensions/smallrye-reactive-messaging-amqp/deployment/src/main/resources/amqp-devservice.properties b/extensions/smallrye-reactive-messaging-amqp/deployment/src/main/resources/amqp-devservice.properties new file mode 100644 index 0000000000000..1181fecb24128 --- /dev/null +++ b/extensions/smallrye-reactive-messaging-amqp/deployment/src/main/resources/amqp-devservice.properties @@ -0,0 +1 @@ +default.image=${amqp.image} diff --git a/extensions/smallrye-reactive-messaging-pulsar/deployment/src/main/java/io/quarkus/smallrye/reactivemessaging/pulsar/deployment/PulsarDevServicesBuildTimeConfig.java b/extensions/smallrye-reactive-messaging-pulsar/deployment/src/main/java/io/quarkus/smallrye/reactivemessaging/pulsar/deployment/PulsarDevServicesBuildTimeConfig.java index 15ed31511e0b5..adb8340a884e7 100644 --- a/extensions/smallrye-reactive-messaging-pulsar/deployment/src/main/java/io/quarkus/smallrye/reactivemessaging/pulsar/deployment/PulsarDevServicesBuildTimeConfig.java +++ b/extensions/smallrye-reactive-messaging-pulsar/deployment/src/main/java/io/quarkus/smallrye/reactivemessaging/pulsar/deployment/PulsarDevServicesBuildTimeConfig.java @@ -3,6 +3,7 @@ import java.util.Map; import java.util.Optional; +import io.quarkus.runtime.annotations.ConfigDocDefault; import io.quarkus.runtime.annotations.ConfigDocMapKey; import io.quarkus.runtime.annotations.ConfigGroup; import io.smallrye.config.WithDefault; @@ -33,8 +34,8 @@ public interface PulsarDevServicesBuildTimeConfig { * Check https://hub.docker.com/r/apachepulsar/pulsar to find the available versions. */ // Alpine-based images starting from 3.3.0 fail to start on aarch64: https://github.com/apache/pulsar/issues/23306 - @WithDefault("apachepulsar/pulsar:3.2.4") - String imageName(); + @ConfigDocDefault(value = "`{pulsar-image}`", escape = false) + Optional imageName(); /** * Indicates if the Pulsar broker managed by Quarkus Dev Services is shared. diff --git a/extensions/smallrye-reactive-messaging-pulsar/deployment/src/main/java/io/quarkus/smallrye/reactivemessaging/pulsar/deployment/PulsarDevServicesProcessor.java b/extensions/smallrye-reactive-messaging-pulsar/deployment/src/main/java/io/quarkus/smallrye/reactivemessaging/pulsar/deployment/PulsarDevServicesProcessor.java index 391a94127e8bc..242dc8c392fed 100644 --- a/extensions/smallrye-reactive-messaging-pulsar/deployment/src/main/java/io/quarkus/smallrye/reactivemessaging/pulsar/deployment/PulsarDevServicesProcessor.java +++ b/extensions/smallrye-reactive-messaging-pulsar/deployment/src/main/java/io/quarkus/smallrye/reactivemessaging/pulsar/deployment/PulsarDevServicesProcessor.java @@ -1,5 +1,6 @@ package io.quarkus.smallrye.reactivemessaging.pulsar.deployment; +import static io.quarkus.devservices.common.ConfigureUtil.getDefaultImageNameFor; import static io.quarkus.devservices.common.ContainerLocator.locateContainerWithLabels; import static io.quarkus.devservices.common.Labels.QUARKUS_DEV_SERVICE; @@ -276,7 +277,7 @@ private static final class PulsarDevServiceCfg { public PulsarDevServiceCfg(PulsarDevServicesBuildTimeConfig devServicesConfig) { this.devServicesEnabled = devServicesConfig.enabled().orElse(true); - this.imageName = devServicesConfig.imageName(); + this.imageName = devServicesConfig.imageName().orElseGet(() -> getDefaultImageNameFor("pulsar")); this.fixedExposedPort = devServicesConfig.port().orElse(0); this.shared = devServicesConfig.shared(); this.serviceName = devServicesConfig.serviceName(); diff --git a/extensions/smallrye-reactive-messaging-pulsar/deployment/src/main/resources/pulsar-devservice.properties b/extensions/smallrye-reactive-messaging-pulsar/deployment/src/main/resources/pulsar-devservice.properties new file mode 100644 index 0000000000000..0ee60f37b405a --- /dev/null +++ b/extensions/smallrye-reactive-messaging-pulsar/deployment/src/main/resources/pulsar-devservice.properties @@ -0,0 +1 @@ +default.image=${pulsar.image} diff --git a/extensions/smallrye-reactive-messaging-rabbitmq/deployment/src/main/java/io/quarkus/smallrye/reactivemessaging/rabbitmq/deployment/RabbitMQDevServicesBuildTimeConfig.java b/extensions/smallrye-reactive-messaging-rabbitmq/deployment/src/main/java/io/quarkus/smallrye/reactivemessaging/rabbitmq/deployment/RabbitMQDevServicesBuildTimeConfig.java index 015569e7fa21f..8987d12a70b8b 100644 --- a/extensions/smallrye-reactive-messaging-rabbitmq/deployment/src/main/java/io/quarkus/smallrye/reactivemessaging/rabbitmq/deployment/RabbitMQDevServicesBuildTimeConfig.java +++ b/extensions/smallrye-reactive-messaging-rabbitmq/deployment/src/main/java/io/quarkus/smallrye/reactivemessaging/rabbitmq/deployment/RabbitMQDevServicesBuildTimeConfig.java @@ -5,6 +5,7 @@ import java.util.Optional; import java.util.OptionalInt; +import io.quarkus.runtime.annotations.ConfigDocDefault; import io.quarkus.runtime.annotations.ConfigDocMapKey; import io.quarkus.runtime.annotations.ConfigGroup; import io.smallrye.config.WithDefault; @@ -140,8 +141,8 @@ public interface Binding { * Note that only official RabbitMQ images are supported. * Specifically, the image repository must end with {@code rabbitmq}. */ - @WithDefault("rabbitmq:3.12-management") - String imageName(); + @ConfigDocDefault(value = "`{rabbitmq-image}`", escape = false) + Optional imageName(); /** * Indicates if the RabbitMQ broker managed by Quarkus Dev Services is shared. diff --git a/extensions/smallrye-reactive-messaging-rabbitmq/deployment/src/main/java/io/quarkus/smallrye/reactivemessaging/rabbitmq/deployment/RabbitMQDevServicesProcessor.java b/extensions/smallrye-reactive-messaging-rabbitmq/deployment/src/main/java/io/quarkus/smallrye/reactivemessaging/rabbitmq/deployment/RabbitMQDevServicesProcessor.java index b32e56ef0a11a..41fad2491a6f4 100644 --- a/extensions/smallrye-reactive-messaging-rabbitmq/deployment/src/main/java/io/quarkus/smallrye/reactivemessaging/rabbitmq/deployment/RabbitMQDevServicesProcessor.java +++ b/extensions/smallrye-reactive-messaging-rabbitmq/deployment/src/main/java/io/quarkus/smallrye/reactivemessaging/rabbitmq/deployment/RabbitMQDevServicesProcessor.java @@ -1,5 +1,6 @@ package io.quarkus.smallrye.reactivemessaging.rabbitmq.deployment; +import static io.quarkus.devservices.common.ConfigureUtil.getDefaultImageNameFor; import static io.quarkus.devservices.common.ContainerLocator.locateContainerWithLabels; import static io.quarkus.devservices.common.Labels.QUARKUS_DEV_SERVICE; @@ -371,7 +372,7 @@ static class Binding { public RabbitMQDevServiceCfg(RabbitMQDevServicesBuildTimeConfig devServicesConfig) { this.devServicesEnabled = devServicesConfig.enabled().orElse(true); - this.imageName = devServicesConfig.imageName(); + this.imageName = devServicesConfig.imageName().orElseGet(() -> getDefaultImageNameFor("rabbitmq")); this.fixedExposedPort = devServicesConfig.port().orElse(0); this.fixedExposedHttpPort = devServicesConfig.httpPort().orElse(0); this.shared = devServicesConfig.shared(); diff --git a/extensions/smallrye-reactive-messaging-rabbitmq/deployment/src/main/resources/rabbitmq-devservice.properties b/extensions/smallrye-reactive-messaging-rabbitmq/deployment/src/main/resources/rabbitmq-devservice.properties new file mode 100644 index 0000000000000..662e5ea7fe640 --- /dev/null +++ b/extensions/smallrye-reactive-messaging-rabbitmq/deployment/src/main/resources/rabbitmq-devservice.properties @@ -0,0 +1 @@ +default.image=${rabbitmq.image} diff --git a/integration-tests/kafka-avro-apicurio2/src/main/resources/application.properties b/integration-tests/kafka-avro-apicurio2/src/main/resources/application.properties index da7eb6b7cfb26..b17213e7550f0 100644 --- a/integration-tests/kafka-avro-apicurio2/src/main/resources/application.properties +++ b/integration-tests/kafka-avro-apicurio2/src/main/resources/application.properties @@ -5,4 +5,4 @@ quarkus.log.category.\"org.apache.zookeeper\".level=WARN # enable health check quarkus.kafka.health.enabled=true -quarkus.apicurio-registry.devservices.image-name=quay.io/apicurio/apicurio-registry-mem:2.4.2.Final +quarkus.apicurio-registry.devservices.image-name=${apicurio-registry.image} diff --git a/integration-tests/kafka-json-schema-apicurio2/src/main/resources/application.properties b/integration-tests/kafka-json-schema-apicurio2/src/main/resources/application.properties index 69d4364f6b1c5..e1de76ce2307d 100644 --- a/integration-tests/kafka-json-schema-apicurio2/src/main/resources/application.properties +++ b/integration-tests/kafka-json-schema-apicurio2/src/main/resources/application.properties @@ -7,4 +7,4 @@ quarkus.native.resources.includes=json-schema.json # enable health check quarkus.kafka.health.enabled=true -quarkus.apicurio-registry.devservices.image-name=quay.io/apicurio/apicurio-registry-mem:2.4.2.Final +quarkus.apicurio-registry.devservices.image-name=${apicurio-registry.image} diff --git a/integration-tests/opentelemetry-jdbc-instrumentation/README.md b/integration-tests/opentelemetry-jdbc-instrumentation/README.md index d6f4da87fe7f7..af4aca9ba217e 100644 --- a/integration-tests/opentelemetry-jdbc-instrumentation/README.md +++ b/integration-tests/opentelemetry-jdbc-instrumentation/README.md @@ -25,7 +25,7 @@ You can also run tests with a specific database image, just set the following pa For example to run tests with the latest PostgreSQL database image, you can run the following command: ``` -mvn verify -Dtest-containers -Dstart-containers -Dpostgres.image=docker.io/postgres:latest +mvn verify -Dtest-containers -Dstart-containers -Dpostgres.image=docker.io/library/postgres:latest ``` Unfortunately booting DB2 is slow and needs to set a generous timeout, therefore the DB2 test is disabled by default. diff --git a/integration-tests/virtual-threads/jms-virtual-threads/src/main/resources/application.properties b/integration-tests/virtual-threads/jms-virtual-threads/src/main/resources/application.properties index fd8aab5e2348f..e4cacbb735b8d 100644 --- a/integration-tests/virtual-threads/jms-virtual-threads/src/main/resources/application.properties +++ b/integration-tests/virtual-threads/jms-virtual-threads/src/main/resources/application.properties @@ -5,4 +5,4 @@ mp.messaging.outgoing.prices-out.destination=prices smallrye.messaging.worker..max-concurrency=5 quarkus.artemis.devservices.enabled=true -quarkus.artemis.devservices.image-name=quay.io/artemiscloud/activemq-artemis-broker:1.0.25 +quarkus.artemis.devservices.image-name=${amqp.image}