8000 Upgrade Account UI to PatternFly 6 by edewit · Pull Request #52374 · keycloak/keycloak · GitHub
[go: up one dir, main page]

Skip to content

Upgrade Account UI to PatternFly 6 - #52374

Open
edewit wants to merge 13 commits into
keycloak:mainfrom
edewit:issue-52344-account-pf-v6
Open

edewit wants to merge 13 commits into
keycloak:mainfrom
edewit:issue-52344-account-pf-v6

Conversation

@edewit
@edewit edewit commented Sep 3, 2026
Copy link
Copy Markdown
Contributor

Summary

  • Upgrade Account UI to PatternFly 6 and introduce the keycloak.v4 account theme
  • Replace ACCOUNT_V3 with ACCOUNT_V4 and add @keycloak/keycloak-ui-shared-pf6 so admin-ui can remain on PF5
  • Migrate deprecated PF components (Modal, ChipGroup) to PF6 APIs and add migrate-account-ui-pf5-to-pf6.mjs

Closes #52344

Test plan

  • pnpm --filter @keycloak/keycloak-ui-shared-pf6 build
  • pnpm --filter keycloak-account-ui build
  • Account UI Playwright suite (46/46 passed against local server with ACCOUNT_V4 enabled)
  • CI green on PR checks

Copilot AI balanced review requested due to automatic review settings September 3, 2026 13:37
@edewit
edewit requested review from a team as code owners September 3, 2026 13:37
@stianst stianst added the status/hold PR should not be merged. On hold for later. label Sep 3, 2026
@stianst stianst added this to the 27.0 Development Milestone milestone Sep 3, 2026
Copilot AI left a comment
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 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_V3 and 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-139 names the old directories, and docs/guides/ui-customization/localization.adoc:34 uses the old theme/key. Update those references to keycloak.v4 so 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.

Comment thread js/apps/account-ui/package.json Resolved
Comment thread js/pom.xml Resolved
Copilot AI review requested due to automatic review settings September 4, 2026 09:26
Copilot AI left a comment
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 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 ModalHeader title 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 ModalHeader title 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 ModalHeader title 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-label or connect aria-labelledby to ModalHeader.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 ModalHeader is not automatically associated with Modal. Add aria-label or a matching aria-labelledby/labelId pair.
    misc/scripts/migrate-account-ui-pf5-to-pf6.mjs:165
  • The residual scan skips .ftl and .properties, although Account themes contain PF class names in index.ftl and kcDarkModeClass in theme.properties. Consequently --fail-on-unresolved can 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 .ftl templates and .properties files, 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-unresolved is enforced, so the documented --apply --fail-on-unresolved command 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

Copilot AI review requested due to automatic review settings September 4, 2026 10:44
Copilot AI left a comment
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 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

  • defaultValue is 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; add defaultValue here.
  • Files reviewed: 132/159 changed files
  • Comments generated: 6
  • Review effort level: Balanced

Copilot AI review requested due to automatic review settings September 4, 2026 10:50
Copilot AI left a comment
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔵 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 build and lint, 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/finally and recursively remove tempRoot in the finally block.
  • Files reviewed: 132/159 changed files
  • Comments generated: 0 new
  • Review effort level: Balanced

Copilot AI review requested due to automatic review settings September 4, 2026 13:50
@edewit
edewit force-pushed the issue-52344-account-pf-v6 branch from 00e7ed1 to 9309802 Compare September 4, 2026 13:50
Copilot AI left a comment
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 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 DataListCell still uses pf-v5-u-pt-md at 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 tempRoot on both success and failure.
  • Files reviewed: 132/159 changed files
  • Comments generated: 4
  • Review effort level: Balanced

Comment thread js/apps/account-ui/package.json Resolved
Comment thread js/libs/ui-shared-pf6/package.json Resolved
@keycloak-github-bot keycloak-github-bot Bot left a comment
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Unreported flaky test detected, please review

@keycloak-github-bot
Copy link
Copy Markdown

Unreported flaky test detected

If 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#loginWithExistingUserWithBruteForceEnabled

Keycloak CI - Java Distribution IT (windows-latest - temurin - 17)

org.opentest4j.AssertionFailedError: Expected page 'login-error' to be loaded, but currently on page 'null' after timeout
	at org.keycloak.testsuite.pages.AbstractPage.waitForPage(AbstractPage.java:62)
	at org.keycloak.testsuite.pages.AbstractPage.assertCurrent(AbstractPage.java:47)
	at java.base/java.lang.reflect.Method.invoke(Method.java:569)
	at org.jboss.arquillian.graphene.proxy.GrapheneProxyHandler.invokeReal(GrapheneProxyHandler.java:143)
...

Report flaky test

Copilot AI left a comment
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot encountered an error and was unable to review this pull request. You can try again by re-requesting a review.

Copilot AI review requested due to automatic review settings September 7, 2026 10:32
@edewit
edewit force-pushed the issue-52344-account-pf-v6 branch from e445f55 to 9118aee Compare September 7, 2026 10:32
Copilot AI balanced review requested due to automatic review settings November 5, 2026 14:33
Copilot AI left a comment
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔵 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

Copilot AI balanced review requested due to automatic review settings November 12, 2026 09:24
@edewit
edewit force-pushed the issue-52344-account-pf-v6 branch from 6cb216f to 926dc14 Compare November 12, 2026 09:24
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>
@edewit
edewit force-pushed the issue-52344-account-pf-v6 branch from 926dc14 to c8ba697 Compare November 12, 2026 09:26
Copilot AI left a comment
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 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);
Copilot AI balanced review requested due to automatic review settings November 12, 2026 09:32
Copilot AI left a comment
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔵 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>
Copilot AI balanced review requested due to automatic review settings November 12, 2026 10:10
Copilot AI left a comment
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔵 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>
Copilot AI balanced review requested due to automatic review settings November 12, 2026 10:42
Copilot AI left a comment
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 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

Comment on lines +251 to +258
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.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

flaky-test status/hold PR should not be merged. On hold for later.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Upgrade Account UI to PatternFly 6

3 participants

0