| .. | ||
| src/main/kotlin | ||
| build.gradle.kts | ||
| README.md | ||
| settings.gradle.kts | ||
Build plugins
The build-plugin folder defines Gradle build plugins, used as single source of truth for the project configuration.
This helps to avoid duplicated build script setups and provides a central location for all common build logic.
Background
We use Gradle's
sharing build logic in a multi-repo setup
to create common configuration. It allows usage of xyz.gradle.kts files, that are then automatically converted to
Gradle Plugins.
The build-plugin is used as included build in the root settings.gradle.kts and provides all
included xyz.gradle.kts as plugins under their xyz name to the whole project.
The plugins should try to accomplish single responsibility and leave one-off configuration to the module's build.gradle.kts.
Convention plugins
thunderbird.app.android- Configures common options for Android appsthunderbird.app.android.compose- Configures common options for Jetpack Compose, based onthunderbird.app.androidthunderbird.library.android- Configures common options for Android librariesthunderbird.library.android.compose- Configures common options for Jetpack Compose, based onthunderbird.library.androidthunderbird.library.jvm- Configures common options for JVM libraries
Supportive plugins
thunderbird.dependency.check- Gradle Versions: Gradle plugin to discover dependency updates- Use
./gradlew dependencyUpdatesto generate a dependency update report
- Use
thunderbird.quality.detekt- Detekt - Static code analysis for Kotlin- Use
./gradlew detektto check for any issue and./gradlew detektBaselinein case you can't fix the reported issue.
- Use
thunderbird.quality.spotless- Spotless - Code formatter with Ktlint - Kotlin linter and formatter- Use
./gradlew spotlessCheckto check for any issue and./gradlew spotlessApplyto format your code
- Use
Add new build plugin
Create a thunderbird.xyz.gradle.kts file, while xyz describes the new plugin.
If you need to access dependencies that are not yet defined in build-plugin/build.gradle.kts you have to:
- Add the dependency to the version catalog
gradle/libs.versions.toml - Then add it to
build-plugin/build.gradle.kts.- In case of a plugin dependency use
implementation(plugin(libs.plugins.YOUR_PLUGIN_DEPENDENCY)). - Otherwise
implementation(libs.YOUR_DEPENDENCY)).
- In case of a plugin dependency use
When done, add the plugin to build-plugin/src/main/kotlin/ThunderbirdPlugins.kt
Then apply the plugin to any subproject it should be used with:
plugins {
id(ThunderbirdPlugins.xyz)
}
If the plugin is meant for the root build.gradle.kts, you can't use ThunderbirdPlugins, as it's not available to
the plugins block. Instead use:
plugins {
id("thunderbird.xyz")
}