Skip to content

chore: bring 24.6 dependencies and CI up to date - #25815

Open
totally-not-ai[bot] wants to merge 8 commits into
24.6from
chore/bring-up-to-date-24.6
Open

totally-not-ai[bot] wants to merge 8 commits into
24.6from
chore/bring-up-to-date-24.6

Conversation

@totally-not-ai

@totally-not-ai totally-not-ai Bot commented Sep 18, 2026

Copy link
Copy Markdown
Contributor

Summary

The 24.6 branch has had no build maintenance since January, and its validation workflow could not report a result for pull requests from bots or outside contributors. This updates the dependencies, the CI workflow and the actions it uses, and fixes the tests and builds that the updates broke.

What changed

Behavior change (build tooling only): the default Node, npm and pnpm versions used by FrontendTools move up (Node v22.15.1v22.23.2, npm 10.9.210.9.8, pnpm 8.6.118.15.9). Applications that do not pin their own versions will download and use the new Node and npm. No runtime Flow API changed, so application code does not need changes.

CI:

  • The workflow now triggers on pull_request instead of pull_request_target, so pull request code no longer runs with the base branch definition and its secrets.
  • Removed the check-user-permission gate and the step that failed the build for anyone without write access.
  • Check secrets only runs for a pull request from this repository, because a fork cannot read TB_LICENSE. For a fork it now explains the situation and points at a maintainer re-run instead of failing without a reason.
  • Both Set TB License steps read TB_LICENSE from the step environment instead of inlining the secret into the shell script.
  • All actions are pinned by commit and moved to their current releases; the explicit Maven setup is dropped so the runner's own Maven is used; CI Node goes to 22.23.2 and pnpm to 8.15.9.
  • The push trigger is narrowed to this branch, and the edited pull request type is dropped so a title change no longer re-runs the whole build.

Dependencies, each staying inside the line this branch supports: Jackson 2.22.2, Jetty 12.0.39, Spring Boot 3.4.13, Hibernate Validator 8.0.5, jsoup 1.23.2, Javassist 3.33.0, slf4j 2.0.19, JAXB 4.0.9, Guava 33.7.1, commons-io 2.22.0, commons-lang3 3.20.0, Mockito 5.23.0. flow-server now asks for jspecify 1.0.1 to match what Guava 33.7.1 brings, otherwise dependency convergence failed for every integration test module and those shards ran no tests at all.

Build and test fixes that the updates made necessary:

  • Failsafe stays on 3.5.3. Version 3.6.0 selects tests in reactor modules whose web applications a shard has not built; such a module then starts its own server on the shared test port and blocks the modules after it. Surefire moves to 3.6.0, which the unit test shards pass.
  • The integration tests pass a Duration to scriptTimeout instead of calling setScriptTimeout(long, TimeUnit), which the Selenium in TestBench 9.5 no longer has. Without this, every module with such a test failed to compile and took its whole shard down.
  • The Spring integration tests use components 24.6.12, the newest version that is actually published; 24.6.13 does not exist.
  • vaadin-dev-server declares TypeScript 5.9, because the current TypeScript release no longer matches the API @rollup/plugin-typescript 11 expects and vite build failed.
  • DevToolsWrapper builds its CDP commands by hand over the raw connection, so it works with any Chrome version instead of depending on the generated per-version classes Selenium bundles. It is now character for character the same file that 24.7 carries, which keeps future cherry-picks clean.
  • Test expectations updated for jsoup 1.23 (no more spaces around inline child text) and for a timestamp check that compared a copied file against the wall clock.
  • Added scripts/update-frontend-dependencies.sh and a few .gitignore entries.

API Changes

com.vaadin.flow.testutil.DevToolsWrapper

// Added
public void close() // closes the CDP connection and drops the attached target sessions

com.vaadin.flow.server.frontend.FrontendTools

// Changed
- public static final String DEFAULT_NODE_VERSION = "v22.15.1"
+ public static final String DEFAULT_NODE_VERSION = "v22.23.2" // constant value only, signature unchanged
- public static final String DEFAULT_NPM_VERSION = "10.9.2"
+ public static final String DEFAULT_NPM_VERSION = "10.9.8" // constant value only, signature unchanged
- public static final String DEFAULT_PNPM_VERSION = "8.6.11"
+ public static final String DEFAULT_PNPM_VERSION = "8.15.9" // constant value only, signature unchanged

