Skip to content

Commit 0f2fe17

Browse files
committed
chore(build-logic): complete version catalogue and build logic setup
- Add missing dependencies to version catalogue - Finalize build logic configuration
1 parent 8893ed1 commit 0f2fe17

169 files changed

Lines changed: 1018 additions & 452 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

build-logic/convention/build.gradle.kts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -59,15 +59,15 @@ gradlePlugin {
5959
implementationClass = "AndroidTestConventionPlugin"
6060
}
6161
register("androidFirebase") {
62-
id = "mifos.android.application.firebase"
62+
id = "org.convention.android.application.firebase"
6363
implementationClass = "AndroidApplicationFirebaseConventionPlugin"
6464
}
6565
register("androidFlavors") {
6666
id = "mifos.android.application.flavors"
6767
implementationClass = "AndroidApplicationFlavorsConventionPlugin"
6868
}
6969
register("androidLint") {
70-
id = "mifos.android.lint"
70+
id = "org.convention.android.application.lint"
7171
implementationClass = "AndroidLintConventionPlugin"
7272
}
7373
register("jvmLibrary") {
@@ -97,15 +97,15 @@ gradlePlugin {
9797

9898
// KMP & CMP Plugins
9999
register("cmpFeature") {
100-
id = "mifos.cmp.feature"
100+
id = "org.convention.cmp.feature"
101101
implementationClass = "CMPFeatureConventionPlugin"
102102
}
103103
register("kmpKoin") {
104-
id = "mifos.kmp.koin"
104+
id = "org.convention.kmp.koin"
105105
implementationClass = "KMPKoinConventionPlugin"
106106
}
107107
register("kmpLibrary") {
108-
id = "mifos.kmp.library"
108+
id = "org.convention.kmp.library"
109109
implementationClass = "KMPLibraryConventionPlugin"
110110
}
111111

build-logic/convention/src/main/kotlin/AndroidApplicationConventionPlugin.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,13 @@ class AndroidApplicationConventionPlugin : Plugin<Project> {
1616
with(pluginManager) {
1717
apply("com.android.application")
1818
apply("org.jetbrains.kotlin.android")
19-
apply("mifos.android.lint")
2019
apply("com.dropbox.dependency-guard")
2120
apply("mifos.detekt.plugin")
2221
apply("mifos.spotless.plugin")
2322
apply("mifos.ktlint.plugin")
24-
// apply("mifos.git.hooks")
23+
apply("mifos.git.hooks")
24+
apply("org.convention.android.application.lint")
25+
// apply("org.convention.android.application.firebase")
2526
}
2627

2728
extensions.configure<ApplicationExtension> {

build-logic/convention/src/main/kotlin/AndroidApplicationFirebaseConventionPlugin.kt

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,13 @@ class AndroidApplicationFirebaseConventionPlugin : Plugin<Project> {
2525
}
2626

2727
extensions.configure<ApplicationExtension> {
28-
// Disable the Crashlytics mapping file upload. This feature should only be
29-
// enabled if a Firebase backend is available and configured in
30-
// google-services.json.
31-
configure<CrashlyticsExtension> {
32-
mappingFileUploadEnabled = false
28+
buildTypes.configureEach {
29+
// Disable the Crashlytics mapping file upload. This feature should only be
30+
// enabled if a Firebase backend is available and configured in
31+
// google-services.json.
32+
configure<CrashlyticsExtension> {
33+
mappingFileUploadEnabled = false
34+
}
3335
}
3436
}
3537
}

build-logic/convention/src/main/kotlin/AndroidLintConventionPlugin.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ private fun Lint.configure() {
3030
checkDependencies = true
3131
abortOnError = false
3232
// Disable this rule until we ship the libraries to some maven.
33-
disable += "ResourceName"
33+
disable += "GradleDependency"
3434
baseline = File("lint-baseline.xml")
3535
explainIssues = true
3636
htmlReport = true

build-logic/convention/src/main/kotlin/CMPFeatureConventionPlugin.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ class CMPFeatureConventionPlugin : Plugin<Project> {
88
override fun apply(target: Project) {
99
with(target) {
1010
with(pluginManager) {
11-
apply("mifos.kmp.library")
12-
apply("mifos.kmp.koin")
11+
apply("org.convention.kmp.library")
12+
apply("org.convention.kmp.koin")
1313
apply("org.jetbrains.kotlin.plugin.compose")
1414
apply("org.jetbrains.compose")
1515
}
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
import com.android.build.api.instrumentation.AsmClassVisitorFactory
2+
import com.android.build.api.instrumentation.ClassContext
3+
import com.android.build.api.instrumentation.ClassData
4+
import com.android.build.api.instrumentation.InstrumentationParameters
5+
import org.gradle.api.provider.SetProperty
6+
import org.gradle.api.tasks.Input
7+
import org.objectweb.asm.ClassVisitor
8+
import org.objectweb.asm.FieldVisitor
9+
10+
class FieldSkippingClassVisitor(
11+
apiVersion: Int,
12+
nextClassVisitor: ClassVisitor,
13+
) : ClassVisitor(apiVersion, nextClassVisitor) {
14+
15+
// Returning null from this method will cause the ClassVisitor to strip all fields from the class.
16+
override fun visitField(
17+
access: Int,
18+
name: String?,
19+
descriptor: String?,
20+
signature: String?,
21+
value: Any?
22+
): FieldVisitor? = null
23+
24+
abstract class Factory : AsmClassVisitorFactory<Parameters> {
25+
26+
private val excludedClasses
27+
get() = parameters.get().classes.get()
28+
29+
override fun isInstrumentable(classData: ClassData): Boolean =
30+
classData.className in excludedClasses
31+
32+
override fun createClassVisitor(
33+
classContext: ClassContext,
34+
nextClassVisitor: ClassVisitor,
35+
): ClassVisitor {
36+
return FieldSkippingClassVisitor(
37+
apiVersion = instrumentationContext.apiVersion.get(),
38+
nextClassVisitor = nextClassVisitor,
39+
)
40+
}
41+
}
42+
43+
abstract class Parameters : InstrumentationParameters {
44+
@get:Input
45+
abstract val classes: SetProperty<String>
46+
}
47+
}

build-logic/convention/src/main/kotlin/KMPLibraryConventionPlugin.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ class KMPLibraryConventionPlugin : Plugin<Project> {
1515
with(pluginManager) {
1616
apply("com.android.library")
1717
apply("org.jetbrains.kotlin.multiplatform")
18-
apply("mifos.kmp.koin")
18+
apply("org.convention.kmp.koin")
1919
apply("mifos.detekt.plugin")
2020
apply("mifos.spotless.plugin")
2121
}
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
2+
import org.gradle.api.Plugin
3+
import org.gradle.api.Project
4+
import org.gradle.api.tasks.Copy
5+
import org.gradle.api.tasks.Exec
6+
import org.gradle.kotlin.dsl.register
7+
import java.util.Locale
8+
9+
/**
10+
* Plugin that installs the pre-commit git hooks from the scripts directory.
11+
*/
12+
class MifosGitHooksConventionPlugin : Plugin<Project> {
13+
override fun apply(project: Project) {
14+
// Define a function to check if the OS is Linux or MacOS
15+
fun isLinuxOrMacOs(): Boolean {
16+
val osName = System.getProperty("os.name").lowercase(Locale.getDefault())
17+
return osName.contains("linux") || osName.contains("mac os") || osName.contains("macos")
18+
}
19+
20+
// Define the copyGitHooks task
21+
project.tasks.register<Copy>("copyGitHooks") {
22+
description = "Copies the git hooks from /scripts to the .git/hooks folder."
23+
from("${project.rootDir}/scripts/") {
24+
include("**/*.sh")
25+
rename { it.removeSuffix(".sh") }
26+
}
27+
into("${project.rootDir}/.git/hooks")
28+
}
29+
30+
// Define the installGitHooks task
31+
project.tasks.register<Exec>("installGitHooks") {
32+
description = "Installs the pre-commit git hooks from the scripts directory."
33+
group = "git hooks"
34+
workingDir = project.rootDir
35+
36+
if (isLinuxOrMacOs()) {
37+
commandLine("chmod", "-R", "+x", ".git/hooks/")
38+
}else {
39+
commandLine("cmd", "/c", "attrib", "-R", "+X", ".git/hooks/*.*")
40+
}
41+
dependsOn(project.tasks.named("copyGitHooks"))
42+
43+
doLast {
44+
println("Git hooks installed successfully.")
45+
}
46+
}
47+
48+
// Configure task dependencies after evaluation
49+
project.afterEvaluate {
50+
project.tasks.matching {
51+
it.name in listOf("preBuild", "build", "assembleDebug", "assembleRelease", "installDebug", "installRelease", "clean")
52+
}.configureEach {
53+
dependsOn(project.tasks.named("installGitHooks"))
54+
}
55+
}
56+
}
57+
}

build-logic/convention/src/main/kotlin/org/mifos/GradleManagedDevices.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,13 @@ internal fun configureGradleManagedDevices(
1515
val pixel6 = DeviceConfig("Pixel 6", 31, "aosp")
1616
val pixelC = DeviceConfig("Pixel C", 30, "aosp-atd")
1717

18-
val allDevices = listOf(pixel4, pixel6, pixelC)
18+
val localDevices = listOf(pixel4, pixel6, pixelC)
1919
val ciDevices = listOf(pixel4, pixelC)
2020

2121
commonExtension.testOptions {
2222
managedDevices {
23-
devices {
24-
allDevices.forEach { deviceConfig ->
23+
allDevices {
24+
localDevices.forEach { deviceConfig ->
2525
maybeCreate(deviceConfig.taskName, ManagedVirtualDevice::class.java).apply {
2626
device = deviceConfig.device
2727
apiLevel = deviceConfig.apiLevel
@@ -32,7 +32,7 @@ internal fun configureGradleManagedDevices(
3232
groups {
3333
maybeCreate("ci").apply {
3434
ciDevices.forEach { deviceConfig ->
35-
targetDevices.add(devices[deviceConfig.taskName])
35+
targetDevices.add(allDevices[deviceConfig.taskName])
3636
}
3737
}
3838
}

0 commit comments

Comments
 (0)