Skip to content

Bootstrap / jQuery Update & Fluid Infusion Removal#2915

Merged
Naenyn merged 70 commits into
uPortal-Project:masterfrom
Naenyn:remove_fluid
Apr 23, 2026
Merged

Bootstrap / jQuery Update & Fluid Infusion Removal#2915
Naenyn merged 70 commits into
uPortal-Project:masterfrom
Naenyn:remove_fluid

Conversation

@Naenyn

@Naenyn Naenyn commented Dec 24, 2025

Copy link
Copy Markdown
Contributor

This is a WIP PR that handles the Bootstrap & jQuery updates for uPortal. This PR also includes the removal of Fluid Infusion.

@Naenyn Naenyn marked this pull request as draft December 24, 2025 22:34
@ChristianMurphy ChristianMurphy requested a review from Copilot March 11, 2026 19:20

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.

Pull request overview

This WIP PR updates uPortal’s front-end stack for Bootstrap/jQuery changes and removes Fluid Infusion by replacing legacy Fluid-based UI components with “modern” vanilla/Bootstrap 5 equivalents.

Changes:

  • Removed multiple legacy Fluid-based JavaScript components and introduced modern replacements (no-Fluid).
  • Updated many JSP/XSL templates from Bootstrap 3-era markup/classes and jQuery patterns to Bootstrap 5-compatible equivalents.
  • Switched skin build tooling from LESS to SCSS (Sass) and adjusted Gradle/WebJar resource staging.

Reviewed changes

Copilot reviewed 147 out of 193 changed files in this pull request and generated 17 comments.

