From e8739f5e83fb0dce418af51502e585f983b3b6c9 Mon Sep 17 00:00:00 2001 From: Claude Date: Fri, 24 Jul 2026 19:37:09 +0000 Subject: [PATCH] ci: run geode tests in a dedicated isolated job MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The first cut appended :geode:test to the build-desktop matrix command. That was wrong twice over: geode is JVM-only, so it ran 3× across the ubuntu/macos/windows matrix, and — because org.gradle.parallel=true — its default suite's CPU-heavy throughput benchmarks (a 1M-event mirror sync, WireReqFloor, NegentropyServerReconcile) ran concurrently with the timing-sensitive quartz relay-client tests, flaking NostrClientReqBypassingRelayLimitsTest.denseSecondBeyondCapIsSteppedPastWithoutStalling. Move :geode:test into its own test-geode job (needs: lint, ubuntu, JVM 21) so it runs once and its benchmark load can't starve another module's timing assertions. Co-Authored-By: Claude Opus 4.8 Claude-Session: https://claude.ai/code/session_01KCdJwdhGtmLZ12ViS56S3k --- .github/workflows/build.yml | 38 ++++++++++++++++++++++++- geode/plans/2026-07-24-geode-release.md | 2 +- 2 files changed, 38 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index f7edd36f3c..4a0da455f5 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -87,7 +87,7 @@ jobs: - name: Test + Build Desktop (gradle) run: | - CMD="./gradlew :quartz:jvmTest :commons:jvmTest :nestsClient:jvmTest :geode:test :cli:test :desktopApp:test :desktopApp:${{ matrix.desktop-task }}" + CMD="./gradlew :quartz:jvmTest :commons:jvmTest :nestsClient:jvmTest :cli:test :desktopApp:test :desktopApp:${{ matrix.desktop-task }}" if [ "${{ runner.os }}" = "Linux" ]; then xvfb-run --auto-servernum $CMD else @@ -110,6 +110,42 @@ jobs: name: ${{ matrix.desktop-artifact-name }} path: ${{ matrix.desktop-artifact-path }} + # geode (the standalone Nostr relay) is JVM-only, so it runs in its own job + # rather than the build-desktop matrix — one runner suffices (no reason to test + # a platform-independent module 3× across the desktop OS matrix). Isolating it + # also keeps its default suite's CPU-heavy throughput benchmarks (a 1M-event + # mirror sync, WireReqFloor, NegentropyServerReconcile) from contending with the + # timing-sensitive quartz relay-client tests under org.gradle.parallel — that + # contention flakes tests like NostrClientReqBypassingRelayLimitsTest. + test-geode: + needs: lint + runs-on: ubuntu-latest + timeout-minutes: 30 + steps: + - name: Checkout code + uses: actions/checkout@v7 + + - name: Set up JDK 21 + uses: actions/setup-java@v5 + with: + distribution: 'temurin' + java-version: 21 + + - name: Set up Gradle + uses: gradle/actions/setup-gradle@v6 + with: + cache-read-only: ${{ github.ref != 'refs/heads/main' }} + + - name: Test geode (gradle) + run: ./gradlew :geode:test + + - name: Upload geode Test Reports + uses: actions/upload-artifact@v7 + if: failure() + with: + name: geode Test Reports + path: geode/build/reports + test-quartz-ios: # Phase 1 of the iOS support plan # (amethyst/plans/2026-05-24-ios-support.md): keep :quartz green on iOS diff --git a/geode/plans/2026-07-24-geode-release.md b/geode/plans/2026-07-24-geode-release.md index 1240138892..d27541a360 100644 --- a/geode/plans/2026-07-24-geode-release.md +++ b/geode/plans/2026-07-24-geode-release.md @@ -45,7 +45,7 @@ Two simplifications vs. the CLI: | Asset naming (`geode---`) | `scripts/asset-name.sh` | | Release matrix + GHCR push | `.github/workflows/create-release.yml` (`build-geode`, `docker-geode`) | | Homebrew formula auto-sync | `.github/workflows/bump-homebrew-geode-formula.yml` | -| geode tests in CI | `.github/workflows/build.yml` (`:geode:test`) | +| geode tests in CI (dedicated `test-geode` job) | `.github/workflows/build.yml` | | Operator docs | `geode/README.md` | ## Distribution channels