Merge pull request #6698 from thundernest/add-build-plugin-readme
Add build plugin readme
This commit is contained in:
commit
b357bc1e1b
6 changed files with 76 additions and 2 deletions
|
@ -1,5 +1,5 @@
|
|||
plugins {
|
||||
id("thunderbird.app.android.default")
|
||||
id("thunderbird.app.android")
|
||||
}
|
||||
|
||||
if (rootProject.testCoverage) {
|
||||
|
|
70
build-plugin/README.md
Normal file
70
build-plugin/README.md
Normal file
|
@ -0,0 +1,70 @@
|
|||
# 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](https://docs.gradle.org/current/samples/sample_publishing_convention_plugins.html)
|
||||
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 apps
|
||||
- `thunderbird.app.android.compose` - Configures common options for Jetpack Compose, based
|
||||
on `thunderbird.app.android`
|
||||
- `thunderbird.library.android` - Configures common options for Android libraries
|
||||
- `thunderbird.library.android.compose` - Configures common options for Jetpack Compose, based
|
||||
on `thunderbird.library.android`
|
||||
- `thunderbird.library.jvm` - Configures common options for JVM libraries
|
||||
|
||||
## Supportive plugins
|
||||
|
||||
- `thunderbird.quality.detekt` - [Detekt - Static code analysis for Kotlin ](https://detekt.dev/)
|
||||
- Use `./gradlew detekt` to check for any issue and `./gradlew detektBaseline` in case you can't fix the reported
|
||||
issue.
|
||||
- `thunderbird.quality.spotless` - [Spotless - Code formatter](https://github.com/diffplug/spotless)
|
||||
with [Ktlint - Kotlin linter and formatter](https://pinterest.github.io/ktlint/)
|
||||
- Use `./gradlew spotlessCheck` to check for any issue and `./gradlew spotlessApply` to format your code
|
||||
|
||||
## 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:
|
||||
|
||||
1. Add the dependency to the version catalog `gradle/libs.versions.toml`
|
||||
2. Then add it to `build-plugin/build.gradle.kts`.
|
||||
1. In case of a plugin dependency use `implementation(plugin(libs.plugins.YOUR_PLUGIN_DEPENDENCY))`.
|
||||
1. Otherwise `implementation(libs.YOUR_DEPENDENCY))`.
|
||||
|
||||
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")
|
||||
}
|
||||
```
|
||||
|
||||
## Acknowledgments
|
||||
|
||||
- [Herding Elephants | Square Corner Blog](https://developer.squareup.com/blog/herding-elephants/)
|
||||
- [Idiomatic Gradle: How do I idiomatically structure a large build with Gradle](https://github.com/jjohannes/idiomatic-gradle#idiomatic-build-logic-structure)
|
|
@ -1,6 +1,7 @@
|
|||
object ThunderbirdPlugins {
|
||||
|
||||
object App {
|
||||
const val android = "thunderbird.app.android"
|
||||
const val androidCompose = "thunderbird.app.android.compose"
|
||||
}
|
||||
object Library {
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
plugins {
|
||||
id("thunderbird.app.android.default")
|
||||
id("thunderbird.app.android")
|
||||
}
|
||||
|
||||
android {
|
||||
|
|
|
@ -30,6 +30,7 @@
|
|||
<ID>CyclomaticComplexMethod:K9NotificationStrategy.kt$K9NotificationStrategy$override fun shouldNotifyForMessage( account: Account, localFolder: LocalFolder, message: LocalMessage, isOldMessage: Boolean, ): Boolean</ID>
|
||||
<ID>CyclomaticComplexMethod:MessageList.kt$MessageList$private fun decodeExtrasToLaunchData(intent: Intent): LaunchData</ID>
|
||||
<ID>CyclomaticComplexMethod:MessageList.kt$MessageList$private fun onCustomKeyDown(event: KeyEvent): Boolean</ID>
|
||||
<ID>CyclomaticComplexMethod:MessageListAdapter.kt$MessageListAdapter$private fun bindMessageViewHolder(holder: MessageViewHolder, messageListItem: MessageListItem)</ID>
|
||||
<ID>CyclomaticComplexMethod:MessageListFragment.kt$MessageListFragment$override fun onOptionsItemSelected(item: MenuItem): Boolean</ID>
|
||||
<ID>CyclomaticComplexMethod:MessagePartDatabaseHelpers.kt$MessagePartEntry$override fun equals(other: Any?): Boolean</ID>
|
||||
<ID>CyclomaticComplexMethod:MessagePartDatabaseHelpers.kt$MessagePartEntry$override fun hashCode(): Int</ID>
|
||||
|
@ -139,6 +140,7 @@
|
|||
<ID>LongMethod:MessageList.kt$MessageList$private fun decodeExtrasToLaunchData(intent: Intent): LaunchData</ID>
|
||||
<ID>LongMethod:MessageList.kt$MessageList$private fun onCustomKeyDown(event: KeyEvent): Boolean</ID>
|
||||
<ID>LongMethod:MessageList.kt$MessageList$public override fun onCreate(savedInstanceState: Bundle?)</ID>
|
||||
<ID>LongMethod:MessageListAdapter.kt$MessageListAdapter$private fun bindMessageViewHolder(holder: MessageViewHolder, messageListItem: MessageListItem)</ID>
|
||||
<ID>LongMethod:MessageListRepositoryTest.kt$MessageListRepositoryTest$@Test fun `getThread() should use flag values from the cache`()</ID>
|
||||
<ID>LongMethod:MessageTest.kt$MessageTest$@Test fun toBodyPart()</ID>
|
||||
<ID>LongMethod:MessageTest.kt$MessageTest$@Test fun writeTo_withNestedMessage()</ID>
|
||||
|
@ -448,6 +450,7 @@
|
|||
<ID>MagicNumber:StorageMigrations.kt$StorageMigrations$17</ID>
|
||||
<ID>MagicNumber:StorageMigrations.kt$StorageMigrations$18</ID>
|
||||
<ID>MagicNumber:StorageMigrations.kt$StorageMigrations$19</ID>
|
||||
<ID>MagicNumber:StorageMigrations.kt$StorageMigrations$20</ID>
|
||||
<ID>MagicNumber:StorageMigrations.kt$StorageMigrations$3</ID>
|
||||
<ID>MagicNumber:StorageMigrations.kt$StorageMigrations$4</ID>
|
||||
<ID>MagicNumber:StorageMigrations.kt$StorageMigrations$5</ID>
|
||||
|
|
Loading…
Reference in a new issue