Show a summary per file
File Description
uPortal-webapp/src/main/webapp/media/skins/common/javascript/uportal/up-showHideToggle.js Removed legacy Fluid-based show/hide toggle component.
uPortal-webapp/src/main/webapp/media/skins/common/javascript/uportal/up-rating-option.js Removed legacy rating modal implementation (Fluid/old Bootstrap patterns).
uPortal-webapp/src/main/webapp/media/skins/common/javascript/uportal/up-parameter-editor.js Removed legacy Fluid ParameterEditor implementation.
uPortal-webapp/src/main/webapp/media/skins/common/javascript/uportal/up-layout-selector.js Removed legacy Fluid layout selector implementation.
uPortal-webapp/src/main/webapp/media/skins/common/javascript/uportal/up-layout-persistence.js Removed legacy Fluid layout persistence implementation.
uPortal-webapp/src/main/webapp/media/skins/common/javascript/uportal/up-favorite.js Removed legacy jQuery-based favorites implementation.
uPortal-webapp/src/main/webapp/media/skins/common/javascript/uportal/up-entity-registry.js Removed legacy Fluid entity registry implementation.
uPortal-webapp/src/main/webapp/media/skins/common/javascript/uportal/up-config-lightbox.js Removed legacy jQuery config lightbox implementation.
uPortal-webapp/src/main/webapp/media/skins/common/javascript/uportal/up-autocomplete.js Removed legacy Fluid autocomplete implementation.
uPortal-webapp/src/main/webapp/media/skins/common/javascript/uportal/prevent-component-reload.js Added stub script placeholder for removed instrumentation.
uPortal-webapp/src/main/webapp/media/skins/common/javascript/uportal/modern-util.js Added utility helpers intended to replace Fluid-dependent helpers.
uPortal-webapp/src/main/webapp/media/skins/common/javascript/uportal/modern-url-provider.js Replaced legacy tooltip-conflict code with a modern URL provider and compatibility wrapper.
uPortal-webapp/src/main/webapp/media/skins/common/javascript/uportal/modern-show-hide-toggle.js Added modern replacement for show/hide toggle with a backward-compatible up.showHideToggle.
uPortal-webapp/src/main/webapp/media/skins/common/javascript/uportal/modern-portlet-registry.js Added modern portlet registry implementation using fetch and a small event system.
uPortal-webapp/src/main/webapp/media/skins/common/javascript/uportal/modern-layout-preferences-persistence.js Added modern layout persistence implementation using fetch and DOM updates.
uPortal-webapp/src/main/webapp/media/skins/common/javascript/uportal/modern-flyout-nav.js Added modern flyout navigation implementation (hover interactions).
uPortal-webapp/src/main/webapp/media/skins/common/javascript/uportal/modern-favorite.js Added modern favorites manager (fetch-based) with compatibility functions.
uPortal-webapp/src/main/webapp/media/skins/common/javascript/uportal/modern-config-lightbox.js Added modern config lightbox implementation using fetch + Bootstrap Modal.
uPortal-webapp/src/main/webapp/media/skins/common/javascript/uportal/flyout-nav.js Removed legacy Fluid flyout navigation implementation.
uPortal-webapp/src/main/webapp/media/skins/common/css/modern-uploader.css Added Bootstrap-compatible uploader CSS replacement.
uPortal-webapp/src/main/webapp/media/skins/common/css/modern-portlet-list.css Added portlet list layout CSS to match expected gallery/list rendering.
uPortal-webapp/src/main/webapp/media/skins/common/css/modern-pager.css Added Bootstrap-compatible pager CSS replacement.
uPortal-webapp/src/main/webapp/media/skins/common/common_skin.xml Switched skin resources to modern JS/CSS set and removed legacy includes.
uPortal-webapp/src/main/webapp/WEB-INF/jsp/Translator/translator.jsp Updated markup/classes to Bootstrap 5 card/forms/buttons.
uPortal-webapp/src/main/webapp/WEB-INF/jsp/TenantManager/tenantManager.jsp Converted panels/pull-right to cards/float utilities and button sizing.
uPortal-webapp/src/main/webapp/WEB-INF/jsp/TenantManager/tenantDetails.jsp Updated validation/Bootstrap classes and layout grid usage.
uPortal-webapp/src/main/webapp/WEB-INF/jsp/TenantManager/report.jsp Converted panels to cards and labels to badges; updated float utilities.
uPortal-webapp/src/main/webapp/WEB-INF/jsp/TenantManager/addTenant.jsp Updated form layout and validation classes for Bootstrap 5.
uPortal-webapp/src/main/webapp/WEB-INF/jsp/Statistics/reportList.jsp Updated portlet wrapper classes to Bootstrap 5 card structure.
uPortal-webapp/src/main/webapp/WEB-INF/jsp/Statistics/reportGraph.jsp Updated portlet wrapper classes and modernized jQuery event binding.
uPortal-webapp/src/main/webapp/WEB-INF/jsp/SqlQuery/results.jsp Updated portlet wrapper classes and replaced column filter widgets with SearchPanes.
uPortal-webapp/src/main/webapp/WEB-INF/jsp/SqlQuery/googleLineChart.jsp Updated portlet wrapper classes to Bootstrap 5 card structure.
uPortal-webapp/src/main/webapp/WEB-INF/jsp/SqlQuery/googleColumnChart.jsp Updated portlet wrapper classes to Bootstrap 5 card structure.
uPortal-webapp/src/main/webapp/WEB-INF/jsp/SqlQuery/config.jsp Updated portlet wrapper classes and form layout for Bootstrap 5.
uPortal-webapp/src/main/webapp/WEB-INF/jsp/SessionTimeout/body.jsp Updated modal dismiss attribute to data-bs-dismiss and button classes.
uPortal-webapp/src/main/webapp/WEB-INF/jsp/Search/searchRest.jsp Updated tab markup to Bootstrap 5 nav/tab patterns and float utilities.
uPortal-webapp/src/main/webapp/WEB-INF/jsp/Search/searchLauncher.jsp Updated search launcher markup and modernized submit handler binding.
uPortal-webapp/src/main/webapp/WEB-INF/jsp/Search/search.jsp Updated search portlet card layout and modernized submit handler binding.
uPortal-webapp/src/main/webapp/WEB-INF/jsp/PortletError/maintenance.jsp Replaced Bootstrap 3 jumbotron with Bootstrap 5 equivalent container styling.
uPortal-webapp/src/main/webapp/WEB-INF/jsp/PortletError/generic.jsp Converted legacy widget titlebar to Bootstrap 5 card and breadcrumb classes.
uPortal-webapp/src/main/webapp/WEB-INF/jsp/PortletError/detailed.jsp Converted to Bootstrap 5 card layout and updated show/hide toggle initialization.
uPortal-webapp/src/main/webapp/WEB-INF/jsp/PopularPortlets/listPortlets.jsp Updated card markup, label styling, pager class, and SearchPanes integration.
uPortal-webapp/src/main/webapp/WEB-INF/jsp/Marketplace/portlet/view.jsp Updated panel markup/buttons/grid classes and modernized click handlers.
uPortal-webapp/src/main/webapp/WEB-INF/jsp/Invoker/sitemap.jsp Reduced UI error surface area and changed logging behavior on sitemap failure.
uPortal-webapp/src/main/webapp/WEB-INF/jsp/Invoker/logout.jsp Updated button sizing from btn-xs to btn-sm.
uPortal-webapp/src/main/webapp/WEB-INF/jsp/Invoker/login.jsp Modernized login markup and button styling.
uPortal-webapp/src/main/webapp/WEB-INF/jsp/Invoker/greeting.jsp Updated responsive utility classes to Bootstrap 5 equivalents.
uPortal-webapp/src/main/webapp/WEB-INF/jsp/ImportExportPortlet/export.jsp Converted portlet wrapper to card layout and updated form layout classes.
uPortal-webapp/src/main/webapp/WEB-INF/jsp/ImportExportPortlet/delete.jsp Converted portlet wrapper to card layout and modernized submit handler binding.
uPortal-webapp/src/main/webapp/WEB-INF/jsp/GoogleAnalytics/config.jsp Updated labels to Bootstrap 5 form-label styling.
uPortal-webapp/src/main/webapp/WEB-INF/jsp/FragmentAdministration/index.jsp Converted portlet wrapper to card layout and updated nav list classes.
uPortal-webapp/src/main/webapp/WEB-INF/jsp/Favorites/view_zero.jsp Updated float utility class to Bootstrap 5 equivalent.
uPortal-webapp/src/main/webapp/WEB-INF/jsp/Favorites/view.jsp Updated navbar markup to Bootstrap 5 and modernized event binding.
uPortal-webapp/src/main/webapp/WEB-INF/jsp/Favorites/edit_zero.jsp Updated alert close button to Bootstrap 5 btn-close and dismiss attributes.
uPortal-webapp/src/main/webapp/WEB-INF/jsp/Favorites/edit.jsp Updated alert close button and tooltip data attributes; modernized event binding.
uPortal-webapp/src/main/webapp/WEB-INF/jsp/DynamicRespondrSkin/skinConfig.jsp Updated Bootstrap form classes and modernized jQuery submission handling.
uPortal-webapp/src/main/webapp/WEB-INF/jsp/Directory/mobileDirectory.jsp Removed Fluid reference and modernized binding/unbinding patterns.
uPortal-webapp/src/main/webapp/WEB-INF/jsp/Directory/directory.jsp Converted portlet wrapper to card structure and updated label styling.
uPortal-webapp/src/main/webapp/WEB-INF/jsp/BackgroundPreference/viewBackgroundPreference.jsp Updated layout utility classes and modernized event binding.
uPortal-webapp/src/main/webapp/WEB-INF/jsp/Activity/activity.jsp Updated spelling in comment and modernized event binding; converted wrapper to card.
uPortal-webapp/src/main/webapp/WEB-INF/flows/user-manager/viewUserDetails.jsp Updated markup for Bootstrap 5 and ensured impersonation POST uses preventDefault + DOM submit.
uPortal-webapp/src/main/webapp/WEB-INF/flows/user-manager/viewPermissions.jsp Updated wrapper to card layout and replaced filter widgets with SearchPanes.
uPortal-webapp/src/main/webapp/WEB-INF/flows/user-manager/selectUserAction.jsp Converted panel list to card list and updated wrapper/content classes.
uPortal-webapp/src/main/webapp/WEB-INF/flows/user-manager/confirmRemove.jsp Converted wrapper/content to Bootstrap 5 card layout.
uPortal-webapp/src/main/webapp/WEB-INF/flows/update-password/success.jsp Converted wrapper/content to Bootstrap 5 card layout.
uPortal-webapp/src/main/webapp/WEB-INF/flows/update-password/enterPassword.jsp Converted wrapper/content to Bootstrap 5 card layout.
uPortal-webapp/src/main/webapp/WEB-INF/flows/toggle-resources-aggregation/toggle-aggregation.jsp Converted wrapper/content to Bootstrap 5 card layout.
uPortal-webapp/src/main/webapp/WEB-INF/flows/snooper/snooper.jsp Converted wrapper/content to Bootstrap 5 card layout.
uPortal-webapp/src/main/webapp/WEB-INF/flows/self-edit-account/viewAccountDetails.jsp Converted wrapper/content to Bootstrap 5 card layout.
uPortal-webapp/src/main/webapp/WEB-INF/flows/self-edit-account/success.jsp Converted wrapper/content to Bootstrap 5 card layout.
uPortal-webapp/src/main/webapp/WEB-INF/flows/self-edit-account/enterPassword.jsp Converted wrapper/content to Bootstrap 5 card layout.
uPortal-webapp/src/main/webapp/WEB-INF/flows/self-edit-account/editLocalAccount.jsp Switched ParameterEditor usage to modern editor and updated form submit binding.
uPortal-webapp/src/main/webapp/WEB-INF/flows/reset-user-layout/reset-result.jsp Converted wrapper/content to Bootstrap 5 card layout.
uPortal-webapp/src/main/webapp/WEB-INF/flows/reset-user-layout/reset-confirm.jsp Converted wrapper/content to Bootstrap 5 card layout.
uPortal-webapp/src/main/webapp/WEB-INF/flows/reset-password/invalidLoginToken.jsp Converted wrapper/content to Bootstrap 5 card layout.
uPortal-webapp/src/main/webapp/WEB-INF/flows/reset-password/createPasswordSuccess.jsp Converted wrapper/content to Bootstrap 5 card layout.
uPortal-webapp/src/main/webapp/WEB-INF/flows/reset-password/createPassword.jsp Converted wrapper/content to Bootstrap 5 card layout.
uPortal-webapp/src/main/webapp/WEB-INF/flows/reset-my-layout/reset-begin.jsp Converted wrapper/content to Bootstrap 5 card layout.
uPortal-webapp/src/main/webapp/WEB-INF/flows/portlet-manager/confirmRemove.jsp Converted wrapper/content to Bootstrap 5 card layout.
uPortal-webapp/src/main/webapp/WEB-INF/flows/portal-administration/administrativeLinks.jsp Converted wrapper/content to Bootstrap 5 card layout.
uPortal-webapp/src/main/webapp/WEB-INF/flows/permissions-administration/showActivity.jsp Converted wrapper/content to card layout and replaced filter widgets with SearchPanes.
uPortal-webapp/src/main/webapp/WEB-INF/flows/permissions-administration/selectTarget.jsp Converted wrapper/content to card layout and migrated to ModernAutocomplete.
uPortal-webapp/src/main/webapp/WEB-INF/flows/permissions-administration/permissionLookupResult.jsp Converted wrapper/content to card layout and replaced filter widgets with SearchPanes.
uPortal-webapp/src/main/webapp/WEB-INF/flows/permissions-administration/listOwners.jsp Converted wrapper/content to card layout; migrated to ModernAutocomplete; updated form layout.
uPortal-webapp/src/main/webapp/WEB-INF/flows/permissions-administration/listActivities.jsp Converted wrapper/content to Bootstrap 5 card layout.
uPortal-webapp/src/main/webapp/WEB-INF/flows/permissions-administration/deletePermission.jsp Converted wrapper/content to card layout and modernized click binding.
uPortal-webapp/src/main/webapp/WEB-INF/flows/locale-selector/selectLocale.jsp Converted wrapper/content to card layout and updated form label classes.
uPortal-webapp/src/main/webapp/WEB-INF/flows/local-login/loginForm.jsp Converted wrapper/content to card layout and updated form grid classes.
uPortal-webapp/src/main/webapp/WEB-INF/flows/groups-manager/selectGroupType.jsp Converted panel list to card list and updated wrapper/content classes.
uPortal-webapp/src/main/webapp/WEB-INF/flows/fragment-audit/fragment-audit.jsp Converted wrapper/content to card layout and updated hidden template markup.
uPortal-webapp/src/main/webapp/WEB-INF/flows/fragment-administration/select-fragment-form.jsp Converted wrapper/content to card layout and updated form layout utilities.
uPortal-webapp/src/main/webapp/WEB-INF/flows/forgot-password/sendTokenSuccess.jsp Converted wrapper/content to card layout.
uPortal-webapp/src/main/webapp/WEB-INF/flows/forgot-password/forgotPassword.jsp Converted wrapper/content to card layout and updated label styling.
uPortal-webapp/src/main/webapp/WEB-INF/flows/exit-fragment-administration/logout-view.jsp Updated form layout utilities and button styling.
uPortal-webapp/src/main/webapp/WEB-INF/flows/edit-portlet/configMode.jsp Converted wrapper/content to card layout and added explicit save/cancel navigation buttons.
uPortal-webapp/src/main/webapp/WEB-INF/flows/edit-portlet/chooseType.jsp Converted wrapper/content to card layout and updated form labels.
uPortal-webapp/src/main/webapp/WEB-INF/flows/edit-portlet/choosePortlet.jsp Converted wrapper/title/content to card markup and updated grid utility classes.
uPortal-webapp/src/main/webapp/WEB-INF/flows/edit-permission/editPermission.jsp Converted wrapper/content to card layout and shortened ready handler usage.
uPortal-webapp/src/main/webapp/WEB-INF/flows/edit-group/viewGroupPermissions.jsp Converted wrapper/content to card layout and replaced filter widgets with SearchPanes.
uPortal-webapp/src/main/webapp/WEB-INF/flows/edit-group/reviewGroup.jsp Converted wrapper/content to Bootstrap 5 card layout.
uPortal-webapp/src/main/webapp/WEB-INF/flows/edit-group/editDetails.jsp Converted wrapper/content to card layout and updated labels.
uPortal-webapp/src/main/webapp/WEB-INF/flows/edit-group/confirmRemove.jsp Converted wrapper/content to Bootstrap 5 card layout.
uPortal-webapp/src/main/webapp/WEB-INF/flows/edit-account/editLocalAccount.jsp Switched ParameterEditor usage to modern editor and updated label styling.
uPortal-webapp/src/main/webapp/WEB-INF/flows/cache-manager/confirm-flush.jsp Converted wrapper/content to Bootstrap 5 card layout.
uPortal-webapp/src/main/webapp/WEB-INF/flows/cache-manager/confirm-flush-all.jsp Converted wrapper/content to Bootstrap 5 card layout.
uPortal-webapp/src/main/webapp/WEB-INF/flows/cache-manager/cache-statistics.jsp Converted wrapper/content to Bootstrap 5 card layout.
uPortal-webapp/src/main/webapp/WEB-INF/flows/cache-manager/cache-list.jsp Converted wrapper/content to Bootstrap 5 card layout and updated table sizing classes.
uPortal-webapp/src/main/webapp/WEB-INF/flows/attribute-swapper/attributesForm.jsp Converted wrapper/content to Bootstrap 5 card layout and updated label classes.
uPortal-webapp/src/main/resources/properties/portal.properties Enabled flyout menus by default.
uPortal-webapp/src/main/resources/layout/theme/respondr/respondr.xsl Removed Fluid global wiring, updated event listeners, and adjusted fragment admin UI hooks.
uPortal-webapp/src/main/resources/layout/theme/respondr/regions.xsl Updated Bootstrap 5 classes and modal/hover behavior wiring.
uPortal-webapp/src/main/resources/layout/theme/respondr/navigation.xsl Updated dropdown/toggle attributes and responsive utility classes for Bootstrap 5.
uPortal-webapp/src/main/resources/layout/theme/respondr/content.xsl Updated dropdown/modal attributes for Bootstrap 5 and modernized favorites click binding.
uPortal-webapp/package.json Replaced LESS build script with Sass SCSS compilation for skin build.
uPortal-webapp/build.gradle Updated WebJar dependencies and skin aggregation pipeline; added bootstrap webjar; SCSS compilation integration.
uPortal-utils/uPortal-utils-core/build.gradle Updated resource-server dependency exclusions to avoid logging/spring conflicts.
uPortal-api/uPortal-api-internal/src/main/java/org/apereo/portal/portlets/groupadmin/GroupAdministrationHelper.java Added argument validation and guardrails around GroupService lookup.
package.json Migrated stylelint setup from LESS to SCSS.
gradle.properties Updated project version suffix and bumped Bootstrap/resource-server versions.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread uPortal-webapp/src/main/webapp/WEB-INF/jsp/Translator/translator.jsp Outdated
Comment thread uPortal-webapp/src/main/webapp/WEB-INF/jsp/Favorites/edit.jsp Outdated
Comment thread uPortal-webapp/src/main/webapp/WEB-INF/jsp/Invoker/sitemap.jsp Outdated
Comment thread uPortal-webapp/src/main/resources/properties/portal.properties Outdated
Comment thread uPortal-webapp/build.gradle
Comment thread uPortal-webapp/build.gradle Outdated

