diff --git a/.github/actions/publish/action.yml b/.github/actions/publish/action.yml index 146abb304..fb237ef0c 100644 --- a/.github/actions/publish/action.yml +++ b/.github/actions/publish/action.yml @@ -16,7 +16,7 @@ inputs: required: false default: '' - skip-publishing: + skip-upload: description: 'Build, sign and bundle everything, but upload nothing.' required: false default: 'false' @@ -70,8 +70,8 @@ runs: shell: bash # natives.dir makes webrtc and webrtc-java-media attach the jars of all - # platforms instead of the host's. skipPublishing suppresses both the - # bundling and the upload. + # platforms instead of the host's. skipUpload still stages and bundles the + # release, but stops before uploading it. # # Since Maven 3.10, credentials are only sent to the origins of the # repository with the server's id. The server is "central", which is also @@ -81,11 +81,11 @@ runs: - name: Deploy env: PROFILES: ${{ inputs.profiles }} - SKIP_PUBLISHING: ${{ inputs.skip-publishing }} + SKIP_UPLOAD: ${{ inputs.skip-upload }} run: > mvn -B deploy -pl .,webrtc,webrtc-java-media -DskipTests -Dmaven.repository.credentialScope=id ${PROFILES:+-P$PROFILES} -Dnatives.dir="$PWD/natives" - -DskipPublishing="$SKIP_PUBLISHING" + -DskipUpload="$SKIP_UPLOAD" shell: bash diff --git a/.github/actions/test-natives/action.yml b/.github/actions/test-natives/action.yml index e4ab563db..84b5ad76a 100644 --- a/.github/actions/test-natives/action.yml +++ b/.github/actions/test-natives/action.yml @@ -15,6 +15,11 @@ inputs: description: 'The Maven profile that selects the classifier.' required: true + version: + description: 'Optional local project version override for a release dry run.' + required: false + default: '' + java-version: description: 'The Java version.' required: true @@ -72,6 +77,13 @@ runs: distribution: ${{ inputs.java-distribution }} architecture: ${{ inputs.java-architecture }} + - name: Set the release dry-run version + if: inputs.version != '' + env: + RELEASE_VERSION: ${{ inputs.version }} + run: mvn -B versions:set -DnewVersion="$RELEASE_VERSION" -DgenerateBackupPoms=false + shell: bash + - name: Install the natives into the local repository run: | # The root pom has no parent, so its first is the project's. diff --git a/.github/workflows/platforms.yml b/.github/workflows/platforms.yml index 1da41415e..f8f19cfd3 100644 --- a/.github/workflows/platforms.yml +++ b/.github/workflows/platforms.yml @@ -17,6 +17,10 @@ on: description: "The commit, branch or tag to build. Empty for the one that triggered the caller." type: string default: '' + version: + description: "Optional local project version override for a release dry run." + type: string + default: '' retention-days: description: "How long the natives artifacts are kept." type: number @@ -78,6 +82,13 @@ jobs: if: runner.os == 'macOS' uses: ./.github/actions/prepare-macos + - name: Set the release dry-run version + if: inputs.version != '' + env: + RELEASE_VERSION: ${{ inputs.version }} + run: mvn -B versions:set -DnewVersion="$RELEASE_VERSION" -DgenerateBackupPoms=false + shell: bash + - name: Maven build uses: ./.github/actions/build with: @@ -149,3 +160,4 @@ jobs: profile: ${{ matrix.platform.classifier }} java-distribution: ${{ matrix.platform.java-distribution }} java-architecture: ${{ matrix.platform.java-architecture }} + version: ${{ inputs.version }} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 880e6135c..bf1f1a848 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -34,6 +34,7 @@ jobs: contents: write outputs: release_tag: ${{ steps.release-version.outputs.tag }} + release_version: ${{ steps.release-version.outputs.version }} release_body: ${{ steps.git-cliff.outputs.content }} steps: # The full history, for git-cliff. @@ -154,6 +155,7 @@ jobs: with: ref: ${{ !inputs.dryRun && needs.prepare-release.outputs.release_tag || '' }} retention-days: 7 + version: ${{ inputs.dryRun && needs.prepare-release.outputs.release_version || '' }} publish-central: name: Publish to Maven Central @@ -191,18 +193,17 @@ jobs: env: RELEASE_TAG: ${{ needs.prepare-release.outputs.release_tag }} run: | + version="${RELEASE_TAG#v}" if [ "${{ inputs.dryRun }}" == "true" ]; then - version=$(mvn -B -q -N help:evaluate -Dexpression=project.version -DforceStdout) - else - version="${RELEASE_TAG#v}" + # Exercise release bundling rather than the snapshot deployment path. + mvn -B versions:set -DnewVersion="$version" -DgenerateBackupPoms=false fi echo "Version to publish: $version" echo "version=$version" >> "$GITHUB_OUTPUT" - # skipPublishing suppresses both the bundling and the upload, so a dry run - # still builds, signs and attaches everything without anything leaving the - # runner. As a second line of defence the Central credentials are replaced by + # skipUpload stages and bundles the release, then stops before uploading. + # As a second line of defence the Central credentials are replaced by # a placeholder during a dry run: should the upload ever happen regardless, it # fails on authentication instead of publishing a release. Signing does run, so # the GPG passphrase stays intact. @@ -215,7 +216,11 @@ jobs: with: version: ${{ steps.release-version.outputs.version }} profiles: release - skip-publishing: ${{ inputs.dryRun }} + skip-upload: ${{ inputs.dryRun }} + + - name: Verify the dry-run deployment bundle exists + if: ${{ inputs.dryRun }} + run: test -s target/central-publishing/central-bundle.zip - name: Summarize what would have been published if: ${{ inputs.dryRun }} @@ -239,7 +244,7 @@ jobs: with: name: deployment-bundle-dry-run path: | - target/central-*/** + target/central-publishing/central-bundle.zip webrtc/target/central-*/** webrtc/target/*.jar webrtc/target/*.asc @@ -247,7 +252,7 @@ jobs: webrtc-java-media/target/*.jar webrtc-java-media/target/*.asc natives/*.asc - if-no-files-found: warn + if-no-files-found: error retention-days: 7 publish-release: diff --git a/CHANGELOG.md b/CHANGELOG.md index 8b41a4e32..1a6f9105a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,105 @@ All notable changes to this project will be documented in this file. +## [0.20.0] - 2026-10-16 + +### Features +- Decode VP9 spatial layers with VA-API by @devopvoid in [#388](https://github.com/devopvoid/webrtc-java/pull/388) +- Encode H.264 and H.265 temporal layers with VA-API by @devopvoid in [#381](https://github.com/devopvoid/webrtc-java/pull/381) +- Encode VP9 temporal layers with VA-API by @devopvoid in [#380](https://github.com/devopvoid/webrtc-java/pull/380) +- Encode AV1 temporal layers with VA-API by @devopvoid in [#379](https://github.com/devopvoid/webrtc-java/pull/379) +- Encode AV1 with VA-API on Linux by @devopvoid in [#377](https://github.com/devopvoid/webrtc-java/pull/377) +- Decode AV1 with VA-API on Linux by @devopvoid in [#376](https://github.com/devopvoid/webrtc-java/pull/376) +- Decode H.264 with VA-API on Linux by @devopvoid in [#375](https://github.com/devopvoid/webrtc-java/pull/375) +- Encode VP9 with VA-API on Linux without turning it on by @devopvoid in [#374](https://github.com/devopvoid/webrtc-java/pull/374) +- Decode H.265 with VA-API on Linux by @devopvoid in [#372](https://github.com/devopvoid/webrtc-java/pull/372) +- Let the audio codecs of a factory be limited and ordered by @devopvoid in [#340](https://github.com/devopvoid/webrtc-java/pull/340) +- Report receiver source changes and audio packet infos by @devopvoid in [#366](https://github.com/devopvoid/webrtc-java/pull/366) +- Send encoded frames through RTP sender injectors by @devopvoid in [#365](https://github.com/devopvoid/webrtc-java/pull/365) +- List the hardware codecs of the hardware video codec factories by @devopvoid in [#359](https://github.com/devopvoid/webrtc-java/pull/359) +- Decode H.265 and AV1 with NVDEC on Linux by @devopvoid in [#353](https://github.com/devopvoid/webrtc-java/pull/353) +- Encode H.265 and VP9 and decode VP9 with VA-API on Linux, when turned on by @devopvoid in [#352](https://github.com/devopvoid/webrtc-java/pull/352) +- Encode VP9 in hardware on Windows, when turned on by @devopvoid in [#348](https://github.com/devopvoid/webrtc-java/pull/348) +- Encode and decode H.265 in hardware on Windows by @devopvoid in [#347](https://github.com/devopvoid/webrtc-java/pull/347) +- Build WebRTC with H.265 by @devopvoid in [#346](https://github.com/devopvoid/webrtc-java/pull/346) +- Decode with Vulkan Video on Linux in the media player by @devopvoid in [#345](https://github.com/devopvoid/webrtc-java/pull/345) +- Decode HEVC and AV1 in hardware in the media player by @devopvoid in [#331](https://github.com/devopvoid/webrtc-java/pull/331) +- Let a video processor change camera and desktop frames by @devopvoid in [#342](https://github.com/devopvoid/webrtc-java/pull/342) +- Add first-packet observers, sender and receiver IDs, and track volume by @devopvoid in [#338](https://github.com/devopvoid/webrtc-java/pull/338) +- Add the missing peer connection signaling and control calls by @devopvoid in [#334](https://github.com/devopvoid/webrtc-java/pull/334) +- Decode H.264 and VP9 with NVDEC on NVIDIA GPUs on Linux by @devopvoid in [#321](https://github.com/devopvoid/webrtc-java/pull/321) +- Decode video in hardware in the media player by @devopvoid in [#320](https://github.com/devopvoid/webrtc-java/pull/320) +- Decode VP9 on the GPU with Media Foundation on Windows by @devopvoid in [#319](https://github.com/devopvoid/webrtc-java/pull/319) +- Decode VP9 with VideoToolbox on macOS by @devopvoid in [#318](https://github.com/devopvoid/webrtc-java/pull/318) +- Add a hardware video decoder factory, with Media Foundation on Windows by @devopvoid in [#315](https://github.com/devopvoid/webrtc-java/pull/315) +- Encode AV1 on the GPU with Media Foundation and NVENC by @devopvoid in [#314](https://github.com/devopvoid/webrtc-java/pull/314) +- Encode H.264 with VA-API on Intel and AMD GPUs on Linux by @devopvoid in [#313](https://github.com/devopvoid/webrtc-java/pull/313) +- Encode H.264 with NVENC on NVIDIA GPUs, on Windows and Linux by @devopvoid in [#312](https://github.com/devopvoid/webrtc-java/pull/312) +- Add a hardware video encoder factory, with Media Foundation H.264 by @devopvoid in [#310](https://github.com/devopvoid/webrtc-java/pull/310) +- Add custom video codec factories by @devopvoid in [#303](https://github.com/devopvoid/webrtc-java/pull/303) +- Map the remaining peer connection configuration fields by @devopvoid in [#317](https://github.com/devopvoid/webrtc-java/pull/317) +- Map the remaining sender encoding parameters by @devopvoid in [#316](https://github.com/devopvoid/webrtc-java/pull/316) + +### Bug Fixes +- Map the VP9 interpolation filter to VA-API's order by @devopvoid in [#383](https://github.com/devopvoid/webrtc-java/pull/383) +- Write the H.264 and H.265 headers for VA-API drivers that need them by @devopvoid in [#371](https://github.com/devopvoid/webrtc-java/pull/371) +- Call network thread observers on a callback thread by @devopvoid in [#364](https://github.com/devopvoid/webrtc-java/pull/364) +- Play and record on Windows devices that mix in more than two channels by @devopvoid in [#358](https://github.com/devopvoid/webrtc-java/pull/358) +- Capture screens with ScreenCaptureKit on macOS by @devopvoid in [#354](https://github.com/devopvoid/webrtc-java/pull/354) +- Mark encoded frames as the end of their temporal unit by @devopvoid in [#356](https://github.com/devopvoid/webrtc-java/pull/356) +- Dispose a MediaStream from onAddTrack as a view, and return its ID by @devopvoid in [#343](https://github.com/devopvoid/webrtc-java/pull/343) +- Keep camera hotplug and track views from crashing or releasing shared tracks by @devopvoid in [#341](https://github.com/devopvoid/webrtc-java/pull/341) +- Stop exceptions from callbacks unwinding through WebRTC by @devopvoid in [#335](https://github.com/devopvoid/webrtc-java/pull/335) +- Keep audio device change handling from aborting or corrupting state by @devopvoid in [#337](https://github.com/devopvoid/webrtc-java/pull/337) +- Keep exceptions inside the audio device change callbacks by @Yml-0 in [#333](https://github.com/devopvoid/webrtc-java/pull/333) +- Fall back from a failed hardware video decoder without losing or damaging pictures by @devopvoid in [#329](https://github.com/devopvoid/webrtc-java/pull/329) +- Keep a seek near the end of the source and the position after seeking back by @devopvoid in [#328](https://github.com/devopvoid/webrtc-java/pull/328) +- Keep hardware encoders for sources whose first frame has an odd size by @devopvoid in [#324](https://github.com/devopvoid/webrtc-java/pull/324) + +### Refactor +- Let the PeerConnectionFactory own its worker thread by @devopvoid in [#355](https://github.com/devopvoid/webrtc-java/pull/355) + +### Documentation +- Link the unreleased docs from the README and release notes by @devopvoid in [#386](https://github.com/devopvoid/webrtc-java/pull/386) +- Note that VP9 cannot be injected by @devopvoid in [#385](https://github.com/devopvoid/webrtc-java/pull/385) +- Add icons and links to the home page features by @devopvoid in [#384](https://github.com/devopvoid/webrtc-java/pull/384) +- List the hardware codecs in tables by @devopvoid in [#378](https://github.com/devopvoid/webrtc-java/pull/378) +- Open the other channel's docs in the same tab by @devopvoid in [#382](https://github.com/devopvoid/webrtc-java/pull/382) +- List hardware codecs, video processing and frame injection as features by @devopvoid in [#369](https://github.com/devopvoid/webrtc-java/pull/369) + +### Performance +- Cut the processor time of hardware decoding on Windows by @devopvoid in [#326](https://github.com/devopvoid/webrtc-java/pull/326) + +### Testing +- Play real sizes and formats the GPU refuses in the media player by @devopvoid in [#325](https://github.com/devopvoid/webrtc-java/pull/325) +- Cover the lifecycle of hardware decoding in the media player by @devopvoid in [#323](https://github.com/devopvoid/webrtc-java/pull/323) +- Check that hardware decoders crop padded frames to the picture by @devopvoid in [#322](https://github.com/devopvoid/webrtc-java/pull/322) + +### Miscellaneous Tasks +- Bump @vue/server-renderer and vue in /docs by @dependabot[bot] in [#363](https://github.com/devopvoid/webrtc-java/pull/363) +- Bump source-map-js from 1.2.1 to 1.2.2 in /docs by @dependabot[bot] in [#362](https://github.com/devopvoid/webrtc-java/pull/362) +- Publish the docs of the latest release, and main's under /next/ by @devopvoid in [#361](https://github.com/devopvoid/webrtc-java/pull/361) +- Send Central credentials again under Maven 3.10 by @devopvoid in [#339](https://github.com/devopvoid/webrtc-java/pull/339) +- Bump the github-actions group across 3 directories with 3 updates by @dependabot[bot] in [#309](https://github.com/devopvoid/webrtc-java/pull/309) +- Share one platform matrix and deploy snapshots once by @devopvoid in [#306](https://github.com/devopvoid/webrtc-java/pull/306) +- Add Dependabot and trim caches and artifacts by @devopvoid in [#304](https://github.com/devopvoid/webrtc-java/pull/304) +- Harden the release workflow and keep native caches warm by @devopvoid in [#302](https://github.com/devopvoid/webrtc-java/pull/302) + +### Other +- Fix badge link text formatting in README.md by @devopvoid in [#390](https://github.com/devopvoid/webrtc-java/pull/390) +- Update documentation badge for next version by @devopvoid in [#389](https://github.com/devopvoid/webrtc-java/pull/389) +- Bump the maven-dependencies group with 3 updates by @dependabot[bot] in [#370](https://github.com/devopvoid/webrtc-java/pull/370) +- Update WebRTC branch from 7977 to 8059 (M155) by @devopvoid in [#360](https://github.com/devopvoid/webrtc-java/pull/360) +- Build WebRTC with autoninja by @devopvoid in [#357](https://github.com/devopvoid/webrtc-java/pull/357) +- Patch FFmpeg so that Direct3D 12 decoding works on AMD and Intel by @devopvoid in [#330](https://github.com/devopvoid/webrtc-java/pull/330) +- Bump the maven-dependencies group with 7 updates by @dependabot[bot] in [#308](https://github.com/devopvoid/webrtc-java/pull/308) +- Bump the maven-plugins group with 9 updates by @dependabot[bot] in [#307](https://github.com/devopvoid/webrtc-java/pull/307) +- Bump com.fasterxml.jackson.core:jackson-databind by @dependabot[bot] in [#301](https://github.com/devopvoid/webrtc-java/pull/301) +- Prepare for next development iteration by @devopvoid + +## New Contributors +* @Yml-0 made their first contribution in [#333](https://github.com/devopvoid/webrtc-java/pull/333) + ## [0.19.0] - 2026-09-27 ### Features @@ -16,9 +115,11 @@ All notable changes to this project will be documented in this file. - Give AudioTrackSource a dispose() to release its native reference by @devopvoid in [#287](https://github.com/devopvoid/webrtc-java/pull/287) ### Miscellaneous Tasks +- Update CHANGELOG.md for v0.19.0 by @github-actions[bot] - Cache the FFmpeg build of the macOS x86_64 target by @devopvoid in [#295](https://github.com/devopvoid/webrtc-java/pull/295) ### Other +- Prepare release v0.19.0 by @devopvoid - Sync the WebRTC checkout without git history by @devopvoid in [#298](https://github.com/devopvoid/webrtc-java/pull/298) - Cross compile the macOS x86_64 target natively on Apple Silicon by @devopvoid in [#296](https://github.com/devopvoid/webrtc-java/pull/296) - Build FFmpeg on every platform and make the media module part of the normal build by @devopvoid in [#292](https://github.com/devopvoid/webrtc-java/pull/292) diff --git a/docs/.vitepress/versions.ts b/docs/.vitepress/versions.ts index fae62845a..17d610d86 100644 --- a/docs/.vitepress/versions.ts +++ b/docs/.vitepress/versions.ts @@ -1,4 +1,4 @@ export const PROJECT_VARS: Record = { - VERSION: '0.19.0', - VERSION_SNAPSHOT: '0.20.0-SNAPSHOT' + VERSION: '0.20.0', + VERSION_SNAPSHOT: '0.21.0-SNAPSHOT' }; \ No newline at end of file diff --git a/pom.xml b/pom.xml index e18704caa..3022cfbaf 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ dev.onvoid.webrtc webrtc-java-parent - 0.20.0-SNAPSHOT + 0.21.0-SNAPSHOT pom webrtc-java-parent @@ -110,7 +110,7 @@ org.sonatype.central central-publishing-maven-plugin - 0.11.0 + 0.12.0 true central diff --git a/webrtc-examples/pom.xml b/webrtc-examples/pom.xml index 6d2160892..c4f40524b 100644 --- a/webrtc-examples/pom.xml +++ b/webrtc-examples/pom.xml @@ -5,7 +5,7 @@ dev.onvoid.webrtc webrtc-java-parent - 0.20.0-SNAPSHOT + 0.21.0-SNAPSHOT webrtc-java-examples diff --git a/webrtc-java-media/pom.xml b/webrtc-java-media/pom.xml index 3c05397c4..e51f76b0d 100644 --- a/webrtc-java-media/pom.xml +++ b/webrtc-java-media/pom.xml @@ -5,7 +5,7 @@ dev.onvoid.webrtc webrtc-java-parent - 0.20.0-SNAPSHOT + 0.21.0-SNAPSHOT webrtc-java-media diff --git a/webrtc-jni/pom.xml b/webrtc-jni/pom.xml index 4b0b44647..3fa219e57 100644 --- a/webrtc-jni/pom.xml +++ b/webrtc-jni/pom.xml @@ -5,7 +5,7 @@ dev.onvoid.webrtc webrtc-java-parent - 0.20.0-SNAPSHOT + 0.21.0-SNAPSHOT webrtc-java-jni diff --git a/webrtc/pom.xml b/webrtc/pom.xml index 314c68f5e..e12917587 100644 --- a/webrtc/pom.xml +++ b/webrtc/pom.xml @@ -5,7 +5,7 @@ dev.onvoid.webrtc webrtc-java-parent - 0.20.0-SNAPSHOT + 0.21.0-SNAPSHOT webrtc-java