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.
Commands you will actually use
Section titled “Commands you will actually use”./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>How it is wired
Section titled “How it is wired”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-conventionsapplies Spotless everywhere, using Google Java Format for Java and diktat for Kotlin. This is whatspotlessCheckenforces in CI.changeloggenerates 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.
Why Gradle
Section titled “Why Gradle”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