@bjagg bjagg left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Reviewing ahead of the resource-server 1.5.1 release (happening shortly) which will unblock CI.

CI blocker — resolved soon

All 5 CI jobs fail with Could not find org.jasig.resourceserver:resource-server-core:1.5.1-SNAPSHOT. Once resource-server 1.5.1 is published to Maven Central, update gradle.properties to reference the release version and CI will go green.

Copilot review triage

Went through all 27 Copilot inline comments and Bill's 5 responses. Here's my assessment of what's left to address, categorized by severity.

Fix before merge (runtime breakage risk)

1. modern-favorite.js.json() on potentially empty POST responses (5 instances)

The legacy jQuery $.ajax calls for addFavorite, removeFavorite, and moveFavorite didn't parse the response body. The new fetch + response.json() will throw a SyntaxError on empty or non-JSON responses, breaking favorites functionality silently.

Fix: either check response.headers.get('content-type') before parsing, or use response.text() and only parse if non-empty:

const text = await response.text();
return text ? JSON.parse(text) : null;

This is the most likely runtime bug in the PR.

2. modern-config-lightbox.js — Content-Type header on GET requests

headers: { 'Content-Type': 'application/json' }

Setting Content-Type on GET is semantically incorrect (no body) and triggers unnecessary CORS preflights in cross-origin scenarios. Simple fix: remove the header from GET requests.

