Skip to content
Select theme

The build system

The monorepo is a Gradle multi-project build driven by the wrapper. Use ./gradlew, never a locally installed gradle, so everyone builds with the same version.

Terminal window
./gradlew build # build and test everything
./gradlew test # all tests
./gradlew spotlessApply # format Java and Kotlin
./gradlew spotlessCheck # verify formatting only
# a single module
./gradlew :services:localega-tsd-proxy:build -x test
# a single test
./gradlew :e2eTests:test --tests <fully.qualified.ClassName>

Modules are registered in settings.gradle.kts. Two pieces of shared machinery live in buildSrc as convention plugins, which is why individual module build files stay short:

  • formatting-conventions applies Spotless everywhere, using Google Java Format for Java and diktat for Kotlin. This is what spotlessCheck enforces in CI.
  • changelog generates per-module changelogs from Conventional Commit subjects. It is the reason commit message format is load-bearing rather than cosmetic.

The Go modules are wrapped as Gradle tasks too, so ./gradlew build covers the Go components as well as the JVM ones. Those tasks shell out to go build and go test.

The relevant properties for a repository shaped like this one are incremental builds (only changed tasks rerun), first-class multi-project support, and the ability to write custom tasks in Kotlin, which is what makes the convention plugins above possible. Gradle also wraps the Go modules under the same entry point, so a single ./gradlew build covers a codebase in two languages.

If you are new to Gradle itself, the Gradle User Manual is the reference. This page deliberately does not restate it.

Built from f91944d