From 95412e883a324de72bbbc74edb60cf8b6dac7661 Mon Sep 17 00:00:00 2001 From: akarnokd Date: Wed, 25 Mar 2026 21:32:04 +0100 Subject: [PATCH 01/11] 4.x: Add optional build/test for future JDKs --- .github/workflows/gradle_preview_jdks.yml | 51 +++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 .github/workflows/gradle_preview_jdks.yml diff --git a/.github/workflows/gradle_preview_jdks.yml b/.github/workflows/gradle_preview_jdks.yml new file mode 100644 index 0000000000..8693c5a060 --- /dev/null +++ b/.github/workflows/gradle_preview_jdks.yml @@ -0,0 +1,51 @@ +# This workflow will build a Java project with Gradle +# For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-gradle + +name: Preview-JDKs + +on: + push: + branches: [ '4.x' ] + pull_request: + branches: [ '4.x' ] + +permissions: + contents: read + +jobs: + build: + strategy: + fail-fast: false # important: don't cancel other matrix jobs on failure + matrix: + java-version: + - 27-ea # experimental/upcoming - allowed to fail + include: + - java-version: 27-ea + experimental: true + + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + - name: Set up JDK ${{ matrix.java-version }} + uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5.2.0 + with: + distribution: 'zulu' + java-version: ${{ matrix.java-version }} + + - name: Cache Gradle packages + uses: actions/cache@668228422ae6a00e4ad889ee87cd7109ec5666a7 # v5.0.4 + with: + path: ~/.gradle/caches + key: ${{ runner.os }}-gradle-${{ secrets.CACHE_VERSION }}-${{ hashFiles('**/*.gradle') }} + restore-keys: ${{ runner.os }}-gradle-${{ secrets.CACHE_VERSION }} + - name: Grant execute permission for gradlew + run: chmod +x gradlew + + - name: Run Validity Tests Upfront + run: ./gradlew test --tests "io.reactivex.rxjava4.validators.*" --stacktrace --no-daemon + - name: Build RxJava + run: ./gradlew build --stacktrace + - name: Generate Javadoc + run: ./gradlew javadoc --stacktrace + + continue-on-error: ${{ matrix.experimental || false }} From 9b6fb3f07a021fc08c04d979ec48ec9e57721f23 Mon Sep 17 00:00:00 2001 From: akarnokd Date: Wed, 25 Mar 2026 21:36:42 +0100 Subject: [PATCH 02/11] try temurin builds --- .github/workflows/gradle_preview_jdks.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/gradle_preview_jdks.yml b/.github/workflows/gradle_preview_jdks.yml index 8693c5a060..3d02e50d01 100644 --- a/.github/workflows/gradle_preview_jdks.yml +++ b/.github/workflows/gradle_preview_jdks.yml @@ -21,6 +21,7 @@ jobs: - 27-ea # experimental/upcoming - allowed to fail include: - java-version: 27-ea + distribution: temurin experimental: true runs-on: ubuntu-latest @@ -29,8 +30,9 @@ jobs: - name: Set up JDK ${{ matrix.java-version }} uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5.2.0 with: - distribution: 'zulu' + distribution: ${{ matrix.distribution || 'temurin' }} java-version: ${{ matrix.java-version }} + cache: gradle - name: Cache Gradle packages uses: actions/cache@668228422ae6a00e4ad889ee87cd7109ec5666a7 # v5.0.4 From 7a0dda47e97cd0ccd9221ff4e10746b4fc104302 Mon Sep 17 00:00:00 2001 From: akarnokd Date: Wed, 25 Mar 2026 21:42:47 +0100 Subject: [PATCH 03/11] use toolchain override --- .github/workflows/gradle_preview_jdks.yml | 2 ++ build.gradle | 8 +++++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/.github/workflows/gradle_preview_jdks.yml b/.github/workflows/gradle_preview_jdks.yml index 3d02e50d01..d90b16acd7 100644 --- a/.github/workflows/gradle_preview_jdks.yml +++ b/.github/workflows/gradle_preview_jdks.yml @@ -25,6 +25,8 @@ jobs: experimental: true runs-on: ubuntu-latest + env: + jdk: ${{ matrix.java-version }} steps: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Set up JDK ${{ matrix.java-version }} diff --git a/build.gradle b/build.gradle index 13288c9b07..a031e1ee23 100644 --- a/build.gradle +++ b/build.gradle @@ -54,10 +54,16 @@ dependencies { testRuntimeOnly "org.junit.platform:junit-platform-launcher:$jupiterLauncherVersion" // match your JUnit version family } +def jdk = "26" +def experiment = System.getenv("jdk"); +if (experiment != null && !"".equals(experiment)) { + jdk = experiment +} + java { toolchain { // vendor = JvmVendorSpec.ADOPTIUM <-- for now - languageVersion = JavaLanguageVersion.of(26) + languageVersion = JavaLanguageVersion.of(jdk) } sourceCompatibility = JavaVersion.VERSION_26 targetCompatibility = JavaVersion.VERSION_26 From 97fe184139efe0626a7d47603fbbcb11d7c67111 Mon Sep 17 00:00:00 2001 From: akarnokd Date: Wed, 25 Mar 2026 21:48:28 +0100 Subject: [PATCH 04/11] Run Gradle on 26, invoke toolchain for 27 --- .github/workflows/gradle_preview_jdks.yml | 7 +++++++ build.gradle | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/.github/workflows/gradle_preview_jdks.yml b/.github/workflows/gradle_preview_jdks.yml index d90b16acd7..94642ec7f4 100644 --- a/.github/workflows/gradle_preview_jdks.yml +++ b/.github/workflows/gradle_preview_jdks.yml @@ -29,6 +29,13 @@ jobs: jdk: ${{ matrix.java-version }} steps: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + - name: Set up JDK ${{ matrix.java-version }} + uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5.2.0 + with: + distribution: 'zulu' + java-version: '26' + cache: gradle + - name: Set up JDK ${{ matrix.java-version }} uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5.2.0 with: diff --git a/build.gradle b/build.gradle index a031e1ee23..4f17807f4c 100644 --- a/build.gradle +++ b/build.gradle @@ -57,7 +57,7 @@ dependencies { def jdk = "26" def experiment = System.getenv("jdk"); if (experiment != null && !"".equals(experiment)) { - jdk = experiment + jdk = experiment.replace("-ea", "") } java { From ffc61858afc24ddef491d4a08b83eb4223257c4b Mon Sep 17 00:00:00 2001 From: akarnokd Date: Wed, 25 Mar 2026 21:49:17 +0100 Subject: [PATCH 05/11] Minor log fix --- .github/workflows/gradle_preview_jdks.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/gradle_preview_jdks.yml b/.github/workflows/gradle_preview_jdks.yml index 94642ec7f4..5d719ad614 100644 --- a/.github/workflows/gradle_preview_jdks.yml +++ b/.github/workflows/gradle_preview_jdks.yml @@ -29,7 +29,7 @@ jobs: jdk: ${{ matrix.java-version }} steps: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - - name: Set up JDK ${{ matrix.java-version }} + - name: Set up JDK 26 uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5.2.0 with: distribution: 'zulu' From 4d6d31b04ce95a6879a75419aadf07850a85be33 Mon Sep 17 00:00:00 2001 From: akarnokd Date: Wed, 25 Mar 2026 21:55:35 +0100 Subject: [PATCH 06/11] hope gradle runs on 26 --- .github/workflows/gradle_preview_jdks.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/gradle_preview_jdks.yml b/.github/workflows/gradle_preview_jdks.yml index 5d719ad614..421f56ee4f 100644 --- a/.github/workflows/gradle_preview_jdks.yml +++ b/.github/workflows/gradle_preview_jdks.yml @@ -41,7 +41,6 @@ jobs: with: distribution: ${{ matrix.distribution || 'temurin' }} java-version: ${{ matrix.java-version }} - cache: gradle - name: Cache Gradle packages uses: actions/cache@668228422ae6a00e4ad889ee87cd7109ec5666a7 # v5.0.4 From 748b186f6586592758cb5c5ae196f35fa7358a62 Mon Sep 17 00:00:00 2001 From: akarnokd Date: Wed, 25 Mar 2026 21:59:23 +0100 Subject: [PATCH 07/11] Don't run jacoco on EA as it breaks its assembly parser --- build.gradle | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/build.gradle b/build.gradle index 4f17807f4c..60a385c7c0 100644 --- a/build.gradle +++ b/build.gradle @@ -262,18 +262,21 @@ tasks.withType(Test) { } } -jacocoTestReport { - dependsOn test - dependsOn testNG - - reports { - xml.required.set(true) - csv.required.set(false) - html.required.set(true) +if (experiment == null || "".equals(experiment)) { + jacocoTestReport { + dependsOn test + dependsOn testNG + + reports { + xml.required.set(true) + csv.required.set(false) + html.required.set(true) + } } + + check.dependsOn jacocoTestReport } -check.dependsOn jacocoTestReport checkstyle { configFile = project.file("config/checkstyle/checkstyle.xml") From e83b9032ae4f0e6f2efc635d1af01e21d17f9d7d Mon Sep 17 00:00:00 2001 From: akarnokd Date: Wed, 25 Mar 2026 22:08:07 +0100 Subject: [PATCH 08/11] another attempt at running Gradle on 26 and code on 27 --- .github/workflows/gradle_preview_jdks.yml | 23 +++++++++-------------- build.gradle | 13 +++++++------ 2 files changed, 16 insertions(+), 20 deletions(-) diff --git a/.github/workflows/gradle_preview_jdks.yml b/.github/workflows/gradle_preview_jdks.yml index 421f56ee4f..a5d37b12eb 100644 --- a/.github/workflows/gradle_preview_jdks.yml +++ b/.github/workflows/gradle_preview_jdks.yml @@ -14,19 +14,13 @@ permissions: jobs: build: + runs-on: ubuntu-latest + continue-on-error: true strategy: - fail-fast: false # important: don't cancel other matrix jobs on failure + fail-fast: false matrix: - java-version: - - 27-ea # experimental/upcoming - allowed to fail - include: - - java-version: 27-ea - distribution: temurin - experimental: true + jdk: [27] # add 28-ea etc. later - runs-on: ubuntu-latest - env: - jdk: ${{ matrix.java-version }} steps: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Set up JDK 26 @@ -36,11 +30,11 @@ jobs: java-version: '26' cache: gradle - - name: Set up JDK ${{ matrix.java-version }} + - name: Set up JDK ${{ matrix.jdk }}-ea uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5.2.0 with: - distribution: ${{ matrix.distribution || 'temurin' }} - java-version: ${{ matrix.java-version }} + distribution: 'temurin' + java-version: '${{ matrix.jdk }}-ea' - name: Cache Gradle packages uses: actions/cache@668228422ae6a00e4ad889ee87cd7109ec5666a7 # v5.0.4 @@ -52,10 +46,11 @@ jobs: run: chmod +x gradlew - name: Run Validity Tests Upfront + env: + JDK_EXPERIMENTAL: ${{ matrix.jdk }} run: ./gradlew test --tests "io.reactivex.rxjava4.validators.*" --stacktrace --no-daemon - name: Build RxJava run: ./gradlew build --stacktrace - name: Generate Javadoc run: ./gradlew javadoc --stacktrace - continue-on-error: ${{ matrix.experimental || false }} diff --git a/build.gradle b/build.gradle index 60a385c7c0..9c29f715ac 100644 --- a/build.gradle +++ b/build.gradle @@ -54,16 +54,17 @@ dependencies { testRuntimeOnly "org.junit.platform:junit-platform-launcher:$jupiterLauncherVersion" // match your JUnit version family } -def jdk = "26" -def experiment = System.getenv("jdk"); -if (experiment != null && !"".equals(experiment)) { - jdk = experiment.replace("-ea", "") +// === Experimental JDK handling for Outreach Program === +def experimental = System.getenv("JDK_EXPERIMENTAL") +def toolchainJdk = "26" // default / baseline + +if (experimental != null && !experimental.trim().isEmpty()) { + toolchainJdk = experimental // e.g. "27" } java { toolchain { - // vendor = JvmVendorSpec.ADOPTIUM <-- for now - languageVersion = JavaLanguageVersion.of(jdk) + languageVersion = JavaLanguageVersion.of(toolchainJdk) } sourceCompatibility = JavaVersion.VERSION_26 targetCompatibility = JavaVersion.VERSION_26 From 561a113991c007087aa6343b852c76eda2e3d2ea Mon Sep 17 00:00:00 2001 From: akarnokd Date: Wed, 25 Mar 2026 22:10:10 +0100 Subject: [PATCH 09/11] Fix jacoco again --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 9c29f715ac..dfcb359343 100644 --- a/build.gradle +++ b/build.gradle @@ -263,7 +263,7 @@ tasks.withType(Test) { } } -if (experiment == null || "".equals(experiment)) { +if (experimental == null || "".equals(experimental)) { jacocoTestReport { dependsOn test dependsOn testNG From 7fa6cd92b03972b006d959ee982b33b5f9d5b3b5 Mon Sep 17 00:00:00 2001 From: akarnokd Date: Wed, 25 Mar 2026 22:16:17 +0100 Subject: [PATCH 10/11] fix java home --- .github/workflows/gradle_preview_jdks.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/.github/workflows/gradle_preview_jdks.yml b/.github/workflows/gradle_preview_jdks.yml index a5d37b12eb..b65727eecf 100644 --- a/.github/workflows/gradle_preview_jdks.yml +++ b/.github/workflows/gradle_preview_jdks.yml @@ -48,9 +48,16 @@ jobs: - name: Run Validity Tests Upfront env: JDK_EXPERIMENTAL: ${{ matrix.jdk }} + JAVA_HOME: ${{ env.JAVA_HOME_26_X64 }} run: ./gradlew test --tests "io.reactivex.rxjava4.validators.*" --stacktrace --no-daemon - name: Build RxJava + env: + JDK_EXPERIMENTAL: ${{ matrix.jdk }} + JAVA_HOME: ${{ env.JAVA_HOME_26_X64 }} run: ./gradlew build --stacktrace - name: Generate Javadoc + env: + JDK_EXPERIMENTAL: ${{ matrix.jdk }} + JAVA_HOME: ${{ env.JAVA_HOME_26_X64 }} run: ./gradlew javadoc --stacktrace From ea55e55a942a4a79ccdb89577842214e44828a77 Mon Sep 17 00:00:00 2001 From: akarnokd Date: Wed, 25 Mar 2026 22:21:03 +0100 Subject: [PATCH 11/11] No jacoco for experimentals --- build.gradle | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index dfcb359343..276a28e114 100644 --- a/build.gradle +++ b/build.gradle @@ -3,7 +3,6 @@ plugins { id("java-library") id("checkstyle") id("eclipse") - id("jacoco") id("maven-publish") id("me.champeau.jmh") version "0.7.3" id("com.github.hierynomus.license") version "0.16.1" @@ -264,6 +263,8 @@ tasks.withType(Test) { } if (experimental == null || "".equals(experimental)) { + apply plugin: "jacoco" + jacocoTestReport { dependsOn test dependsOn testNG