Fix before merge (visual bugs)

3. btn-close buttons with × inner content (3-4 locations)

regions.xsl and Favorites/edit.jsp have:

<button class="btn-close">&times;</button>

Bootstrap 5's btn-close renders the X via CSS background-image. The inner × creates a duplicate/overlapping close icon. Bill noted "partially false positive, added a11y tweak" on one instance — but the remaining instances still have the × content.

Fix: remove &times; from btn-close buttons. If the a11y concern is screen reader labeling, use aria-label="Close" instead (which BS5 btn-close already supports).

Document before merge (behavior change)

4. portal.properties flyout default flipped from false to true

This changes the default navigation mode for all new/existing deployments. Worth a line in the PR description and release notes so adopters aren't surprised by a nav behavior change when they upgrade.

Deferred (Bill already noted, agree)

  • modern-portlet-registry.js array-as-map pattern — "significant refactor for code that is currently working" — agree, defer
  • modern-layout-preferences-persistence.js array encoding — Bill confirmed server-side expects key[] format — not an issue
  • build.gradle hardcoded Bootstrap version — Bill says it's functioning correctly, and the SCSS compilation needs a specific path structure — fine for now
  • modern-portlet-registry.js fetch(null) constructor — only matters if portletListUrl isn't configured, which would be a setup error
  • sitemap.jsp silent failure — low-traffic page, defer
  • modern-util.js id parsing — edge case, defer

