Repository navigation
Conversation
There was a problem hiding this comment.
🟡 Changes recommended
Critical dependency, reactor packaging, and typeahead crash issues remain unresolved.
Once you've addressed the issues Copilot identified, you can request another Copilot review.
Pull request overview
Upgrades Account UI to PatternFly 6 and introduces the keycloak.v4 account theme.
Changes:
- Replaces
ACCOUNT_V3and the v3 theme with v4. - Adds a PF6 shared UI library and migrates Account UI components.
- Updates tests, localization resources, configuration, and tooling.
File summaries
| File | Description |
|---|---|
tests/base/src/test/java/org/keycloak/tests/admin/ServerInfoTest.java |
Verifies v4 theme metadata. |
tests/base/src/test/java/org/keycloak/tests/account/AccountConsoleDisabledTest.java |
Tests disabling Account v4. |
services/src/main/java/org/keycloak/services/resources/admin/info/ServerInfoAdminResource.java |
Filters v4 themes by feature state. |
server-spi/src/main/java/org/keycloak/theme/ThemeSelectorProvider.java |
Selects the v4 account theme. |
server-spi-private/src/main/java/org/keycloak/services/resource/AccountResourceProviderFactory.java |
Gates account resources on v4. |
quarkus/runtime/src/test/java/org/keycloak/quarkus/runtime/configuration/FeaturePropertyMappersTest.java |
Validates v4 feature configuration. |
misc/scripts/README.md |
Documents PF6 migration tooling. |
js/pom.xml |
Registers the PF6 shared module. |
js/package.json |
Adds PF6 shared-library builds. |
js/libs/ui-shared-pf6/vite.config.ts |
Configures the PF6 library build. |
js/libs/ui-shared-pf6/tsconfig.json |
Configures PF6 TypeScript sources. |
js/libs/ui-shared-pf6/src/vite-env.d.ts |
Adds Vite client types. |
js/libs/ui-shared-pf6/src/utils/useStoredState.ts |
Adds persistent state handling. |
js/libs/ui-shared-pf6/src/utils/useStorageItem.ts |
Synchronizes Web Storage. |
js/libs/ui-shared-pf6/src/utils/useSetTimeout.ts |
Manages component timers. |
js/libs/ui-shared-pf6/src/utils/useSetTimeout.test.ts |
Tests timer handling. |
js/libs/ui-shared-pf6/src/utils/useRequiredContext.ts |
Enforces required contexts. |
js/libs/ui-shared-pf6/src/utils/useRequiredContext.test.ts |
Tests required contexts. |
js/libs/ui-shared-pf6/src/utils/useFetch.ts |
Adds guarded fetching. |
js/libs/ui-shared-pf6/src/utils/isDefined.ts |
Adds a non-null guard. |
js/libs/ui-shared-pf6/src/utils/isDefined.test.ts |
Tests the non-null guard. |
js/libs/ui-shared-pf6/src/utils/getRuleValue.ts |
Extracts validation rules. |
js/libs/ui-shared-pf6/src/utils/generateId.ts |
Generates alert identifiers. |
js/libs/ui-shared-pf6/src/utils/errors.ts |
Extracts API error details. |
js/libs/ui-shared-pf6/src/utils/ErrorBoundary.tsx |
Provides shared error boundaries. |
js/libs/ui-shared-pf6/src/utils/createNamedContext.ts |
Creates named React contexts. |
js/libs/ui-shared-pf6/src/user-profile/utils.ts |
Provides profile utilities. |
js/libs/ui-shared-pf6/src/user-profile/UserProfileGroup.tsx |
Groups profile fields. |
js/libs/ui-shared-pf6/src/user-profile/UserProfileFields.tsx |
Renders metadata-driven fields. |
js/libs/ui-shared-pf6/src/user-profile/TextComponent.tsx |
Adds profile text fields. |
js/libs/ui-shared-pf6/src/user-profile/TextAreaComponent.tsx |
Adds profile text areas. |
js/libs/ui-shared-pf6/src/user-profile/SelectComponent.tsx |
Adds profile selects. |
js/libs/ui-shared-pf6/src/user-profile/OptionsComponent.tsx |
Adds option fields. |
js/libs/ui-shared-pf6/src/user-profile/MultiInputComponent.tsx |
Adds multivalued inputs. |
js/libs/ui-shared-pf6/src/user-profile/LocaleSelector.tsx |
Adds locale selection. |
js/libs/ui-shared-pf6/src/select/TypeaheadSelect.tsx |
Implements PF6 typeahead selection. |
js/libs/ui-shared-pf6/src/select/SingleSelect.tsx |
Implements PF6 single selection. |
js/libs/ui-shared-pf6/src/select/KeycloakSelect.tsx |
Exposes shared select variants. |
js/libs/ui-shared-pf6/src/scroll-form/ScrollPanel.tsx |
Adds scrollable form sections. |
js/libs/ui-shared-pf6/src/scroll-form/ScrollForm.tsx |
Adds jump-link forms. |
js/libs/ui-shared-pf6/src/scroll-form/scroll-form.module.css |
Styles scroll forms. |
js/libs/ui-shared-pf6/src/scroll-form/FormTitle.tsx |
Adds accessible form headings. |
js/libs/ui-shared-pf6/src/scroll-form/FormPanel.tsx |
Adds card-based form panels. |
js/libs/ui-shared-pf6/src/scroll-form/form-title.module.css |
Styles form headings. |
js/libs/ui-shared-pf6/src/masthead/Masthead.tsx |
Implements the PF6 masthead. |
js/libs/ui-shared-pf6/src/masthead/KeycloakDropdown.tsx |
Implements masthead dropdowns. |
js/libs/ui-shared-pf6/src/masthead/DefaultAvatar.tsx |
Adds the default avatar. |
js/libs/ui-shared-pf6/src/main.ts |
Exports the PF6 shared API. |
js/libs/ui-shared-pf6/src/icons/IconMapper.tsx |
Maps provider icons. |
js/libs/ui-shared-pf6/src/controls/TextControl.tsx |
Adds controlled text input. |
js/libs/ui-shared-pf6/src/controls/TextAreaControl.tsx |
Adds controlled text areas. |
js/libs/ui-shared-pf6/src/controls/table/TableToolbar.tsx |
Adds table search controls. |
js/libs/ui-shared-pf6/src/controls/table/PaginatingTableToolbar.tsx |
Adds paginated table controls. |
js/libs/ui-shared-pf6/src/controls/table/ListEmptyState.tsx |
Adds table empty states. |
js/libs/ui-shared-pf6/src/controls/SwitchControl.tsx |
Adds controlled switches. |
js/libs/ui-shared-pf6/src/controls/select-control/SingleSelectControl.tsx |
Adds controlled single selects. |
js/libs/ui-shared-pf6/src/controls/select-control/SelectControl.tsx |
Routes controlled select variants. |
js/libs/ui-shared-pf6/src/controls/PasswordInput.tsx |
Adds password reveal controls. |
js/libs/ui-shared-pf6/src/controls/PasswordControl.tsx |
Adds controlled password input. |
js/libs/ui-shared-pf6/src/controls/OrganizationTable.tsx |
Adds the organization table. |
js/libs/ui-shared-pf6/src/controls/NumberControl.tsx |
Adds controlled numeric input. |
js/libs/ui-shared-pf6/src/controls/KeycloakSpinner.tsx |
Adds a translated spinner. |
js/libs/ui-shared-pf6/src/controls/keycloak-text-area/KeycloakTextArea.tsx |
Adapts text-area handlers. |
js/libs/ui-shared-pf6/src/controls/HelpItem.tsx |
Adds help popovers. |
js/libs/ui-shared-pf6/src/controls/FormLabel.tsx |
Adds form labels and errors. |
js/libs/ui-shared-pf6/src/controls/FormErrorText.tsx |
Adds PF6 validation messages. |
js/libs/ui-shared-pf6/src/controls/FileUploadControl.tsx |
Adds controlled file uploads. |
js/libs/ui-shared-pf6/src/continue-cancel/ContinueCancelModal.tsx |
Migrates confirmation modals. |
js/libs/ui-shared-pf6/src/context/KeycloakContext.tsx |
Provides Keycloak environment context. |
js/libs/ui-shared-pf6/src/context/HelpContext.tsx |
Provides persisted help settings. |
js/libs/ui-shared-pf6/src/context/ErrorPage.tsx |
Adds the PF6 error page. |
js/libs/ui-shared-pf6/src/context/environment.ts |
Reads injected environment data. |
js/libs/ui-shared-pf6/src/buttons/FormSubmitButton.tsx |
Handles form submission state. |
js/libs/ui-shared-pf6/src/alerts/Alerts.tsx |
Provides shared alert management. |
js/libs/ui-shared-pf6/src/alerts/AlertPanel.tsx |
Renders PF6 toast alerts. |
js/libs/ui-shared-pf6/pom.xml |
Defines PF6 release packaging. |
js/libs/ui-shared-pf6/package.json |
Defines the PF6 npm package. |
js/apps/keycloak-server/README.md |
Documents enabling Account v4. |
js/apps/admin-ui/src/utils/useIsFeatureEnabled.ts |
Renames the account feature enum. |
js/apps/admin-ui/src/utils/useIsFeatureEnabled.test.ts |
Tests the v4 feature name. |
js/apps/admin-ui/src/realm-settings/themes/QuickTheme.tsx |
Makes generated themes inherit v4. |
js/apps/admin-ui/src/PageHeader.tsx |
Gates account links on v4. |
js/apps/account-ui/vite.config.ts |
Outputs the v4 account theme. |
js/apps/account-ui/test/resources.spec.ts |
Updates label-group assertions. |
js/apps/account-ui/test/realms/user-profile-realm.json |
Uses the v4 test theme. |
js/apps/account-ui/test/realms/resources-realm.json |
Uses the v4 test theme. |
js/apps/account-ui/test/realms/groups-realm.json |
Uses the v4 test theme. |
js/apps/account-ui/test/personal-info/personal-info.spec.ts |
Updates PF6 error assertions. |
js/apps/account-ui/src/verifiable-credentials/VerifiableCredentials.tsx |
Migrates PF utility classes. |
js/apps/account-ui/src/verifiable-credentials/UserAttributesDialog.tsx |
Migrates modal composition. |
js/apps/account-ui/src/verifiable-credentials/IssuedCredentialsModal.tsx |
Migrates credential modals. |
js/apps/account-ui/src/verifiable-credentials/CredentialRow.tsx |
Migrates the revoke modal. |
js/apps/account-ui/src/root/Root.tsx |
Uses the PF6 masthead API. |
js/apps/account-ui/src/root/PageNav.tsx |
Updates the PF breakpoint reference. |
js/apps/account-ui/src/resources/ShareTheResource.tsx |
Migrates modal and removable labels. |
js/apps/account-ui/src/resources/ResourcesTab.tsx |
Migrates labels and button icons. |
js/apps/account-ui/src/resources/PermissionRequest.tsx |
Migrates request modal and labels. |
js/apps/account-ui/src/resources/EditTheResource.tsx |
Migrates edit modal composition. |
js/apps/account-ui/src/components/page/Page.tsx |
Migrates page content components. |
js/apps/account-ui/src/components/datalist/EmptyRow.tsx |
Updates PF utility classes. |
js/apps/account-ui/src/applications/Applications.tsx |
Migrates application styling. |
js/apps/account-ui/src/account-security/SigningIn.tsx |
Migrates security-page classes. |
js/apps/account-ui/src/account-security/LinkedAccounts.tsx |
Updates PF utility classes. |
js/apps/account-ui/src/account-security/DeviceActivity.tsx |
Updates PF utility classes. |
js/apps/account-ui/src/account-security/AccountRow.tsx |
Migrates linked-account actions. |
js/apps/account-ui/package.json |
Switches Account UI to PF6 dependencies. |
js/apps/account-ui/maven-resources/theme/keycloak.v4/account/theme.properties |
Defines the v4 account theme. |
js/apps/account-ui/maven-resources/theme/keycloak.v4/account/messages/messages_en.properties |
Adds the English v4 description. |
js/apps/account-ui/maven-resources/theme/keycloak.v4/account/index.ftl |
Migrates loading spinner markup. |
js/apps/account-ui/maven-resources/theme/keycloak.v3/account/theme.properties |
Removes the v3 theme descriptor. |
js/apps/account-ui/maven-resources/META-INF/keycloak-themes.json |
Registers the v4 theme. |
js/apps/account-ui/maven-resources-community/theme/keycloak.v4/account/messages/messages_zh_Hant.properties |
Migrates Traditional Chinese messages. |
js/apps/account-ui/maven-resources-community/theme/keycloak.v4/account/messages/messages_vi.properties |
Migrates Vietnamese messages. |
js/apps/account-ui/maven-resources-community/theme/keycloak.v4/account/messages/messages_uk.properties |
Migrates Ukrainian messages. |
js/apps/account-ui/maven-resources-community/theme/keycloak.v4/account/messages/messages_tr.properties |
Migrates Turkish messages. |
js/apps/account-ui/maven-resources-community/theme/keycloak.v4/account/messages/messages_th.properties |
Adds Thai messages. |
js/apps/account-ui/maven-resources-community/theme/keycloak.v4/account/messages/messages_sv.properties |
Migrates Swedish messages. |
js/apps/account-ui/maven-resources-community/theme/keycloak.v4/account/messages/messages_sl.properties |
Adds Slovenian messages. |
js/apps/account-ui/maven-resources-community/theme/keycloak.v4/account/messages/messages_sk.properties |
Adds Slovak messages. |
js/apps/account-ui/maven-resources-community/theme/keycloak.v4/account/messages/messages_pt.properties |
Adds Portuguese messages. |
js/apps/account-ui/maven-resources-community/theme/keycloak.v4/account/messages/messages_pt_BR.properties |
Migrates Brazilian Portuguese messages. |
js/apps/account-ui/maven-resources-community/theme/keycloak.v4/account/messages/messages_no.properties |
Adds Norwegian messages. |
js/apps/account-ui/maven-resources-community/theme/keycloak.v4/account/messages/messages_lv.properties |
Adds Latvian messages. |
js/apps/account-ui/maven-resources-community/theme/keycloak.v4/account/messages/messages_lt.properties |
Adds Lithuanian messages. |
js/apps/account-ui/maven-resources-community/theme/keycloak.v4/account/messages/messages_ko.properties |
Migrates Korean messages. |
js/apps/account-ui/maven-resources-community/theme/keycloak.v4/account/messages/messages_ka.properties |
Migrates Georgian messages. |
js/apps/account-ui/maven-resources-community/theme/keycloak.v4/account/messages/messages_ja.properties |
Migrates Japanese messages. |
js/apps/account-ui/maven-resources-community/theme/keycloak.v4/account/messages/messages_id.properties |
Migrates Indonesian messages. |
js/apps/account-ui/maven-resources-community/theme/keycloak.v4/account/messages/messages_fr.properties |
Migrates French messages. |
js/apps/account-ui/maven-resources-community/theme/keycloak.v4/account/messages/messages_fi.properties |
Adds Finnish messages. |
js/apps/account-ui/maven-resources-community/theme/keycloak.v4/account/messages/messages_fa.properties |
Adds Persian messages. |
js/apps/account-ui/maven-resources-community/theme/keycloak.v4/account/messages/messages_es.properties |
Migrates Spanish messages. |
js/apps/account-ui/maven-resources-community/theme/keycloak.v4/account/messages/messages_de.properties |
Migrates German messages. |
js/apps/account-ui/maven-resources-community/theme/keycloak.v4/account/messages/messages_da.properties |
Adds Danish messages. |
js/apps/account-ui/maven-resources-community/theme/keycloak.v4/account/messages/messages_cs.properties |
Migrates Czech messages. |
js/apps/account-ui/maven-resources-community/theme/keycloak.v4/account/messages/messages_ca.properties |
Migrates Catalan messages. |
common/src/test/java/org/keycloak/common/ProfileTest.java |
Tests Account v4 metadata. |
common/src/main/java/org/keycloak/common/Profile.java |
Defines ACCOUNT_V4. |
Review details
Files not reviewed (1)
- js/pnpm-lock.yaml: Generated file
Suppressed comments (16)
js/apps/account-ui/maven-resources-community/theme/keycloak.v4/account/messages/messages_ca.properties:240
- The v4 theme description still identifies itself as v3, so users selecting themes see the wrong version.
js/apps/account-ui/maven-resources-community/theme/keycloak.v4/account/messages/messages_cs.properties:239 - The v4 theme description still identifies itself as version 3, so users selecting themes see the wrong version.
js/apps/account-ui/maven-resources-community/theme/keycloak.v4/account/messages/messages_de.properties:237 - The v4 theme description still identifies itself as v3, so users selecting themes see the wrong version.
js/apps/account-ui/maven-resources-community/theme/keycloak.v4/account/messages/messages_es.properties:240 - The v4 theme description still identifies itself as v3, so users selecting themes see the wrong version.
js/apps/account-ui/maven-resources-community/theme/keycloak.v4/account/messages/messages_fr.properties:237 - The v4 theme description still identifies itself as v3, so users selecting themes see the wrong version.
js/apps/account-ui/maven-resources-community/theme/keycloak.v4/account/messages/messages_id.properties:237 - The v4 theme description still identifies itself as v3, so users selecting themes see the wrong version.
js/apps/account-ui/maven-resources-community/theme/keycloak.v4/account/messages/messages_ja.properties:240 - The v4 theme description still identifies itself as v3, so users selecting themes see the wrong version.
js/apps/account-ui/maven-resources-community/theme/keycloak.v4/account/messages/messages_ka.properties:237 - The v4 theme description still identifies itself as v3, so users selecting themes see the wrong version.
js/apps/account-ui/maven-resources-community/theme/keycloak.v4/account/messages/messages_ko.properties:240 - The v4 theme description still identifies itself as v3, so users selecting themes see the wrong version.
js/apps/account-ui/maven-resources-community/theme/keycloak.v4/account/messages/messages_pt_BR.properties:240 - The v4 theme description still identifies itself as v3, so users selecting themes see the wrong version.
js/apps/account-ui/maven-resources-community/theme/keycloak.v4/account/messages/messages_sv.properties:237 - The v4 theme description still identifies itself as v3, so users selecting themes see the wrong version.
js/apps/account-ui/maven-resources-community/theme/keycloak.v4/account/messages/messages_tr.properties:237 - The v4 theme description still identifies itself as v3, so users selecting themes see the wrong version.
js/apps/account-ui/maven-resources-community/theme/keycloak.v4/account/messages/messages_uk.properties:250 - The v4 theme description still identifies itself as v3, so users selecting themes see the wrong version.
js/apps/account-ui/maven-resources-community/theme/keycloak.v4/account/messages/messages_vi.properties:239 - The v4 theme description still identifies itself as v3, so users selecting themes see the wrong version.
js/apps/account-ui/maven-resources-community/theme/keycloak.v4/account/messages/messages_zh_Hant.properties:237 - The v4 theme description still identifies itself as v3, so users selecting themes see the wrong version.
js/apps/account-ui/maven-resources/META-INF/keycloak-themes.json:4 - The theme rename leaves contributor documentation pointing to removed v3 resources:
docs/translation.md:138-139names the old directories, anddocs/guides/ui-customization/localization.adoc:34uses the old theme/key. Update those references tokeycloak.v4so localization instructions remain usable.
- Files reviewed: 130/157 changed files
- Comments generated: 5
- Review effort level: Balanced
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
There was a problem hiding this comment.
🟡 Changes recommended
PF6 modals lack accessible names, and the migration script has unresolved-file detection and apply-order issues.
Once you've addressed the issues Copilot identified, you can request another Copilot review.
Review details
Files not reviewed (1)
- js/pnpm-lock.yaml: Generated file
Suppressed comments (10)
Previously missed (10) — in code that hasn't changed since the last review.
js/apps/account-ui/src/resources/EditTheResource.tsx:67
- The PF6 composable modal is missing an accessible name; its
ModalHeadertitle is not associated automatically. Add an explicit accessible label matching the visible title.
js/apps/account-ui/src/resources/PermissionRequest.tsx:74 - The PF6 composable modal is missing an accessible name; its
ModalHeadertitle is not associated automatically. Add an explicit accessible label matching the visible title.
js/apps/account-ui/src/resources/ShareTheResource.tsx:125 - The PF6 composable modal is missing an accessible name; its
ModalHeadertitle is not associated automatically. Add an explicit accessible label matching the visible title.
js/apps/account-ui/src/verifiable-credentials/CredentialRow.tsx:52 - The PF6 composable modal does not infer an accessible name from
ModalHeader, so this revoke dialog is unnamed to assistive technology. Add an explicit accessible name.
js/apps/account-ui/src/verifiable-credentials/IssuedCredentialsModal.tsx:55 - The PF6 composable modal does not infer an accessible name from
ModalHeader, so this revoke dialog is unnamed to assistive technology. Add an explicit accessible name.
js/apps/account-ui/src/verifiable-credentials/IssuedCredentialsModal.tsx:155 - This PF6 composable modal has a visible header but no accessible name because the header is not automatically associated with the dialog. Add
aria-labelor connectaria-labelledbytoModalHeader.labelId.
js/apps/account-ui/src/verifiable-credentials/UserAttributesDialog.tsx:35 - After switching to the composable PF6 modal, the dialog has no accessible name because
ModalHeaderis not automatically associated withModal. Addaria-labelor a matchingaria-labelledby/labelIdpair.
misc/scripts/migrate-account-ui-pf5-to-pf6.mjs:165 - The residual scan skips
.ftland.properties, although Account themes contain PF class names inindex.ftlandkcDarkModeClassintheme.properties. Consequently--fail-on-unresolvedcan report success while PF5 markers remain in the migrated app.
misc/scripts/migrate-account-ui-pf5-to-pf6.mjs:303 - The class-name migration excludes the Account theme's
.ftltemplates and.propertiesfiles, so PF5 spinner/dark-mode classes in those files are left unchanged. Include both extensions in this app-wide updater step.
misc/scripts/migrate-account-ui-pf5-to-pf6.mjs:317 - The staged files are copied back before
--fail-on-unresolvedis enforced, so the documented--apply --fail-on-unresolvedcommand mutates the source tree and only then exits with failure. Gate apply mode on the residual check so a failed validation leaves the source untouched.
- Files reviewed: 132/159 changed files
- Comments generated: 2
- Review effort level: Balanced
There was a problem hiding this comment.
🟡 Changes recommended
Six unresolved moderate issues affect styling, accessibility, state persistence, and temporary-file cleanup.
Once you've addressed the issues Copilot identified, you can request another Copilot review.
Review details
Files not reviewed (1)
- js/pnpm-lock.yaml: Generated file
Suppressed comments (1)
js/libs/ui-shared-pf6/src/utils/useStorageItem.ts:48
defaultValueis read both when synchronizing the current key and by the storage-event handler, but it is absent from this dependency list. If the fallback changes, the hook continues exposing the previous fallback until another listed dependency changes; adddefaultValuehere.
- Files reviewed: 132/159 changed files
- Comments generated: 6
- Review effort level: Balanced
There was a problem hiding this comment.
🔵 Needs a closer look
Three moderate issues remain involving PF6 styling, missing test/CI wiring, and temporary-directory cleanup.
Review details
Files not reviewed (1)
- js/pnpm-lock.yaml: Generated file
Suppressed comments (3)
Previously missed (1) — in code that hasn't changed since the last review.
js/libs/ui-shared-pf6/package.json:22
- The three added Vitest files in this package are currently never run: this package exposes only
buildandlint, and the JavaScript CI workflow only targets the PF5 shared package. Please add a test script and include the PF6 workspace in CI so these tests can detect regressions.
js/apps/account-ui/src/applications/Applications.tsx:138
- The PF6 conversion in this header is incomplete: the action-header cell at line 145 still uses
pf-v5-u-pt-md, which is not provided by the PF6 stylesheet and leaves that column misaligned. Convert that remaining class as well.
misc/scripts/migrate-account-ui-pf5-to-pf6.mjs:236 - Each invocation creates a full staged copy under the OS temp directory but never removes it, including on failed migration steps. Repeated or automated runs will leak potentially large account-ui trees; wrap staging and execution in
try/finallyand recursively removetempRootin thefinallyblock.
- Files reviewed: 132/159 changed files
- Comments generated: 0 new
- Review effort level: Balanced
00e7ed1 to
9309802
Compare
There was a problem hiding this comment.
🟡 Changes recommended
One or more issues must be addressed before approval.
Once you've addressed the issues Copilot identified, you can request another Copilot review.
Review details
Files not reviewed (1)
- js/pnpm-lock.yaml: Generated file
Suppressed comments (2)
js/apps/account-ui/src/applications/Applications.tsx:138
- The PF6 migration is incomplete in this header row: the fourth
DataListCellstill usespf-v5-u-pt-mdat line 145, so that cell loses its padding when only PF6 CSS is loaded. Update that remaining class to the PF6 utility as well.
misc/scripts/migrate-account-ui-pf5-to-pf6.mjs:237 - The staged copy is never removed, including on successful dry runs, so every invocation leaves a full Account UI tree under the system temp directory. Wrap staging and report/apply processing in cleanup logic that recursively removes
tempRooton both success and failure.
- Files reviewed: 132/159 changed files
- Comments generated: 4
- Review effort level: Balanced
Unreported flaky test detectedIf the flaky tests below are affected by the changes, please review and update the changes accordingly. Otherwise, a maintainer should report the flaky tests prior to merging the PR. org.keycloak.testsuite.broker.KcOidcBrokerTest#loginWithExistingUserWithBruteForceEnabledKeycloak CI - Java Distribution IT (windows-latest - temurin - 17) |
e445f55 to
9118aee
Compare
There was a problem hiding this comment.
🔵 Needs a closer look
Human assessment is needed to evaluate cross-package release-version consistency and breakpoint-dependent logout failures.
2 open issues
1 resolved since last review
1 file not reviewed
js/pnpm-lock.yaml: Generated file
Review effort: Balanced
6cb216f to
926dc14
Compare
Migrate account-ui to PF6 using codemods, add ui-shared-pf6 for PF6 shared components, rename keycloak.v3 theme to keycloak.v4, and replace ACCOUNT_V3 with ACCOUNT_V4. Remove deprecated PF Modal/ChipGroup usage, update the loading spinner to PF6 classes, and add a migration script. Closes keycloak#52344 Signed-off-by: Erik Jan de Wit <erikjan.dewit@gmail.com>
Fix pnpm workspace alias and lockfile, restore ui-shared in the Maven reactor, guard typeahead keyboard handling, correct PF6 utility class, update v4 theme descriptions, and refresh localization docs. Closes keycloak#52344 Signed-off-by: Erik Jan de Wit <erikjan.dewit@gmail.com>
Set aria-label on composable modals so dialogs have an accessible name, and extend the PF6 migration script to scan theme files and skip apply when --fail-on-unresolved finds residual PF5 markers. Closes keycloak#52344 Signed-off-by: Erik Jan de Wit <erikjan.dewit@gmail.com>
Apply prettier fixes flagged by the Account UI CI lint job. Closes keycloak#52344 Signed-off-by: Erik Jan de Wit <erikjan.dewit@gmail.com>
Fix multiselect handling, typeahead accessibility, storage hook dependencies, migration temp cleanup, and wire PF6 shared library tests into CI. Signed-off-by: Erik Jan de Wit <erikjan.dewit@gmail.com>
Align Arquillian selectors with the PF6 masthead dropdown and PatternFly 6 class names so WebAuthn IT can sign out from the account console. Signed-off-by: Erik Jan de Wit <erikjan.dewit@gmail.com>
Harden typeahead keyboard handling, accessibility, migration validation, PF6 lint in CI, and WebAuthn alert locators. Signed-off-by: Erik Jan de Wit <erikjan.dewit@gmail.com>
Regenerate the lockfile so frozen installs succeed in CI, and address Copilot findings that would break auth cleanup, credential links, pagination, and WebAuthn alert locators. Signed-off-by: Erik Jan de Wit <erikjan.dewit@gmail.com>
Align useSetTimeout tests with the shared package so CI lint no longer fails on toBeCalled/toThrowError. Signed-off-by: Erik Jan de Wit <erikjan.dewit@gmail.com>
Port action-update subscription support from ui-shared so Account UI Root compiles after merging main. Closes keycloak#52344 Signed-off-by: Erik Jan de Wit <erikjan.dewit@gmail.com>
keycloak-js rejects with a plain { error, error_description } object;
pass it to getNetworkErrorMessage so TermsAndConditionsTest can find
"Access denied" after declining terms.
Closes keycloak#52344
Signed-off-by: Erik Jan de Wit <erikjan.dewit@gmail.com>
926dc14 to
c8ba697
Compare
There was a problem hiding this comment.
🟡 Changes recommended
Unresolved issues break exported account-theme colors and logo links, leave the mobile menu unnamed for screen readers, and make header tests target a hidden toggle at some widths.
4 open issues
1 file not reviewed
js/pnpm-lock.yaml: Generated file
Review effort: Balanced
| @Override | ||
| public void clickOptions() { | ||
| clickLink(options); | ||
| clickLink(isMobileLayout() ? mobileOptions : desktopOptions); |
There was a problem hiding this comment.
🔵 Needs a closer look
Unresolved regressions break logo navigation, remove the mobile menu’s accessible name, prevent Account Console theme colors from applying, and make logout tests select a hidden toggle at intermediate screen widths.
4 open issues
1 file not reviewed
js/pnpm-lock.yaml: Generated file
Review effort: Balanced
Restore toggleLabel / aria-label on the icon-only MenuToggle so the mobile options control has accessible name "Options", matching keycloak#54780. Signed-off-by: Erik Jan de Wit <erikjan.dewit@gmail.com>
There was a problem hiding this comment.
🔵 Needs a closer look
Unresolved PF6 migration issues break exported Account theme customizations and logo navigation, while a mismatched test breakpoint causes logout failures at widths of 768–991px.
3 open issues
1 resolved since last review
1 file not reviewed
js/pnpm-lock.yaml: Generated file
Review effort: Balanced
Add Liquibase and MigrateTo27_0_0 handling for Account Console themes removed by the PF6 port, plus upgrade/release notes. Closes keycloak#52344 Signed-off-by: Erik Jan de Wit <erikjan.dewit@gmail.com>
There was a problem hiding this comment.
🟡 Changes recommended
Unresolved PF6 regressions break logo navigation and keyboard access, prevent Quick Theme colors and fonts from applying to the Account Console, and cause logout interactions to fail at widths of 768–991px.
4 open issues
1 file not reviewed
js/pnpm-lock.yaml: Generated file
Review effort: Balanced
| To assist with migration, use the helper script: | ||
|
|
||
| [source,bash] | ||
| ---- | ||
| node misc/scripts/migrate-account-ui-pf5-to-pf6.mjs --app-path /path/to/your/theme | ||
| ---- | ||
|
|
||
| Run the script in dry-run mode first, review the generated report, and then rerun with `--apply` when ready. |



Summary
keycloak.v4account themeACCOUNT_V3withACCOUNT_V4and add@keycloak/keycloak-ui-shared-pf6so admin-ui can remain on PF5Modal,ChipGroup) to PF6 APIs and addmigrate-account-ui-pf5-to-pf6.mjsCloses #52344
Test plan
pnpm --filter @keycloak/keycloak-ui-shared-pf6 buildpnpm --filter keycloak-account-ui buildACCOUNT_V4enabled)