Skip to content

Builds

Every push to an open pull request builds that commit in a clean, isolated environment. Builds are keyed by commit — pushing again supersedes the previous build, and re-delivered events never restart a build that's already running.

Framework detection

Ramus inspects the repository and picks the right build shape automatically:

FrameworkHow it builds
Kotlin / JavaGradle (assembleDebug by default)
Jetpack ComposeStandard Gradle — nothing extra to configure
Expo / React NativeRelease-mode bundle via the project's native Android build
Flutterflutter build apk with the project's pinned toolchain

The output is an installable APK. If your project builds an APK locally, it should build on Ramus without configuration.

Build status

The PR comment and the Ramus PR page both track four phases:

  1. Clone — fetch the PR's commit with a short-lived, repository-scoped token.
  2. Build — run the framework build in a fresh environment.
  3. Bake — install the APK into a device image and snapshot it, so previews boot in seconds instead of installing on demand.
  4. Upload — store the artifacts.

A failed build shows its error and log right on the PR page — click any build row to open the full detail panel.

Artifacts

Ready builds keep their APK downloadable from the build panel — useful for installing the exact reviewed binary on a physical device. Artifacts expire together with the preview; expired builds say so in the panel.

Build logs stream live while the build runs. After completion, the console ring buffer is not retained, but the full stored log stays linked from the build panel.