mirror of
https://github.com/android-password-store/Android-Password-Store
synced 2025-09-02 07:15:21 +00:00
kotlin-plugins: convert to full plugins
This commit is contained in:
@@ -24,6 +24,35 @@ afterEvaluate {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
gradlePlugin {
|
||||||
|
plugins {
|
||||||
|
register("binary-compatibility") {
|
||||||
|
id = "com.github.android-password-store.binary-compatibility"
|
||||||
|
implementationClass = "dev.msfjarvis.aps.gradle.BinaryCompatibilityPlugin"
|
||||||
|
}
|
||||||
|
register("kotlin-android") {
|
||||||
|
id = "com.github.android-password-store.kotlin-android"
|
||||||
|
implementationClass = "dev.msfjarvis.aps.gradle.KotlinAndroidPlugin"
|
||||||
|
}
|
||||||
|
register("kotlin-common") {
|
||||||
|
id = "com.github.android-password-store.kotlin-common"
|
||||||
|
implementationClass = "dev.msfjarvis.aps.gradle.KotlinCommonPlugin"
|
||||||
|
}
|
||||||
|
register("kotlin-kapt") {
|
||||||
|
id = "com.github.android-password-store.kotlin-kapt"
|
||||||
|
implementationClass = "dev.msfjarvis.aps.gradle.KotlinKaptPlugin"
|
||||||
|
}
|
||||||
|
register("kotlin-library") {
|
||||||
|
id = "com.github.android-password-store.kotlin-library"
|
||||||
|
implementationClass = "dev.msfjarvis.aps.gradle.KotlinLibraryPlugin"
|
||||||
|
}
|
||||||
|
register("spotless") {
|
||||||
|
id = "com.github.android-password-store.spotless"
|
||||||
|
implementationClass = "dev.msfjarvis.aps.gradle.SpotlessPlugin"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation(libs.build.agp)
|
implementation(libs.build.agp)
|
||||||
implementation(libs.build.binarycompat)
|
implementation(libs.build.binarycompat)
|
||||||
@@ -38,7 +67,7 @@ configurations.all {
|
|||||||
val overridenVersion = System.getenv(overrideName)
|
val overridenVersion = System.getenv(overrideName)
|
||||||
if (!overridenVersion.isNullOrEmpty()) {
|
if (!overridenVersion.isNullOrEmpty()) {
|
||||||
project.logger.lifecycle(
|
project.logger.lifecycle(
|
||||||
"Overriding dependency ${requested.group}:${requested.name} to version ${overridenVersion}"
|
"Overriding dependency ${requested.group}:${requested.name} to version $overridenVersion"
|
||||||
)
|
)
|
||||||
useVersion(overridenVersion)
|
useVersion(overridenVersion)
|
||||||
}
|
}
|
||||||
|
@@ -1,21 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright © 2014-2021 The Android Password Store Authors. All Rights Reserved.
|
|
||||||
* SPDX-License-Identifier: GPL-3.0-only
|
|
||||||
*/
|
|
||||||
|
|
||||||
plugins { id("org.jetbrains.kotlinx.binary-compatibility-validator") }
|
|
||||||
|
|
||||||
apiValidation {
|
|
||||||
ignoredProjects =
|
|
||||||
mutableSetOf(
|
|
||||||
"app",
|
|
||||||
"coroutine-utils",
|
|
||||||
"coroutine-utils-testing",
|
|
||||||
"crypto-common",
|
|
||||||
"crypto-pgpainless",
|
|
||||||
"format-common",
|
|
||||||
"diceware",
|
|
||||||
"random",
|
|
||||||
"sentry-stub",
|
|
||||||
)
|
|
||||||
}
|
|
@@ -1,9 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright © 2014-2021 The Android Password Store Authors. All Rights Reserved.
|
|
||||||
* SPDX-License-Identifier: GPL-3.0-only
|
|
||||||
*/
|
|
||||||
|
|
||||||
plugins {
|
|
||||||
kotlin("android")
|
|
||||||
id("com.github.android-password-store.kotlin-common")
|
|
||||||
}
|
|
@@ -1,38 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright © 2014-2021 The Android Password Store Authors. All Rights Reserved.
|
|
||||||
* SPDX-License-Identifier: GPL-3.0-only
|
|
||||||
*/
|
|
||||||
|
|
||||||
import org.gradle.api.JavaVersion
|
|
||||||
import org.gradle.api.tasks.compile.JavaCompile
|
|
||||||
import org.gradle.api.tasks.testing.Test
|
|
||||||
import org.gradle.api.tasks.testing.logging.TestLogEvent
|
|
||||||
import org.gradle.kotlin.dsl.withType
|
|
||||||
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
|
|
||||||
|
|
||||||
val additionalCompilerArgs =
|
|
||||||
listOf(
|
|
||||||
"-opt-in=kotlin.RequiresOptIn",
|
|
||||||
"-P",
|
|
||||||
"plugin:androidx.compose.compiler.plugins.kotlin:suppressKotlinVersionCompatibilityCheck=true",
|
|
||||||
)
|
|
||||||
|
|
||||||
tasks.withType<JavaCompile>().configureEach {
|
|
||||||
sourceCompatibility = JavaVersion.VERSION_11.toString()
|
|
||||||
targetCompatibility = JavaVersion.VERSION_11.toString()
|
|
||||||
}
|
|
||||||
|
|
||||||
tasks.withType<KotlinCompile>().configureEach {
|
|
||||||
kotlinOptions {
|
|
||||||
allWarningsAsErrors = true
|
|
||||||
jvmTarget = JavaVersion.VERSION_11.toString()
|
|
||||||
freeCompilerArgs = freeCompilerArgs + additionalCompilerArgs
|
|
||||||
languageVersion = "1.5"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
tasks.withType<Test>().configureEach {
|
|
||||||
maxParallelForks = Runtime.getRuntime().availableProcessors() * 2
|
|
||||||
testLogging { events(TestLogEvent.PASSED, TestLogEvent.SKIPPED, TestLogEvent.FAILED) }
|
|
||||||
doNotTrackState("We want tests to always run even if Gradle thinks otherwise")
|
|
||||||
}
|
|
@@ -1,43 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright © 2014-2021 The Android Password Store Authors. All Rights Reserved.
|
|
||||||
* SPDX-License-Identifier: GPL-3.0-only
|
|
||||||
*/
|
|
||||||
|
|
||||||
import org.gradle.api.Project
|
|
||||||
|
|
||||||
plugins {
|
|
||||||
kotlin("android")
|
|
||||||
kotlin("kapt")
|
|
||||||
}
|
|
||||||
|
|
||||||
afterEvaluate {
|
|
||||||
kapt {
|
|
||||||
javacOptions {
|
|
||||||
if (hasDaggerCompilerDependency()) {
|
|
||||||
// https://dagger.dev/dev-guide/compiler-options#fastinit-mode
|
|
||||||
option("-Adagger.fastInit=enabled")
|
|
||||||
// Enable the better, experimental error messages
|
|
||||||
// https://github.com/google/dagger/commit/0d2505a727b54f47b8677f42dd4fc5c1924e37f5
|
|
||||||
option("-Adagger.experimentalDaggerErrorMessages=enabled")
|
|
||||||
// Share test components for when we start leveraging Hilt for tests
|
|
||||||
// https://github.com/google/dagger/releases/tag/dagger-2.34
|
|
||||||
option("-Adagger.hilt.shareTestComponents=true")
|
|
||||||
// KAPT nests errors causing real issues to be suppressed in CI logs
|
|
||||||
option("-Xmaxerrs", 500)
|
|
||||||
// Enables per-module validation for faster error detection
|
|
||||||
// https://github.com/google/dagger/commit/325b516ac6a53d3fc973d247b5231fafda9870a2
|
|
||||||
option("-Adagger.moduleBindingValidation=ERROR")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// disable kapt tasks for unit tests
|
|
||||||
tasks
|
|
||||||
.matching { it.name.startsWith("kapt") && it.name.endsWith("UnitTestKotlin") }
|
|
||||||
.configureEach { enabled = false }
|
|
||||||
|
|
||||||
fun Project.hasDaggerCompilerDependency(): Boolean {
|
|
||||||
return configurations.any {
|
|
||||||
it.dependencies.any { dependency -> dependency.name == "hilt-compiler" }
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,17 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright © 2014-2021 The Android Password Store Authors. All Rights Reserved.
|
|
||||||
* SPDX-License-Identifier: GPL-3.0-only
|
|
||||||
*/
|
|
||||||
|
|
||||||
import org.gradle.kotlin.dsl.withType
|
|
||||||
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
|
|
||||||
|
|
||||||
plugins { id("com.github.android-password-store.kotlin-common") }
|
|
||||||
|
|
||||||
tasks.withType<KotlinCompile>().configureEach {
|
|
||||||
kotlinOptions {
|
|
||||||
if (!name.contains("test", ignoreCase = true)) {
|
|
||||||
freeCompilerArgs += listOf("-Xexplicit-api=strict")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,28 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright © 2014-2021 The Android Password Store Authors. All Rights Reserved.
|
|
||||||
* SPDX-License-Identifier: GPL-3.0-only
|
|
||||||
*/
|
|
||||||
|
|
||||||
plugins { id("com.diffplug.spotless") }
|
|
||||||
|
|
||||||
val KTFMT_VERSION = "0.37"
|
|
||||||
|
|
||||||
spotless {
|
|
||||||
kotlin {
|
|
||||||
ktfmt(KTFMT_VERSION).googleStyle()
|
|
||||||
target("**/*.kt")
|
|
||||||
targetExclude("**/build/")
|
|
||||||
}
|
|
||||||
kotlinGradle {
|
|
||||||
ktfmt(KTFMT_VERSION).googleStyle()
|
|
||||||
target("**/*.kts")
|
|
||||||
targetExclude("**/build/")
|
|
||||||
}
|
|
||||||
format("xml") {
|
|
||||||
target("**/*.xml")
|
|
||||||
targetExclude("**/build/", ".idea/")
|
|
||||||
trimTrailingWhitespace()
|
|
||||||
indentWithSpaces()
|
|
||||||
endWithNewline()
|
|
||||||
}
|
|
||||||
}
|
|
@@ -0,0 +1,33 @@
|
|||||||
|
/*
|
||||||
|
* Copyright © 2014-2021 The Android Password Store Authors. All Rights Reserved.
|
||||||
|
* SPDX-License-Identifier: GPL-3.0-only
|
||||||
|
*/
|
||||||
|
|
||||||
|
package dev.msfjarvis.aps.gradle
|
||||||
|
|
||||||
|
import kotlinx.validation.ApiValidationExtension
|
||||||
|
import kotlinx.validation.BinaryCompatibilityValidatorPlugin
|
||||||
|
import org.gradle.api.Plugin
|
||||||
|
import org.gradle.api.Project
|
||||||
|
import org.gradle.kotlin.dsl.apply
|
||||||
|
import org.gradle.kotlin.dsl.getByType
|
||||||
|
|
||||||
|
@Suppress("Unused")
|
||||||
|
class BinaryCompatibilityPlugin : Plugin<Project> {
|
||||||
|
|
||||||
|
override fun apply(project: Project) {
|
||||||
|
project.pluginManager.apply(BinaryCompatibilityValidatorPlugin::class)
|
||||||
|
project.extensions.getByType<ApiValidationExtension>().ignoredProjects =
|
||||||
|
mutableSetOf(
|
||||||
|
"app",
|
||||||
|
"coroutine-utils",
|
||||||
|
"coroutine-utils-testing",
|
||||||
|
"crypto-common",
|
||||||
|
"crypto-pgpainless",
|
||||||
|
"format-common",
|
||||||
|
"diceware",
|
||||||
|
"random",
|
||||||
|
"sentry-stub",
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,22 @@
|
|||||||
|
/*
|
||||||
|
* Copyright © 2014-2021 The Android Password Store Authors. All Rights Reserved.
|
||||||
|
* SPDX-License-Identifier: GPL-3.0-only
|
||||||
|
*/
|
||||||
|
|
||||||
|
package dev.msfjarvis.aps.gradle
|
||||||
|
|
||||||
|
import org.gradle.api.Plugin
|
||||||
|
import org.gradle.api.Project
|
||||||
|
import org.gradle.kotlin.dsl.apply
|
||||||
|
import org.jetbrains.kotlin.gradle.plugin.KotlinAndroidPluginWrapper
|
||||||
|
|
||||||
|
@Suppress("Unused")
|
||||||
|
class KotlinAndroidPlugin : Plugin<Project> {
|
||||||
|
|
||||||
|
override fun apply(project: Project) {
|
||||||
|
project.pluginManager.run {
|
||||||
|
apply(KotlinAndroidPluginWrapper::class)
|
||||||
|
apply(KotlinCommonPlugin::class)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,50 @@
|
|||||||
|
/*
|
||||||
|
* Copyright © 2014-2021 The Android Password Store Authors. All Rights Reserved.
|
||||||
|
* SPDX-License-Identifier: GPL-3.0-only
|
||||||
|
*/
|
||||||
|
|
||||||
|
package dev.msfjarvis.aps.gradle
|
||||||
|
|
||||||
|
import org.gradle.api.JavaVersion
|
||||||
|
import org.gradle.api.Plugin
|
||||||
|
import org.gradle.api.Project
|
||||||
|
import org.gradle.api.tasks.compile.JavaCompile
|
||||||
|
import org.gradle.api.tasks.testing.Test
|
||||||
|
import org.gradle.api.tasks.testing.logging.TestLogEvent
|
||||||
|
import org.gradle.kotlin.dsl.withType
|
||||||
|
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
|
||||||
|
|
||||||
|
@Suppress("Unused")
|
||||||
|
class KotlinCommonPlugin : Plugin<Project> {
|
||||||
|
|
||||||
|
override fun apply(project: Project) {
|
||||||
|
project.tasks.run {
|
||||||
|
withType<JavaCompile>().configureEach {
|
||||||
|
sourceCompatibility = JavaVersion.VERSION_11.toString()
|
||||||
|
targetCompatibility = JavaVersion.VERSION_11.toString()
|
||||||
|
}
|
||||||
|
withType<KotlinCompile>().configureEach {
|
||||||
|
kotlinOptions {
|
||||||
|
allWarningsAsErrors = true
|
||||||
|
jvmTarget = JavaVersion.VERSION_11.toString()
|
||||||
|
freeCompilerArgs = freeCompilerArgs + ADDITIONAL_COMPILER_ARGS
|
||||||
|
languageVersion = "1.5"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
withType<Test>().configureEach {
|
||||||
|
maxParallelForks = Runtime.getRuntime().availableProcessors() * 2
|
||||||
|
testLogging { events(TestLogEvent.PASSED, TestLogEvent.SKIPPED, TestLogEvent.FAILED) }
|
||||||
|
doNotTrackState("We want tests to always run even if Gradle thinks otherwise")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private companion object {
|
||||||
|
private val ADDITIONAL_COMPILER_ARGS =
|
||||||
|
listOf(
|
||||||
|
"-opt-in=kotlin.RequiresOptIn",
|
||||||
|
"-P",
|
||||||
|
"plugin:androidx.compose.compiler.plugins.kotlin:suppressKotlinVersionCompatibilityCheck=true",
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,55 @@
|
|||||||
|
/*
|
||||||
|
* Copyright © 2014-2021 The Android Password Store Authors. All Rights Reserved.
|
||||||
|
* SPDX-License-Identifier: GPL-3.0-only
|
||||||
|
*/
|
||||||
|
|
||||||
|
package dev.msfjarvis.aps.gradle
|
||||||
|
|
||||||
|
import org.gradle.api.Plugin
|
||||||
|
import org.gradle.api.Project
|
||||||
|
import org.gradle.kotlin.dsl.apply
|
||||||
|
import org.gradle.kotlin.dsl.getByType
|
||||||
|
import org.jetbrains.kotlin.gradle.internal.Kapt3GradleSubplugin
|
||||||
|
import org.jetbrains.kotlin.gradle.plugin.KaptExtension
|
||||||
|
import org.jetbrains.kotlin.gradle.plugin.KotlinAndroidPluginWrapper
|
||||||
|
|
||||||
|
@Suppress("Unused")
|
||||||
|
class KotlinKaptPlugin : Plugin<Project> {
|
||||||
|
|
||||||
|
override fun apply(project: Project) {
|
||||||
|
project.pluginManager.run {
|
||||||
|
apply(KotlinAndroidPluginWrapper::class)
|
||||||
|
apply(Kapt3GradleSubplugin::class)
|
||||||
|
}
|
||||||
|
project.afterEvaluate {
|
||||||
|
project.extensions.getByType<KaptExtension>().run {
|
||||||
|
javacOptions {
|
||||||
|
if (hasDaggerCompilerDependency()) {
|
||||||
|
// https://dagger.dev/dev-guide/compiler-options#fastinit-mode
|
||||||
|
option("-Adagger.fastInit=enabled")
|
||||||
|
// Enable the better, experimental error messages
|
||||||
|
// https://github.com/google/dagger/commit/0d2505a727b54f47b8677f42dd4fc5c1924e37f5
|
||||||
|
option("-Adagger.experimentalDaggerErrorMessages=enabled")
|
||||||
|
// Share test components for when we start leveraging Hilt for tests
|
||||||
|
// https://github.com/google/dagger/releases/tag/dagger-2.34
|
||||||
|
option("-Adagger.hilt.shareTestComponents=true")
|
||||||
|
// KAPT nests errors causing real issues to be suppressed in CI logs
|
||||||
|
option("-Xmaxerrs", 500)
|
||||||
|
// Enables per-module validation for faster error detection
|
||||||
|
// https://github.com/google/dagger/commit/325b516ac6a53d3fc973d247b5231fafda9870a2
|
||||||
|
option("-Adagger.moduleBindingValidation=ERROR")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
project.tasks
|
||||||
|
.matching { it.name.startsWith("kapt") && it.name.endsWith("UnitTestKotlin") }
|
||||||
|
.configureEach { enabled = false }
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun Project.hasDaggerCompilerDependency(): Boolean {
|
||||||
|
return configurations.any {
|
||||||
|
it.dependencies.any { dependency -> dependency.name == "hilt-compiler" }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,27 @@
|
|||||||
|
/*
|
||||||
|
* Copyright © 2014-2021 The Android Password Store Authors. All Rights Reserved.
|
||||||
|
* SPDX-License-Identifier: GPL-3.0-only
|
||||||
|
*/
|
||||||
|
|
||||||
|
package dev.msfjarvis.aps.gradle
|
||||||
|
|
||||||
|
import org.gradle.api.Plugin
|
||||||
|
import org.gradle.api.Project
|
||||||
|
import org.gradle.kotlin.dsl.apply
|
||||||
|
import org.gradle.kotlin.dsl.withType
|
||||||
|
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
|
||||||
|
|
||||||
|
@Suppress("Unused")
|
||||||
|
class KotlinLibraryPlugin : Plugin<Project> {
|
||||||
|
|
||||||
|
override fun apply(project: Project) {
|
||||||
|
project.pluginManager.apply(KotlinCommonPlugin::class)
|
||||||
|
project.tasks.withType<KotlinCompile>().configureEach {
|
||||||
|
kotlinOptions {
|
||||||
|
if (!name.contains("test", ignoreCase = true)) {
|
||||||
|
freeCompilerArgs = freeCompilerArgs + listOf("-Xexplicit-api=strict")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,44 @@
|
|||||||
|
/*
|
||||||
|
* Copyright © 2014-2021 The Android Password Store Authors. All Rights Reserved.
|
||||||
|
* SPDX-License-Identifier: GPL-3.0-only
|
||||||
|
*/
|
||||||
|
|
||||||
|
package dev.msfjarvis.aps.gradle
|
||||||
|
|
||||||
|
import com.diffplug.gradle.spotless.SpotlessExtension
|
||||||
|
import com.diffplug.gradle.spotless.SpotlessPlugin
|
||||||
|
import org.gradle.api.Plugin
|
||||||
|
import org.gradle.api.Project
|
||||||
|
import org.gradle.kotlin.dsl.apply
|
||||||
|
import org.gradle.kotlin.dsl.getByType
|
||||||
|
|
||||||
|
@Suppress("Unused")
|
||||||
|
class SpotlessPlugin : Plugin<Project> {
|
||||||
|
|
||||||
|
override fun apply(project: Project) {
|
||||||
|
project.pluginManager.apply(SpotlessPlugin::class)
|
||||||
|
project.extensions.getByType<SpotlessExtension>().run {
|
||||||
|
kotlin {
|
||||||
|
ktfmt(KTFMT_VERSION).googleStyle()
|
||||||
|
target("**/*.kt")
|
||||||
|
targetExclude("**/build/")
|
||||||
|
}
|
||||||
|
kotlinGradle {
|
||||||
|
ktfmt(KTFMT_VERSION).googleStyle()
|
||||||
|
target("**/*.kts")
|
||||||
|
targetExclude("**/build/")
|
||||||
|
}
|
||||||
|
format("xml") {
|
||||||
|
target("**/*.xml")
|
||||||
|
targetExclude("**/build/", ".idea/")
|
||||||
|
trimTrailingWhitespace()
|
||||||
|
indentWithSpaces()
|
||||||
|
endWithNewline()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private companion object {
|
||||||
|
private const val KTFMT_VERSION = "0.37"
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user