Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -143,9 +143,11 @@ internal class AccountCreator(
is SpecialFolderOption.None -> {
if (isAutomatic) SpecialFolderSelection.AUTOMATIC else SpecialFolderSelection.MANUAL
}

is SpecialFolderOption.Regular -> {
SpecialFolderSelection.MANUAL
}

is SpecialFolderOption.Special -> {
if (isAutomatic) SpecialFolderSelection.AUTOMATIC else SpecialFolderSelection.MANUAL
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ fun LazyGridScope.tabItems() {
icon = {
when (tabItem) {
PrimaryTabItems.TextOnly -> null

PrimaryTabItems.TextWithIcon, PrimaryTabItems.TextWithIconAndBadge ->
Icon(imageVector = requireNotNull(tabItem.icon))
}
Expand Down
8 changes: 8 additions & 0 deletions build-plugin/plugin/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,14 @@ gradlePlugin {
id = "net.thunderbird.gradle.plugin.quality.coverage"
implementationClass = "net.thunderbird.gradle.plugin.quality.coverage.CodeCoveragePlugin"
}
register("QualityDetekt") {
id = "net.thunderbird.gradle.plugin.quality.detekt"
implementationClass = "net.thunderbird.gradle.plugin.quality.detekt.DetektPlugin"
}
register("QualitySpotless") {
id = "net.thunderbird.gradle.plugin.quality.spotless"
implementationClass = "net.thunderbird.gradle.plugin.quality.spotless.SpotlessPlugin"
}
}
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package net.thunderbird.gradle.plugin

import org.gradle.api.JavaVersion
import org.jetbrains.kotlin.gradle.dsl.JvmTarget

object ProjectConfig {

object Compiler {
val javaCompatibility = JavaVersion.VERSION_11
val jvmTarget = JvmTarget.JVM_11
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,12 @@ package net.thunderbird.gradle.plugin.app.badging

import com.android.build.api.artifact.SingleArtifact
import com.android.build.api.variant.Aapt2
import com.android.build.api.variant.ApplicationAndroidComponentsExtension
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.api.tasks.Copy
import org.gradle.kotlin.dsl.assign
import org.gradle.kotlin.dsl.configure
import com.android.build.api.variant.ApplicationAndroidComponentsExtension
import org.gradle.api.tasks.Copy
import org.gradle.kotlin.dsl.register

private val variantsToCheck = listOf("release", "beta", "daily")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ import org.gradle.api.tasks.TaskAction
import org.gradle.process.ExecOperations

@CacheableTask
abstract class GenerateBadgingTask : DefaultTask() {
abstract class GenerateBadgingTask : DefaultTask() {
@get:OutputFile
abstract val badging: RegularFileProperty

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
package net.thunderbird.gradle.plugin.app.versioning

import java.io.File
import javax.xml.parsers.DocumentBuilderFactory
import javax.xml.xpath.XPathConstants
import javax.xml.xpath.XPathFactory
import org.gradle.api.DefaultTask
import org.gradle.api.file.ConfigurableFileCollection
import org.gradle.api.file.RegularFileProperty
Expand All @@ -10,10 +14,6 @@ import org.gradle.api.tasks.InputFiles
import org.gradle.api.tasks.Optional
import org.gradle.api.tasks.OutputFile
import org.gradle.api.tasks.TaskAction
import java.io.File
import javax.xml.parsers.DocumentBuilderFactory
import javax.xml.xpath.XPathConstants
import javax.xml.xpath.XPathFactory

abstract class PrintVersionInfoTask : DefaultTask() {
@get:Input
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -74,5 +74,3 @@ class VersioningPlugin : Plugin<Project> {
if (it.isLowerCase()) it.titlecase() else it.toString()
}
}


Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ internal fun KoverReportFiltersConfig.composeFilter() {
classes(
// Compose Resources
"*.Res",
"*.ActualResourceCollectorsKt"
"*.ActualResourceCollectorsKt",
)

annotatedBy(
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,112 @@
package net.thunderbird.gradle.plugin.quality.detekt

import io.gitlab.arturbosch.detekt.Detekt
import io.gitlab.arturbosch.detekt.DetektCreateBaselineTask
import io.gitlab.arturbosch.detekt.extensions.DetektExtension
import net.thunderbird.gradle.plugin.ProjectConfig
import net.thunderbird.gradle.plugin.libs
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.kotlin.dsl.dependencies
import org.gradle.kotlin.dsl.withType

/**
* Detekt plugin configuration.
*
* Applies the Detekt plugin, sets up configuration, and defines tasks for static code analysis.
*/
class DetektPlugin : Plugin<Project> {
override fun apply(target: Project) {
with(target) {
pluginManager.apply("io.gitlab.arturbosch.detekt")

// Access libs extension lazily since it might not be available yet when the plugin is applied
// (especially in precompiled script plugins). Could be removed once all precompiled script plugins
// are migrated to the new plugin model.
afterEvaluate {
dependencies {
add("detektPlugins", libs.detekt.plugin.compose)
}
}

if (this == rootProject) {
configureRootDetektTasks()
} else {
configureDetekt()
configureDetektTasks()
}
}
}

private fun Project.configureDetekt() {
extensions.configure<DetektExtension>("detekt") {
config.setFrom(project.rootProject.files("config/detekt/detekt.yml"))

val name = project.path.replace(":", "-").replace("/", "-")
baseline = project.rootProject.file("config/detekt/detekt-baseline$name.xml")

ignoredBuildTypes = listOf("release")
}
}

private fun Project.configureDetektTasks() {
with(tasks) {
withType<Detekt>().configureEach {
if (name.contains("androidHostTest", ignoreCase = true)) {
enabled = false
}

jvmTarget = ProjectConfig.Compiler.jvmTarget.target

exclude(defaultExcludes)

reports {
html.required.set(true)
sarif.required.set(true)
xml.required.set(true)
}

tasks.getByName("build").dependsOn(this)
}

withType<DetektCreateBaselineTask>().configureEach {
if (name.contains("androidHostTest", ignoreCase = true)) {
enabled = false
}

jvmTarget = ProjectConfig.Compiler.jvmTarget.target

exclude(defaultExcludes)
}

register("detektAll") {
group = "verification"
description = "Runs detekt on this project"

dependsOn(tasks.withType<Detekt>())
}
}
}

private fun Project.configureRootDetektTasks() {
with(tasks) {
register("detektAll") {
group = "verification"
description = "Runs detekt on the whole project"

allprojects {
this@register.dependsOn(tasks.withType<Detekt>())
}
}
}
}
}

private val defaultExcludes = listOf(
"**/.gradle/**",
"**/.idea/**",
"**/build/**",
"**/generated/**",
".github/**",
"gradle/**",
)
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
package net.thunderbird.gradle.plugin.quality.spotless

val kotlinEditorConfigOverride = mapOf(
"ktlint_code_style" to "intellij_idea",
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
package net.thunderbird.gradle.plugin.quality.spotless

import com.diffplug.gradle.spotless.SpotlessExtension
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.kotlin.dsl.configure

/**
* A Gradle plugin to configure Spotless code formatting for Kotlin, Kotlin Gradle scripts, Markdown,
* and miscellaneous files like .gitignore.
*/
class SpotlessPlugin : Plugin<Project> {
override fun apply(target: Project) {
with(target) {
pluginManager.apply("com.diffplug.spotless")

if (this == rootProject) {
configureSpotlessRoot()
} else {
configureSpotless()
}
}
}

private fun Project.configureSpotless() {
extensions.configure<SpotlessExtension> {
kotlin {
target(
"src/*/kotlin/*.kt",
"src/*/kotlin/**/*.kt",
)

ktlint()
.setEditorConfigPath("${rootProject.projectDir}/.editorconfig")
.editorConfigOverride(kotlinEditorConfigOverride)
}

kotlinGradle {
target(
"*.gradle.kts",
)

ktlint()
.setEditorConfigPath("${rootProject.projectDir}/.editorconfig")
.editorConfigOverride(
mapOf(
"ktlint_code_style" to "intellij_idea",
"ktlint_standard_function-expression-body" to "disabled",
"ktlint_standard_function-signature" to "disabled",
),
)
}

flexmark {
target(
"*.md",
)
flexmark()
}

format("misc") {
target(".gitignore")
trimTrailingWhitespace()
}
}
}

private fun Project.configureSpotlessRoot() {
extensions.configure<SpotlessExtension> {
kotlin {
target(
"build-plugin/plugin/src/*/kotlin/*.kt",
"build-plugin/plugin/src/*/kotlin/**/*.kt",
)
ktlint()
.setEditorConfigPath("${project.rootProject.projectDir}/.editorconfig")
.editorConfigOverride(kotlinEditorConfigOverride)
}

kotlinGradle {
target(
"*.gradle.kts",
"build-plugin/*.gradle.kts",
"build-plugin/plugin/*.gradle.kts",
)

ktlint()
.setEditorConfigPath("${project.rootProject.projectDir}/.editorconfig")
.editorConfigOverride(
mapOf(
"ktlint_code_style" to "intellij_idea",
"ktlint_standard_function-expression-body" to "disabled",
"ktlint_standard_function-signature" to "disabled",
),
)
}

flexmark {
target(
"*.md",
"docs/*.md",
"docs/**/*.md",
)
flexmark()
}

format("misc") {
target(".gitignore")
trimTrailingWhitespace()
}
}
}
}
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
plugins {
id("thunderbird.app.android")
id("org.jetbrains.kotlin.plugin.compose")
id("thunderbird.quality.detekt.typed")
id("net.thunderbird.gradle.plugin.quality.coverage")
id("thunderbird.quality.spotless")
id("net.thunderbird.gradle.plugin.quality.detekt")
id("net.thunderbird.gradle.plugin.quality.spotless")
}

android {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
plugins {
id("com.android.application")
id("thunderbird.quality.detekt.typed")
id("net.thunderbird.gradle.plugin.quality.coverage")
id("thunderbird.quality.spotless")
id("net.thunderbird.gradle.plugin.quality.detekt")
id("net.thunderbird.gradle.plugin.quality.spotless")
}

android {
Expand Down
4 changes: 2 additions & 2 deletions build-plugin/src/main/kotlin/thunderbird.app.jvm.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
plugins {
id("application")
id("org.jetbrains.kotlin.jvm")
id("thunderbird.quality.detekt.typed")
id("net.thunderbird.gradle.plugin.quality.coverage")
id("thunderbird.quality.spotless")
id("net.thunderbird.gradle.plugin.quality.detekt")
id("net.thunderbird.gradle.plugin.quality.spotless")
}

java {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@ plugins {
id("thunderbird.library.android")
id("org.jetbrains.kotlin.plugin.compose")
id("org.jetbrains.kotlin.plugin.serialization")
id("thunderbird.quality.detekt.typed")
id("net.thunderbird.gradle.plugin.quality.coverage")
id("thunderbird.quality.spotless")
id("net.thunderbird.gradle.plugin.quality.detekt")
id("net.thunderbird.gradle.plugin.quality.spotless")
}

androidComponents {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
plugins {
id("com.android.library")
id("thunderbird.quality.detekt.typed")
id("net.thunderbird.gradle.plugin.quality.coverage")
id("thunderbird.quality.spotless")
id("net.thunderbird.gradle.plugin.quality.detekt")
id("net.thunderbird.gradle.plugin.quality.spotless")
}

android {
Expand Down
Loading
Loading