Skip to content

fix: clear the CI build annotations - #294

Merged
devopvoid merged 5 commits into
mainfrom
worktree-ci-node24-actions
Sep 26, 2026
Merged

devopvoid merged 5 commits into
mainfrom
worktree-ci-node24-actions

Conversation

@devopvoid

@devopvoid devopvoid commented Sep 26, 2026 •

Copy link
Copy Markdown
Owner

Fixes the annotations CI attaches to every build (e.g. run 36268227980) and the libc++ warning flooding the Linux build logs. One commit per issue.

Node.js 20 deprecation (ci:)

GitHub forces actions that target Node.js 20 onto Node.js 24 and flags every job ("The following actions target Node.js 20 but are being forced to run on Node.js 24: actions/cache@v4, actions/upload-artifact@v4"). Every action still on Node.js 20 moves to its current Node.js 24 major:

Action From To
actions/cache v4 v6
actions/upload-artifact v4 v7
actions/download-artifact v4 v8
actions/setup-python v5 v7
actions/configure-pages v5 v6
actions/deploy-pages v4 v5
actions/upload-pages-artifact v4 v5 (wraps upload-artifact v7)

None of their breaking changes affect how the workflows use them: artifacts are downloaded by name/pattern (download-artifact v5 only changed download-by-ID paths), download-artifact v8 fails on hash mismatches instead of warning, and pip-install (removed in setup-python v7) is not used. checkout, setup-java, setup-node and git-cliff-action already run on Node.js 24.

[module] module not found: webrtc.java.media (build:)

webrtc.java exports dev.onvoid.webrtc.internal only to webrtc.java.media. That module depends on webrtc.java, so it is never observable while webrtc.java compiles, and javac warns on every build. The export is intentional and still takes effect at run time, so the lint is suppressed on the module declaration (@SuppressWarnings("module")) instead of for the whole build.

logToDebug at ERROR (fix:)

This came from an earlier test, not from LoggingTests. RTCDataChannelSendObserver reported an exception thrown by the observer with ExceptionDescribe, which prints Exception in thread "Thread-N" straight to native stderr without a newline and the stack trace to System.err. RTCDataChannelSendCompletionTests throws from an observer on purpose, so that prefix sat on an unterminated line until LoggingTests' native debug line landed on it, and setup-java's java problem matcher (^Exception in thread "(.*)" (.*): (.*)$) reported the result as an error.

The observer now hands the exception to the calling thread's uncaught exception handler, as the JVM does for an exception escaping a Java thread, so the report goes through System.err in one piece and applications can install their own handler. The two tests that throw on purpose capture the exception in a default handler and assert it arrived; against the previous native library they time out.

"Libc++ only supports Clang 21 and later" (ci:)

prepare-linux installed a Clang 20 development snapshot (llvmorg-20-init-9764) into /opt/clang, which the Linux toolchain files compile the natives with. The JNI code compiles against the libc++ headers installed by the WebRTC build, and those of branch-heads/7977 only support Clang 21 and later, so every Linux build printed the warning once per translation unit (294 times on linux_arm alone).

prepare-linux now installs the package that tools/clang/scripts/update.py pins on that branch (llvmorg-23-init-19482-g53d18800-1), the compiler WebRTC itself is built with. One Linux_x64 package serves all three Linux jobs, since the arm jobs cross-compile on x64 runners. A comment in the action notes that the pin has to follow webrtc.branch. No build uses -Werror, so any new warnings from the newer Clang would show up in the log rather than fail the build. This change can only be verified by CI; there is no Linux build here.

Testing

Tested locally on Windows x86_64: mvn -pl webrtc test passes (175 tests) with no output line matching any of setup-java's problem matchers, and RTCDataChannelSendCompletionTests passes under -Pjni-check with no FATAL ERROR in native method.

GitHub forces Node.js 20 actions onto Node.js 24 and flags each run with a
deprecation annotation. Bump cache to v6, upload-artifact to v7,
download-artifact to v8, setup-python to v7, configure-pages to v6,
deploy-pages to v5 and upload-pages-artifact to v5 (which wraps
upload-artifact v7). None of their breaking changes affect how these
workflows call them: artifacts are downloaded by name/pattern, not ID,
and pip-install is not used.
…l export

webrtc.java exports dev.onvoid.webrtc.internal only to webrtc.java.media.
That module depends on webrtc.java, so it is never observable while
webrtc.java compiles, and javac reports [module] module not found on every
build, which CI surfaces as an annotation. The export is intentional and
still takes effect at run time, so suppress the lint on the module
declaration rather than disabling it for the whole build.
…t exception handler

An exception thrown by an RTCDataChannelSendObserver was reported with
ExceptionDescribe. HotSpot prints its "Exception in thread" prefix
straight to native stderr, without a newline, and the stack trace to
System.err, so the report was split across two streams and the prefix was
left on an unterminated line. In CI the next native write, LoggingTests'
debug log line, landed on that line, and setup-java's java problem
matcher turned it into a "logToDebug at ERROR" error annotation.

Hand the exception to the calling thread's uncaught exception handler
instead, as the JVM does for an exception escaping a Java thread. The
whole report now goes through System.err, and applications can install
their own handler. The tests that throw from an observer on purpose now
capture the exception in a default handler and assert it arrived.
@devopvoid devopvoid changed the title ci: move actions still on Node.js 20 to their Node.js 24 majors fix: clear the CI build annotations Sep 26, 2026
prepare-linux installed a Clang 20 development snapshot (llvmorg-20-init)
for the Linux toolchain files. The JNI code compiles against the libc++
headers installed by the WebRTC build, and those of branch-heads/7977 only
support Clang 21 and later, so every Linux build printed "Libc++ only
supports Clang 21 and later" for each translation unit (294 times on
linux_arm alone).

Install the package pinned by tools/clang/scripts/update.py on that
branch (llvmorg-23-init-19482-g53d18800-1), the compiler WebRTC itself is
built with, and note that the pin has to follow webrtc.branch.
A duplicated "/*" before the getSignalingState declaration nested a
comment opener inside a block comment, so every native build warned
"'/*' within block comment [-Wcomment]" (once per platform in CI).
@devopvoid
devopvoid merged commit 93a926f into main Sep 26, 2026
1 check passed
@devopvoid
devopvoid deleted the worktree-ci-node24-actions branch September 26, 2026 22:30
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.

1 participant