Skip to content

fix: repair the release pipeline and publish the media module - #299

Merged
devopvoid merged 3 commits into
mainfrom
fix/release-ffmpeg-submodule
Sep 27, 2026
Merged

devopvoid merged 3 commits into
mainfrom
fix/release-ffmpeg-submodule

Conversation

@devopvoid

Copy link
Copy Markdown
Owner

The last Release run (36277592533) failed in "Prepare release", and the media module would not have been published even if it had got further. v0.18.0 predates the media module, so none of the CI changes since #291 had been through a release yet.

Changes

  • Check out the FFmpeg submodule before release:prepare. It runs clean verify over the whole reactor, which now includes the media module, whose CMake configure stops with "The FFmpeg submodule is not checked out". The failure came before any commit or tag, so nothing needs undoing. FFmpeg builds out of tree, so the submodule stays clean for the release plugin.
  • Publish webrtc-java-media with a release. The release jobs uploaded only webrtc-jni's natives, and publish-central deployed only .,webrtc.
    • Both release actions now also upload the media classifier jar, as natives-media-<platform>, which the existing natives-* download merges into the same flat directory.
    • publish-central checks that all seven media jars are present and deploys .,webrtc,webrtc-java-media.
    • The media pom gets the same attach-natives-all profile webrtc has, activated by natives.dir. It attaches the seven jars and turns off the CMake build and the host natives jar.
  • Docs: the media guide used a hard-coded 0.19.0-SNAPSHOT; it now uses {{ VERSION }} like the get-started guide.

Verification

  • The three changed workflow/action files parse as YAML.
  • I simulated publish-central's build locally: mvn package -pl .,webrtc,webrtc-java-media -DskipTests -Dnatives.dir=<dir> with placeholder jars for all 7 classifiers. It succeeded, and the media module ran attach-natives without any CMake or natives-jar execution.
  • The real workflow has not run yet. Before cutting 0.19.0, run Release with dryRun: this is the first time the media module goes through the release profile (sources, javadoc, signing).

release:prepare runs "clean verify" over the whole reactor, which now
includes the media module. Its CMake configure stops when the FFmpeg
submodule is missing, and the prepare-release job never checked it out,
so the release failed before any commit or tag was made.
The media module became part of the normal build, and snapshot builds
deploy it, but the release workflow never learned about it: the release
jobs uploaded only webrtc-jni's natives, and publish-central deployed
only the parent and webrtc. A release would have shipped without the
artifact the media guide tells applications to depend on.

The release jobs now also upload the media module's classifier jar,
under a name the natives-* download already merges into the same flat
directory. publish-central checks that every platform's media jar is
there and deploys the module alongside webrtc.

The media module gets the attach-natives-all profile webrtc already
has, activated the same way by natives.dir. It attaches the seven
downloaded jars and turns off the CMake build and the host natives jar,
so publish-central neither needs the FFmpeg submodule nor builds a
second, host-only natives jar.
The media guide spelled out 0.19.0-SNAPSHOT, which stops resolving once
0.19.0 is released and the snapshot moves on. It now uses {{ VERSION }}
like the get-started guide, which the release workflow keeps current.
@devopvoid
devopvoid merged commit c497ee7 into main Sep 27, 2026
11 checks passed
@devopvoid
devopvoid deleted the fix/release-ffmpeg-submodule branch September 27, 2026 12:54
SendableMetatype added a commit to EduGeyser/webrtc-java that referenced this pull request Oct 10, 2026
Brings in upstream 0.19.0 and the work after it: the FFmpeg-based
webrtc-java-media module with its native extension API (devopvoid#291, devopvoid#292,
devopvoid#299, devopvoid#300), encoded frame transforms (devopvoid#300), the remaining sender
encoding parameters and RTCConfiguration fields (devopvoid#316, devopvoid#317), custom
and hardware video codec factories (devopvoid#303, devopvoid#310 to devopvoid#315, devopvoid#318 to devopvoid#330),
the log sink and 32-bit ARM stats fixes, and upstream's CI rework
(devopvoid#294 to devopvoid#309).

Fork-side adaptations:
- The media module builds with Gradle, and only in the full variant:
  it needs audio and video. On Linux it links like the JNI library,
  since the Chromium sysroots no longer ship the static libgcc_eh.a.
  The sysroots carry stubs of glibc that no executable links against,
  so FFmpeg's configure links with lld and allows undefined symbols in
  shared libraries.
- The data channels variant leaves out the new media sources, the codec
  factory setup and the hardware codec headers, and skips the new tests
  that need audio or video.
- The module tests run on the module path with the test resources
  patched in, and the core tests open the internal package that
  NativeApi and NativeLoader are tested in.
- The WebRTC checkout keeps this fork's sync, with upstream's
  checkout_instrumented_libraries setting.
- CI builds all platforms from one reusable workflow, as upstream now
  does. The full variant also builds FFmpeg and tests the media module.
  The WebRTC and FFmpeg caches are saved as soon as their builds finish,
  and a release is prepared locally and pushed in one atomic push.
- The Maven poms and upstream's Dependabot setup stay out, and the
  README is the fork's own; the rename script now leaves it alone.
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