Summary

Three code fixes (favorites .json(), config-lightbox Content-Type, btn-close × content) and one documentation item (flyout default). All are small — the favorites fix is the most important since it could break a commonly-used feature at runtime.

Once resource-server 1.5.1 is published and gradle.properties is updated, CI should go green assuming no compile issues. At that point, with these fixes applied, this PR is ready to merge.

Huge effort — 193 files, Bootstrap 3→5, jQuery update, Fluid removal, and modern vanilla JS replacements for all the old Fluid-based components. Well done.

Naenyn pushed a commit that referenced this pull request Apr 22, 2026
…y() (#2943)

Newer Guava (pulled in transitively via resource-server 1.5.x)
annotates com.google.common.base.Function.apply() with @CheckReturnValue,
so ErrorProne now flags the two call sites that discard the return:

  uPortal-rendering/src/main/java/org/apereo/portal/portlet/container/
  cache/LimitingTeeWriter.java:86
  cache/LimitingTeeOutputStream.java:84

The callback's Function<T,?> return was always intentionally discarded
(the sole caller returns null), so the fix is to name the captured
result 'unused' — the convention ErrorProne recognizes as "intentional
discard" — with @SuppressWarnings("unused") to also silence the
compiler's own unused-variable lint.

Master CI passes today because its resource-server 1.3.1 pin pulls an
older Guava without the annotation; the check triggers on branches
that have bumped to resource-server 1.5.x+ (e.g. #2915
'Bootstrap / jQuery Update & Fluid Infusion Removal', which fails all
5 CI jobs on this exact error). Landing the fix on master lets that
branch rebase and go green.

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Naenyn pushed a commit that referenced this pull request Apr 22, 2026
uPortal pins springVersion=4.3.30.RELEASE explicitly, but resource-server
1.5.x transitively depends on Spring 5.x. Without an exclusion, a build
bumping resource-server to 1.5.x ends up with both Spring versions on
the classpath and javac resolves org.springframework.web.util.UriUtils
against the Spring 5 API — where encodePathSegment(String, String) no
longer declares 'throws UnsupportedEncodingException'. The catch clause
in uPortal-utils-core's Util.encodePathSegment() then becomes unreachable
and compilation fails with:

  Util.java:143: error: exception UnsupportedEncodingException is never
  thrown in body of corresponding try statement

This is exactly the CI failure on #2537 (Renovate's resource-server
1.3.1 → 1.5.2 bump), and the fix originates from @Naenyn's #2915 where
this exclusion is part of a larger 193-file PR. Landing it independently
on master unblocks #2537 and any other branch bumping resource-server,
without coupling to the Bootstrap/jQuery work in #2915.