Test summary

  • The existing unit and integration test suites run again on this branch: modules compile against the Selenium that TestBench 9.5 ships, and the shards that previously failed dependency convergence or resolution now resolve and execute.
  • HTML output tests confirm the expected element markup under jsoup 1.23, including the drag image logged by the drag and drop test.
  • The jar copy test confirms that copying the same file twice leaves the file untouched, by comparing the file against its own timestamp instead of the wall clock.
  • The frontend build test keeps working with Mockito 5.23 through a mock-returning static mock instead of stubbing the logger by hand.

The branch has had no build maintenance since January, and its
validation workflow both ran pull request code with the base branch
workflow and refused to build anything a bot or an outside contributor
pushed, so the license-checker update opened against it never reported a
result.

CI:
- The workflow triggers on `pull_request` instead of
  `pull_request_target`, so pull request code no longer runs with the
  base branch definition and its secrets.
- Removed the `check-user-permission` gate and the step that failed the
  build for anyone without write access.
- The `Check secrets` step only runs for a pull request from this
  repository, because a fork cannot read `TB_LICENSE`, and it reads the
  secret through the step environment instead of inlining it.
- Pinned every action by commit and moved them to their current
  releases, dropped the explicit Maven setup so the runner's own Maven
  is used, and raised the CI Node to 22.23.2 and pnpm to 8.15.9.
- Narrowed the push trigger to this branch and dropped the `edited`
  pull request type, which re-ran the whole build on a title change.

Dependencies, each staying inside the line this branch supports:
- Libraries: Jackson 2.22.2, Jetty 12.0.39, Spring Boot 3.4.13,
  Hibernate Validator 8.0.5, jsoup 1.23.2, Javassist 3.33.0, slf4j
  2.0.19, JAXB 4.0.9, Guava 33.7.1, commons-io 2.22.0, commons-lang3
  3.20.0, Mockito 5.23.0 with the Byte Buddy 1.17.7 it expects, ASM
  9.10.1, Roaster 2.31.1, Nimbus JOSE+JWT 9.48 and the Eclipse runtime
  bundles.
- Build plugins: Surefire and Failsafe 3.6.0, Clean 3.5.0, WAR 3.5.1,
  Build Helper 3.6.2 and Properties 1.3.1.
- TestBench 9.5.8 with license-checker 2.3.3. The pair belongs together:
  TestBench 9.3 needs the license-checker 1.x API, so moving the checker
  alone would break every integration test. `com.vaadin:open` moves to
  8.5.0.5 with it, which is what the new checker brings and what the
  convergence rule requires.
- Default Node is v22.23.2 and npm 10.9.8. The default pnpm stays
  8.6.11 on purpose: the newer pnpm hoists differently, which makes the
  dev bundle build fail to resolve `react-router`, and the fix for that
  is the hoisted node-linker work that landed on 24.7.

Build and test fixes the updates made necessary:
- `jcip-annotations` is declared for tests, because TestBench 9.5 no
  longer brings it transitively and the tests use `@NotThreadSafe`.
- The license checker mock in `BuildFrontendUtilTest` no longer stubs
  the logger accessor, which is not public in license-checker 2.x, and
  returns mocks for the statics it does not stub.
- `ElementTest` expects the pretty printing of jsoup 1.23, which keeps a
  single inline child on the same line as its parent.
- `flow-webpush` clears the inherited `testListener` property. The root
  POM registers a JUnit 4 listener for every module and Surefire 3.6.0
  resolves that class before running any test, so the module failed with
  `ClassNotFoundException`; 3.5.2 ignored it. The module has no tests.
- `slf4j-simple` comes from `${slf4j.version}` in the two express build
  test modules instead of a literal 2.0.16.
- The Spring integration tests resolve components from platform 24.6.13
  instead of 24.6.7.
- `DevToolsWrapper` builds its CDP commands by hand instead of using
  Selenium's generated `vNNN` classes, which only work with the Chrome
  versions a Selenium release happens to bundle.

Tooling:
- Added `scripts/update-frontend-dependencies.sh` so the branch can join
  the weekly frontend update job. The frontend package versions are left
  to that job.
