Initial commit
This commit is contained in:
39
buildlogic/convention/build.gradle.kts
Normal file
39
buildlogic/convention/build.gradle.kts
Normal file
@@ -0,0 +1,39 @@
|
||||
plugins {
|
||||
`kotlin-dsl`
|
||||
}
|
||||
|
||||
group = "dev.carlosmartino.plugins.buildlogic"
|
||||
|
||||
dependencies {
|
||||
implementation(libs.plugins.kotlinMultiplatform.toDep())
|
||||
implementation(libs.plugins.kotlinSerialization.toDep())
|
||||
implementation(libs.plugins.androidApplication.toDep())
|
||||
implementation(libs.plugins.androidLibrary.toDep())
|
||||
implementation(libs.plugins.composeCompiler.toDep())
|
||||
implementation(libs.plugins.composeMultiplatform.toDep())
|
||||
}
|
||||
|
||||
fun Provider<PluginDependency>.toDep() =
|
||||
map {
|
||||
"${it.pluginId}:${it.pluginId}.gradle.plugin:${it.version}"
|
||||
}
|
||||
|
||||
tasks {
|
||||
validatePlugins {
|
||||
enableStricterValidation = true
|
||||
failOnWarning = true
|
||||
}
|
||||
}
|
||||
|
||||
gradlePlugin {
|
||||
plugins {
|
||||
register("kotlinMultiplatform") {
|
||||
id = "dev.carlosmartino.plugins.kotlinMultiplatform"
|
||||
implementationClass = "KotlinMultiplatformConventionPlugin"
|
||||
}
|
||||
register("composeMultiplatform") {
|
||||
id = "dev.carlosmartino.plugins.composeMultiplatform"
|
||||
implementationClass = "ComposeMultiplatformConventionPlugin"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
import dev.carlosmartino.plugins.libs
|
||||
import org.gradle.api.Plugin
|
||||
import org.gradle.api.Project
|
||||
import org.gradle.kotlin.dsl.configure
|
||||
import org.gradle.kotlin.dsl.getByType
|
||||
import org.jetbrains.compose.ComposeExtension
|
||||
import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension
|
||||
|
||||
class ComposeMultiplatformConventionPlugin : Plugin<Project> {
|
||||
override fun apply(target: Project) =
|
||||
with(target) {
|
||||
with(pluginManager) {
|
||||
apply(libs.findPlugin("compose.plugin").get().get().pluginId)
|
||||
apply(libs.findPlugin("compose.multiplatform").get().get().pluginId)
|
||||
}
|
||||
|
||||
val composeDeps = extensions.getByType<ComposeExtension>().dependencies
|
||||
|
||||
extensions.configure<KotlinMultiplatformExtension> {
|
||||
sourceSets.apply {
|
||||
commonMain {
|
||||
dependencies {
|
||||
implementation(composeDeps.runtime)
|
||||
implementation(composeDeps.foundation)
|
||||
implementation(composeDeps.material3)
|
||||
implementation(composeDeps.ui)
|
||||
implementation(composeDeps.uiUtil)
|
||||
implementation(composeDeps.animation)
|
||||
implementation(composeDeps.animationGraphics)
|
||||
implementation(composeDeps.components.resources)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
import com.android.build.api.dsl.LibraryExtension
|
||||
import dev.carlosmartino.plugins.configureKotlinAndroid
|
||||
import dev.carlosmartino.plugins.configureKotlinMultiplatform
|
||||
import dev.carlosmartino.plugins.libs
|
||||
import org.gradle.api.Plugin
|
||||
import org.gradle.api.Project
|
||||
import org.gradle.kotlin.dsl.configure
|
||||
import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension
|
||||
|
||||
class KotlinMultiplatformConventionPlugin : Plugin<Project> {
|
||||
override fun apply(target: Project) =
|
||||
with(target) {
|
||||
with(pluginManager) {
|
||||
apply(
|
||||
libs
|
||||
.findPlugin("android.library")
|
||||
.get()
|
||||
.get()
|
||||
.pluginId,
|
||||
)
|
||||
apply(
|
||||
libs
|
||||
.findPlugin("kotlin.multiplatform")
|
||||
.get()
|
||||
.get()
|
||||
.pluginId,
|
||||
)
|
||||
apply(
|
||||
libs
|
||||
.findPlugin("kotlin.serialization")
|
||||
.get()
|
||||
.get()
|
||||
.pluginId,
|
||||
)
|
||||
}
|
||||
|
||||
extensions.configure<KotlinMultiplatformExtension>(::configureKotlinMultiplatform)
|
||||
extensions.configure<LibraryExtension>(::configureKotlinAndroid)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
package dev.carlosmartino.plugins
|
||||
|
||||
import com.android.build.api.dsl.LibraryExtension
|
||||
import org.gradle.api.JavaVersion
|
||||
import org.gradle.api.Project
|
||||
import org.gradle.kotlin.dsl.get
|
||||
|
||||
internal fun Project.configureKotlinAndroid(
|
||||
extension: LibraryExtension,
|
||||
) = extension.apply {
|
||||
val moduleName = path.split(":").drop(2).joinToString(".")
|
||||
namespace = if (moduleName.isNotEmpty()) "dev.carlosmartino.platform.$moduleName" else "dev.carlosmartino.platform"
|
||||
|
||||
compileSdk = libs
|
||||
.findVersion("android.compileSdk")
|
||||
.get()
|
||||
.requiredVersion
|
||||
.toInt()
|
||||
defaultConfig {
|
||||
minSdk = libs
|
||||
.findVersion("android.minSdk")
|
||||
.get()
|
||||
.requiredVersion
|
||||
.toInt()
|
||||
consumerProguardFiles("consumer-proguard-rules.pro")
|
||||
}
|
||||
|
||||
sourceSets["main"].resources.srcDirs("src/commonMain/composeResources")
|
||||
|
||||
compileOptions {
|
||||
sourceCompatibility = JavaVersion.VERSION_17
|
||||
targetCompatibility = JavaVersion.VERSION_17
|
||||
}
|
||||
packaging {
|
||||
resources {
|
||||
excludes += "/META-INF/{AL2.0,LGPL2.1}"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
package dev.carlosmartino.plugins
|
||||
|
||||
import org.gradle.api.Project
|
||||
import org.jetbrains.kotlin.gradle.ExperimentalWasmDsl
|
||||
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
|
||||
import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension
|
||||
|
||||
@OptIn(ExperimentalWasmDsl::class)
|
||||
internal fun Project.configureKotlinMultiplatform(
|
||||
extension: KotlinMultiplatformExtension,
|
||||
) = extension.apply {
|
||||
applyDefaultHierarchyTemplate()
|
||||
|
||||
jvmToolchain(17)
|
||||
|
||||
androidTarget {
|
||||
compilerOptions {
|
||||
jvmTarget.set(JvmTarget.JVM_17)
|
||||
}
|
||||
}
|
||||
|
||||
listOf(iosArm64(), iosSimulatorArm64())
|
||||
|
||||
sourceSets.apply {
|
||||
commonMain {
|
||||
dependencies {
|
||||
implementation(libs.findLibrary("kotlinx.coroutines.core").get())
|
||||
api(libs.findLibrary("koin.core").get())
|
||||
}
|
||||
|
||||
androidMain {
|
||||
dependencies {
|
||||
implementation(libs.findLibrary("koin.android").get())
|
||||
implementation(libs.findLibrary("kotlinx.coroutines.android").get())
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
package dev.carlosmartino.plugins
|
||||
|
||||
import org.gradle.api.Project
|
||||
import org.gradle.api.artifacts.VersionCatalog
|
||||
import org.gradle.api.artifacts.VersionCatalogsExtension
|
||||
import org.gradle.kotlin.dsl.getByType
|
||||
|
||||
val Project.libs
|
||||
get(): VersionCatalog = extensions.getByType<VersionCatalogsExtension>().named("libs")
|
||||
Reference in New Issue
Block a user