Exclusion policy mirrors what #2915 applies:
  - resource-server-api:  exclude spring-jcl (module-level) and all slf4j
  - resource-server-utils: exclude all of org.springframework and all slf4j

The narrower exclusion on resource-server-api reflects that it's a
smaller artifact; the broader exclusion on resource-server-utils
prevents the full Spring 5 web stack from riding along.

Verified locally:
  - master + this change (resourceServerVersion=1.3.1):
    :uPortal-utils:uPortal-utils-core:compileJava BUILD SUCCESSFUL
  - master + this change + resourceServerVersion=1.5.2 (simulated):
    :uPortal-utils:uPortal-utils-core:compileJava BUILD SUCCESSFUL
    (the Util.java error goes away)

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@Naenyn Naenyn marked this pull request as ready for review April 22, 2026 18:39
@Naenyn

Naenyn commented Apr 22, 2026

Copy link
Copy Markdown
Contributor Author

Finally a green build! Huzzah!

@bjagg bjagg left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

This is a huge effort! Thank you for sticking with it. Approved. We can polish any additional items in follow-up PRs.

@Naenyn Naenyn merged commit 3c1a445 into uPortal-Project:master Apr 23, 2026
5 checks passed
bjagg added a commit that referenced this pull request Apr 29, 2026
* docs: add v5.17.3 to CHANGES and HISTORY

