From 26e7f698345c1f9c9927d6a5d2de2b4dad94b688 Mon Sep 17 00:00:00 2001 From: Sachin <52783123+sachinnn99@users.noreply.github.com> Date: Fri, 3 Apr 2026 13:49:28 +0530 Subject: [PATCH] fix: hide runtime defaults during Quarkus dev mode augmentation The existing augmentation detection only checks isRebuild() and KC_TEST_REBUILD, which are not set during Quarkus dev mode. This causes SRCFG01008 warnings when running from source with kc.log-console-output=default because runtime property values leak into the default value config source. Detect dev-mode augmentation by combining LaunchMode.DEVELOPMENT with disabled expressions, which precisely identifies when Quarkus probes for runtime defaults during dev-mode augmentation without matching dev-mode runtime or plain JUnit tests. Closes #47659 Signed-off-by: Sachin <52783123+sachinnn99@users.noreply.github.com> --- .../configuration/mappers/PropertyMappers.java | 6 ++++++ .../runtime/configuration/ConfigurationTest.java | 16 ++++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/quarkus/runtime/src/main/java/org/keycloak/quarkus/runtime/configuration/mappers/PropertyMappers.java b/quarkus/runtime/src/main/java/org/keycloak/quarkus/runtime/configuration/mappers/PropertyMappers.java index c8ddad00fee6..19f40a46ac1c 100644 --- a/quarkus/runtime/src/main/java/org/keycloak/quarkus/runtime/configuration/mappers/PropertyMappers.java +++ b/quarkus/runtime/src/main/java/org/keycloak/quarkus/runtime/configuration/mappers/PropertyMappers.java @@ -30,6 +30,7 @@ import org.keycloak.quarkus.runtime.configuration.NestedPropertyMappingInterceptor; import org.keycloak.quarkus.runtime.configuration.PersistedConfigSource; +import io.quarkus.runtime.LaunchMode; import io.smallrye.config.ConfigSourceInterceptorContext; import io.smallrye.config.ConfigValue; import io.smallrye.config.Expressions; @@ -89,6 +90,11 @@ public static ConfigValue getValue(ConfigSourceInterceptorContext context, Strin return ConfigValue.builder().withName(name).build(); } + // In Quarkus dev mode, also hide runtime defaults during augmentation probing (fixes #47659) + if (LaunchMode.current() == LaunchMode.DEVELOPMENT && !Expressions.isEnabled() && isKeycloakRuntime(name, mapper)) { + return ConfigValue.builder().withName(name).build(); + } + if (mapper == null) { return context.proceed(name); } diff --git a/quarkus/runtime/src/test/java/org/keycloak/quarkus/runtime/configuration/ConfigurationTest.java b/quarkus/runtime/src/test/java/org/keycloak/quarkus/runtime/configuration/ConfigurationTest.java index 1b3fb8aaa7ec..1564778d0697 100644 --- a/quarkus/runtime/src/test/java/org/keycloak/quarkus/runtime/configuration/ConfigurationTest.java +++ b/quarkus/runtime/src/test/java/org/keycloak/quarkus/runtime/configuration/ConfigurationTest.java @@ -39,6 +39,7 @@ import org.keycloak.spi.infinispan.CacheEmbeddedConfigProviderSpi; import org.keycloak.spi.infinispan.impl.embedded.DefaultCacheEmbeddedConfigProviderFactory; +import io.quarkus.runtime.LaunchMode; import io.smallrye.config.ConfigValue; import io.smallrye.config.Expressions; import io.smallrye.config.PropertiesConfigSource; @@ -108,6 +109,21 @@ public void testKeycloakConfPlaceholder() { assertNull(Expressions.withoutExpansion(() -> Configuration.getConfigValue("kc.log-level")).getValue()); } + @Test + public void testDevModeAugmentationHidesRuntimeDefaults() { + ConfigArgsConfigSource.setCliArgs("--log-console-output=default"); + createConfig(); + LaunchMode.set(LaunchMode.DEVELOPMENT); + try { + // runtime values should be hidden when Quarkus probes for defaults during dev-mode augmentation + assertNull(Expressions.withoutExpansion(() -> Configuration.getConfigValue("kc.log-console-output")).getValue()); + // but visible during normal dev-mode runtime (expressions enabled) + assertNotNull(Configuration.getConfigValue("kc.log-console-output").getValue()); + } finally { + LaunchMode.set(LaunchMode.NORMAL); + } + } + @Test public void testEnvVarAvailableFromPropertyNames() { putEnvVar("KC_VAULT_DIR", "/foo/bar");