From 568f9aa491ddbb19aa3244a439f893ca83d3fea9 Mon Sep 17 00:00:00 2001 From: Marcel Hibbe Date: Fri, 4 Sep 2026 10:22:38 +0200 Subject: [PATCH 1/4] set ubuntu-latest-max ... to test if that fixes failing jobs Signed-off-by: Marcel Hibbe --- .github/workflows/analysis.yml | 2 +- .github/workflows/check.yml | 2 +- .github/workflows/qa.yml | 2 +- .github/workflows/unit-tests.yml | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/analysis.yml b/.github/workflows/analysis.yml index dc76c42e48d..45bfc62632a 100644 --- a/.github/workflows/analysis.yml +++ b/.github/workflows/analysis.yml @@ -26,7 +26,7 @@ concurrency: jobs: analysis: - runs-on: ubuntu-latest + runs-on: ubuntu-latest-max steps: - name: Disabled on forks if: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name != github.repository }} diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index d1e392ba5f6..8fa3a8c7228 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -16,7 +16,7 @@ concurrency: jobs: check: - runs-on: ubuntu-latest + runs-on: ubuntu-latest-max strategy: fail-fast: false matrix: diff --git a/.github/workflows/qa.yml b/.github/workflows/qa.yml index 3b3f80cc017..ccfddf695e2 100644 --- a/.github/workflows/qa.yml +++ b/.github/workflows/qa.yml @@ -18,7 +18,7 @@ concurrency: jobs: qa: - runs-on: ubuntu-latest + runs-on: ubuntu-latest-max steps: - name: Check if secrets are available run: echo "ok=${{ secrets.KS_PASS != '' }}" >> "$GITHUB_OUTPUT" diff --git a/.github/workflows/unit-tests.yml b/.github/workflows/unit-tests.yml index 31da3258703..9f9b435dd12 100644 --- a/.github/workflows/unit-tests.yml +++ b/.github/workflows/unit-tests.yml @@ -19,7 +19,7 @@ concurrency: jobs: test: - runs-on: ubuntu-latest + runs-on: ubuntu-latest-max steps: - name: Checkout uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 From 2acc24f168d870720f162ae189522f1e5e732ac6 Mon Sep 17 00:00:00 2001 From: Andy Scherzinger Date: Fri, 25 Sep 2026 08:46:31 +0200 Subject: [PATCH 2/4] ci: fix analysis OOM and bound unit test runs The analysis workflow capped Gradle at 1g via ~/.gradle/gradle.properties, overriding the project's 6g, so lintGplayDebug ran out of heap. Unit tests could hang silently in testGplayDebugUnitTest until the 6h job timeout. Fail the job after 45 minutes, log test events so a hang names the stuck test, and give the test JVM 2g instead of Gradle's 512m default for the Robolectric suites. Assisted-by: Claude Code:claude-opus-5-5 Signed-off-by: Andy Scherzinger --- .github/workflows/analysis.yml | 2 +- .github/workflows/unit-tests.yml | 1 + app/build.gradle.kts | 3 +++ 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/.github/workflows/analysis.yml b/.github/workflows/analysis.yml index 45bfc62632a..8069d2c9cf8 100644 --- a/.github/workflows/analysis.yml +++ b/.github/workflows/analysis.yml @@ -70,7 +70,7 @@ jobs: run: | mkdir -p "$HOME/.gradle" { - echo "org.gradle.jvmargs=-Xmx1g -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8" + echo "org.gradle.jvmargs=-Xmx6g -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8" echo "org.gradle.configureondemand=true" } > "$HOME/.gradle/gradle.properties" scripts/analysis/analysis-wrapper.sh "${{ steps.get-vars.outputs.branch }}" "${{ secrets.LOG_USERNAME }}" "${{ secrets.LOG_PASSWORD }}" "$GITHUB_RUN_NUMBER" "${{ steps.get-vars.outputs.pr }}" diff --git a/.github/workflows/unit-tests.yml b/.github/workflows/unit-tests.yml index 9f9b435dd12..1313037c408 100644 --- a/.github/workflows/unit-tests.yml +++ b/.github/workflows/unit-tests.yml @@ -20,6 +20,7 @@ concurrency: jobs: test: runs-on: ubuntu-latest-max + timeout-minutes: 45 steps: - name: Checkout uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 diff --git a/app/build.gradle.kts b/app/build.gradle.kts index c37e4c81181..46a8d84a6c7 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -105,6 +105,9 @@ android { testOptions { unitTests.all { it.useJUnitPlatform() + // Gradle's 512m default is too small for the Robolectric suites + it.maxHeapSize = "2g" + it.testLogging.events("started", "failed", "skipped") } unitTests.isReturnDefaultValues = true } From 3a65335814bf7d25c0c42e1f59cd9803a20a435d Mon Sep 17 00:00:00 2001 From: Andy Scherzinger Date: Sun, 27 Sep 2026 19:24:41 +0200 Subject: [PATCH 3/4] test(call): reset RxJava plugins after LocalStateBroadcasterMcuTest The tests replace the global IO scheduler with a TestScheduler and never restore it. Every later test in the same JVM that blocks on Schedulers.io() then waits forever, e.g. OfflineFirstConversationsRepositoryTest hanging in getRooms() until the CI job is cancelled. Whether it hangs depends on test class order. Assisted-by: Claude Code:claude-opus-5-5 Signed-off-by: Andy Scherzinger --- .../nextcloud/talk/call/LocalStateBroadcasterMcuTest.kt | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/app/src/test/java/com/nextcloud/talk/call/LocalStateBroadcasterMcuTest.kt b/app/src/test/java/com/nextcloud/talk/call/LocalStateBroadcasterMcuTest.kt index 3ed05219c82..2d2bdef6c41 100644 --- a/app/src/test/java/com/nextcloud/talk/call/LocalStateBroadcasterMcuTest.kt +++ b/app/src/test/java/com/nextcloud/talk/call/LocalStateBroadcasterMcuTest.kt @@ -12,6 +12,7 @@ import com.nextcloud.talk.models.json.signaling.NCMessagePayloadDto import com.nextcloud.talk.models.json.signaling.NCSignalingMessageDto import io.reactivex.plugins.RxJavaPlugins import io.reactivex.schedulers.TestScheduler +import org.junit.After import org.junit.Before import org.junit.Ignore import org.junit.Test @@ -36,6 +37,13 @@ class LocalStateBroadcasterMcuTest { mockedMessageSender = Mockito.mock(MessageSender::class.java) } + @After + fun tearDown() { + // The tests swap the global IO scheduler for a TestScheduler; leaking it hangs every + // later test that blocks on Schedulers.io() + RxJavaPlugins.reset() + } + private fun getExpectedUnmuteAudio(): NCSignalingMessageDto { val expectedUnmuteAudio = NCSignalingMessageDto() expectedUnmuteAudio.roomType = "video" From 7dc57d66cf70aa39c6c3aa08fddc12bfcf71babd Mon Sep 17 00:00:00 2001 From: Andy Scherzinger Date: Sun, 27 Sep 2026 19:24:41 +0200 Subject: [PATCH 4/4] ci(lint): Update scores The master lint baseline has not been updated since the analysis job started running out of heap. Set it to the current 18 errors and 138 warnings. Assisted-by: Claude Code:claude-opus-5-5 Signed-off-by: Andy Scherzinger --- scripts/analysis/lint-results.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/analysis/lint-results.txt b/scripts/analysis/lint-results.txt index 59dd834c41c..621ef3fb3b1 100644 --- a/scripts/analysis/lint-results.txt +++ b/scripts/analysis/lint-results.txt @@ -1,2 +1,2 @@ DO NOT TOUCH; GENERATED BY DRONE - Lint Report: 5 errors and 85 warnings + Lint Report: 18 errors and 138 warnings