- Added `.pnpm-store/` to `.gitignore`.
…he script

`DevToolsWrapper` is now the same file 24.7 carries, character for
character. The copy taken from 24.9 brought that branch's commercial
license header into a repository that is Apache 2.0, and it passed an
explicit client configuration to `SeleniumCdpConnection.create` where
the one-argument call does the same thing. Keeping the two branches
identical also keeps future cherry-picks clean.

The default pnpm goes back to 8.15.9. The dev bundle failure that the
previous commit blamed on it came from frontend state left behind by
builds of other branches in the same working tree: with a clean tree the
express build modules build with 8.15.9, and the version constant is not
what selects the binary anyway, since the branch installs pnpm through
`npx --yes pnpm`. The workflow and the constant now agree again.

Both `Set TB License` steps read `TB_LICENSE` from the step environment
instead of having it interpolated into the shell script, which is how
main does it.

`Check secrets` explains the fork case instead of being skipped for it.
A fork cannot read the secret, so the test jobs will fail on the license
check, and the step now says so and points at a maintainer re-run rather
than leaving the failure unexplained.

The `testListener` override in `flow-webpush` is gone. The module has no
tests, Surefire never resolves the listener for it, and the failure that
prompted the override came from test classes another branch had left in
the module's target directory.
The integration test shards run a reactor that contains modules whose web
applications the shard has not built, and they rely on Failsafe finding
no tests in those modules. Failsafe 3.6.0 selects tests there anyway, so
such a module starts its own server on the shared test port and runs
tests against web applications that do not exist in the shard. The
server then holds the port while the modules after it run, and those
talk to the wrong deployment: one shard reported a missing `index.html`,
another could not connect to the test port at all.

Surefire stays on 3.6.0, which the unit test shards pass.
This branch ran 3.5.2 before the update, so the earlier wording read as
if 3.5.3 were the version being kept. The 24.x branches in this update
all pin the same 3.5.3 so their shard results can be compared, and main
runs 3.5.6 with the same Surefire pairing once the shards are green.
The dev tools frontend build resolved whatever TypeScript npm offered,
and the current release no longer matches the API that
`@rollup/plugin-typescript` 11 expects, so `vite build` failed with
`Cannot read properties of undefined (reading 'ES2015')`. Declaring the
5.9 line fixes the resolution, as it already does on 24.7 and later.
@github-actions

github-actions Bot commented Sep 19, 2026

Copy link
Copy Markdown
Contributor

Test Results

1 012 files   - 150  1 012 suites   - 150   52m 43s ⏱️ - 16m 45s
7 495 tests  -  97  7 441 ✅  -  55  53 💤  - 3  1 ❌ +1 
7 676 runs   - 251  7 617 ✅  - 201  58 💤  - 7  1 ❌ +1 

For more details on these failures, see this check.

Results for commit d725f41. ± Comparison against base commit ca792bc.

♻️ This comment has been updated with latest results.

Three things the updates in this branch left behind:

The integration tests called `Timeouts.setScriptTimeout(long, TimeUnit)`,
which the Selenium that TestBench 9.5 brings no longer has, so every
module carrying such a test failed to compile and took its whole shard
with it. They now pass a `Duration`, like the later branches do.

The Spring integration tests asked for components 24.6.13. Platform
patch releases do not always republish the component artifacts, and that
version exists for none of them, so dependency resolution failed. 24.6.12
is the newest that does exist.

`JarContentsManagerTest` compared the copied file against the wall clock,
which only held when no clock tick fell between the copy and the check.
It now compares the file against its own timestamp.
Shorter than the ChronoUnit form and the same as the sibling tests that
were converted earlier, and it drops an import from each file.
Guava 33.7.1 brings jspecify 1.0.1 while flow-server asked for 1.0.0, so
the dependency convergence rule failed for every integration test module
that depends on the test utilities, and those shards never ran a test.
flow-server now asks for 1.0.1 as well; the two releases differ only in
documentation.

The drag and drop test compared the logged element against the jsoup 22
rendering, which put spaces around the text of an inline child. jsoup
1.23 does not, so the expectation matches what later branches already
expect.
@Artur-

Artur- commented Sep 20, 2026

Copy link
Copy Markdown
Member

@babel/types is missing

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants