From 3724409c5ee57bbebf36ed745c82855a731942cd Mon Sep 17 00:00:00 2001 From: Steven Hawkins Date: Thu, 11 Sep 2025 12:17:01 -0400 Subject: [PATCH] fix: further refining when profile info is logged (#42483) closes: #42334 Signed-off-by: Steve Hawkins --- .../quarkus/deployment/KeycloakProcessor.java | 4 ---- .../cli/command/AbstractAutoBuildCommand.java | 12 +++++------- .../quarkus/runtime/cli/command/AbstractCommand.java | 7 +++++++ .../runtime/cli/command/AbstractUpdatesCommand.java | 2 +- .../configuration/mappers/PropertyMappers.java | 5 +++++ .../org/keycloak/it/cli/dist/FeaturesDistTest.java | 12 +++++++----- .../services/resources/KeycloakApplication.java | 2 +- 7 files changed, 26 insertions(+), 18 deletions(-) diff --git a/quarkus/deployment/src/main/java/org/keycloak/quarkus/deployment/KeycloakProcessor.java b/quarkus/deployment/src/main/java/org/keycloak/quarkus/deployment/KeycloakProcessor.java index 38f4571790d..9397b4dc988 100644 --- a/quarkus/deployment/src/main/java/org/keycloak/quarkus/deployment/KeycloakProcessor.java +++ b/quarkus/deployment/src/main/java/org/keycloak/quarkus/deployment/KeycloakProcessor.java @@ -251,10 +251,6 @@ class KeycloakProcessor { void configureProfile(KeycloakRecorder recorder) { Profile profile = getCurrentOrCreateFeatureProfile(); - if (!Environment.isRebuildCheck()) { - profile.logUnsupportedFeatures(); - } - // record the features so that they are not calculated again at runtime recorder.configureProfile(profile.getName(), profile.getFeatures()); } diff --git a/quarkus/runtime/src/main/java/org/keycloak/quarkus/runtime/cli/command/AbstractAutoBuildCommand.java b/quarkus/runtime/src/main/java/org/keycloak/quarkus/runtime/cli/command/AbstractAutoBuildCommand.java index dea9b4daa6e..a8b7d17ea86 100644 --- a/quarkus/runtime/src/main/java/org/keycloak/quarkus/runtime/cli/command/AbstractAutoBuildCommand.java +++ b/quarkus/runtime/src/main/java/org/keycloak/quarkus/runtime/cli/command/AbstractAutoBuildCommand.java @@ -135,13 +135,6 @@ public abstract class AbstractAutoBuildCommand extends AbstractCommand { } } - /** - * Controls whether the command actually starts the server - */ - protected boolean shouldStart() { - return true; - } - protected void doBeforeRun() { } @@ -156,4 +149,9 @@ public abstract class AbstractAutoBuildCommand extends AbstractCommand { return EnumSet.of(OptionCategory.IMPORT, OptionCategory.EXPORT); } + @Override + public boolean shouldStart() { + return true; + } + } diff --git a/quarkus/runtime/src/main/java/org/keycloak/quarkus/runtime/cli/command/AbstractCommand.java b/quarkus/runtime/src/main/java/org/keycloak/quarkus/runtime/cli/command/AbstractCommand.java index c5b1760770a..ed10ab01f5d 100644 --- a/quarkus/runtime/src/main/java/org/keycloak/quarkus/runtime/cli/command/AbstractCommand.java +++ b/quarkus/runtime/src/main/java/org/keycloak/quarkus/runtime/cli/command/AbstractCommand.java @@ -144,4 +144,11 @@ public abstract class AbstractCommand implements Callable { return false; } + /** + * Controls whether the command actually starts the server + */ + public boolean shouldStart() { + return false; + } + } diff --git a/quarkus/runtime/src/main/java/org/keycloak/quarkus/runtime/cli/command/AbstractUpdatesCommand.java b/quarkus/runtime/src/main/java/org/keycloak/quarkus/runtime/cli/command/AbstractUpdatesCommand.java index 8af7603e044..1515e094afd 100644 --- a/quarkus/runtime/src/main/java/org/keycloak/quarkus/runtime/cli/command/AbstractUpdatesCommand.java +++ b/quarkus/runtime/src/main/java/org/keycloak/quarkus/runtime/cli/command/AbstractUpdatesCommand.java @@ -36,7 +36,7 @@ public abstract class AbstractUpdatesCommand extends AbstractAutoBuildCommand { OptimizedMixin optimizedMixin = new OptimizedMixin(); @Override - protected boolean shouldStart() { + public boolean shouldStart() { return false; } 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 2047d015734..227fd5b9054 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 @@ -5,6 +5,7 @@ import io.smallrye.config.ConfigValue; import io.smallrye.config.Expressions; import jakarta.ws.rs.core.MultivaluedHashMap; import org.jboss.logging.Logger; +import org.keycloak.common.Profile; import org.keycloak.common.util.CollectionUtil; import org.keycloak.config.ConfigSupportLevel; import org.keycloak.config.Option; @@ -313,6 +314,10 @@ public final class PropertyMappers { PersistedConfigSource.getInstance().runWithDisabled(Environment::getCurrentOrCreateFeatureProfile); } else { Environment.getCurrentOrCreateFeatureProfile(); + if (!command.shouldStart()) { + // this will use the deferred logger, which means it may not be seen in some circumstances + Profile.getInstance().logUnsupportedFeatures(); + } } sanitizeMappers(buildTimeMappers, disabledBuildTimeMappers); diff --git a/quarkus/tests/integration/src/test/java/org/keycloak/it/cli/dist/FeaturesDistTest.java b/quarkus/tests/integration/src/test/java/org/keycloak/it/cli/dist/FeaturesDistTest.java index a97a17d30a1..bd31b7ecf5f 100644 --- a/quarkus/tests/integration/src/test/java/org/keycloak/it/cli/dist/FeaturesDistTest.java +++ b/quarkus/tests/integration/src/test/java/org/keycloak/it/cli/dist/FeaturesDistTest.java @@ -34,7 +34,9 @@ public class FeaturesDistTest { .filter(feature -> feature.getType() == Profile.Feature.Type.PREVIEW) .filter(feature -> { Set versions = Profile.getFeatureVersions(feature.getUnversionedKey()); - if (versions.size() == 1) return true; + if (versions.size() == 1) { + return true; + } return versions.iterator().next().getVersion() == feature.getVersion(); }) .map(Profile.Feature::getVersionedKey) @@ -58,12 +60,12 @@ public class FeaturesDistTest { assertPreviewFeaturesEnabled(cliResult); } - // Should enable "fips" together with all other "preview" features + // Should enable "docker" together with all other "preview" features @Test - @Launch({StartDev.NAME, "--features=preview,fips"}) - public void testEnablePreviewFeaturesAndFips(CLIResult cliResult) { + @Launch({StartDev.NAME, "--features=preview,docker"}) + public void testEnablePreviewFeaturesAndDocker(CLIResult cliResult) { + cliResult.assertStartedDevMode(); assertPreviewFeaturesEnabled(cliResult); - cliResult.assertError("Failed to configure FIPS."); } @Test diff --git a/services/src/main/java/org/keycloak/services/resources/KeycloakApplication.java b/services/src/main/java/org/keycloak/services/resources/KeycloakApplication.java index 2b17721f36c..7bda1864876 100644 --- a/services/src/main/java/org/keycloak/services/resources/KeycloakApplication.java +++ b/services/src/main/java/org/keycloak/services/resources/KeycloakApplication.java @@ -59,7 +59,6 @@ public abstract class KeycloakApplication extends Application { try { logger.debugv("PlatformProvider: {0}", platform.getClass().getName()); - Profile.getInstance().logUnsupportedFeatures(); loadConfig(); platform.onStartup(this::startup); @@ -71,6 +70,7 @@ public abstract class KeycloakApplication extends Application { } protected void startup() { + Profile.getInstance().logUnsupportedFeatures(); CryptoIntegration.init(KeycloakApplication.class.getClassLoader()); KeycloakApplication.sessionFactory = createSessionFactory();