Problem: v5.17.3 was just released. CHANGES.md (operator-relevant
upgrade notes) and HISTORY.md (per-version release index) hadn't been
updated for this release. CHANGES had been silent since v5.15.2 and
HISTORY hadn't been touched since v5.2.

Goal: capture the operator-facing impact of 5.17.3 (Bill's frontend
modernization affects customized skins) and start re-tracking the
5.17.x line in HISTORY.

Changes:
- docs/CHANGES.md: add a `## v5.17.3` block under "Next Release"
  flagging the Bootstrap/jQuery/Fluid Infusion modernization (#2915)
  and warning operators that customized skins will need updating
  (LESS → SCSS, BS3/4 class names → BS5, no more Fluid library).
- docs/HISTORY.md: add a `### 5.17` section listing 5.17.0–5.17.3
  with their release dates and tag links. Note above the section
  that 5.3–5.16 are not enumerated; deferred to the GitHub releases
  index. Backfill of those versions is out of scope here.

Notes: v5.17.3 itself is already cut and tagged — these are docs
catching up. Per the project's PR-first policy, sending this through
review rather than committing direct to master.

* docs: backfill v5.17.2 Java 11 floor in CHANGES.md

Problem: CHANGES.md is for deployment-impacting changes (Java/Servlet
bumps, DDL changes, mandatory property/cache additions). v5.17.2
bumped sourceCompatibility from 1.8 to 11 in build.gradle (commit
ebe7297 by @Naenyn, 2026-03-05) which means deployers on Java 8
can no longer run this release. That impact never made it into
CHANGES.md when v5.17.2 shipped.

Goal: backfill the v5.17.2 entry so deployers reading CHANGES.md know
they need a JVM upgrade before consuming v5.17.2 or later.

Changes:
- docs/CHANGES.md: insert a `## v5.17.2` block between v5.17.3 and
  v5.15.2 calling out the Java 11 floor.

Notes: chose to add this to the existing v5.17.3 docs PR rather than
spinning a separate one — they're both backfill work for the same
file and ship together cleanly.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants