Skip to content

docs: CI is no longer the only way to compile this module - #48

Merged
GeiserX merged 1 commit into
mainfrom
docs/build-loop-without-jvm
Aug 5, 2026
Merged

docs: CI is no longer the only way to compile this module#48
GeiserX merged 1 commit into
mainfrom
docs/build-loop-without-jvm

Conversation

@GeiserX

@GeiserX GeiserX commented Aug 5, 2026

Copy link
Copy Markdown
Owner

CLAUDE.md said:

No local Java on macOS dev machine — all compilation is via GitHub Actions CI.

That made every change here a CI round trip. It is now only half true, and the true half is worse than it read.

The mini has a JDK, and it is broken

brew install --cask temurin@17 succeeds, and then:

SIGBUS (0xa) ... V [libjvm.dylib+0x407430] CodeHeap::allocate(unsigned long)+0x1e0

on plain java -version. Also in -Xint (no JIT), and with -XX:ReservedCodeCacheSize=64m. The arch is right (arm64 JDK on arm64 host) and codesign shows an intact signature with the hardened-runtime flag — so it is the JVM itself, not Gradle, the Android SDK, or quarantine.

Worth writing down mainly so nobody re-installs JDKs there expecting a different outcome. I did, twice.

What works

Linux Docker on the build host. scripts/remote-gradle.sh rsyncs the module and runs Gradle in eclipse-temurin:17-jdk — the same major version ci.yml uses — against a persistent SDK and Gradle cache:

cold ~3 min
warm test ~26 s
lintDebug ~57 s

This turned the Android work in #47 from CI-roulette into a real loop, and caught a compile error (app.name vs app.displayName) plus nine mutation controls that would each have cost a CI round trip.

Stated as a pre-check, not a replacement

CI additionally builds the signed release variant and runs lint against app/lint-baseline.xml. Neither happens here, so the doc and the script header both say a green local run must never be reported as "CI passed".

The rsync excludes .beads deliberately — these repos are public and one bead holds real wallet addresses.

CLAUDE.md said "No local Java on macOS dev machine -- all compilation is via
GitHub Actions CI", which made every change here a CI round trip.

That is now only half true, and the half that is true is worse than it read:
the mini HAS Temurin 17 and the JVM crashes at startup --

  SIGBUS (0xa) ... V [libjvm.dylib] CodeHeap::allocate

on plain `java -version`, in -Xint, and with a reduced code cache, on a correct
arm64 JDK with an intact signature. So it is the JVM, not Gradle or the SDK, and
re-installing JDKs there is wasted effort. Recorded so the next person does not
repeat it.

Linux Docker on the build host works fine, so scripts/remote-gradle.sh runs the
same major JDK CI uses against a persistent SDK and Gradle cache: ~26s warm
versus a CI round trip.

Stated explicitly as a PRE-CHECK, not a replacement: CI also builds the signed
release variant and runs lint against the baseline, neither of which this does.
A green run here must never be reported as "CI passed".
@coderabbitai

coderabbitai Bot commented Aug 5, 2026

Copy link
Copy Markdown

Warning

Review limit reached

@GeiserX, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 46 minutes

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 69bc819e-3134-45fe-8729-5b7e70b6cf59

📥 Commits

Reviewing files that changed from the base of the PR and between d10d0ec and 248e76f.

📒 Files selected for processing (1)
  • CLAUDE.md

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@GeiserX
GeiserX merged commit 2cea2d3 into main Aug 5, 2026
2 checks passed
@GeiserX
GeiserX deleted the docs/build-loop-without-jvm branch August 5, 2026 18:38
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