Initial commit
This commit is contained in:
@@ -1,39 +0,0 @@
|
||||
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"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,42 +0,0 @@
|
||||
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("composeCompiler").get().get().pluginId)
|
||||
apply(libs.findPlugin("composeMultiplatform").get().get().pluginId)
|
||||
}
|
||||
|
||||
val composeDeps = extensions.getByType<ComposeExtension>().dependencies
|
||||
|
||||
extensions.configure<KotlinMultiplatformExtension> {
|
||||
sourceSets.apply {
|
||||
androidMain {
|
||||
dependencies {
|
||||
implementation(composeDeps.preview)
|
||||
implementation(libs.findLibrary("androidx.activity.compose").get())
|
||||
}
|
||||
}
|
||||
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)
|
||||
implementation(composeDeps.components.uiToolingPreview)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,22 +0,0 @@
|
||||
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("androidLibrary").get().get().pluginId)
|
||||
apply(libs.findPlugin("kotlinMultiplatform").get().get().pluginId)
|
||||
apply(libs.findPlugin("kotlinSerialization").get().get().pluginId)
|
||||
}
|
||||
|
||||
extensions.configure<KotlinMultiplatformExtension>(::configureKotlinMultiplatform)
|
||||
extensions.configure<LibraryExtension>(::configureKotlinAndroid)
|
||||
}
|
||||
}
|
||||
@@ -1,37 +0,0 @@
|
||||
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.$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_21
|
||||
targetCompatibility = JavaVersion.VERSION_21
|
||||
}
|
||||
packaging {
|
||||
resources {
|
||||
excludes += "/META-INF/{AL2.0,LGPL2.1}"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,49 +0,0 @@
|
||||
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(21)
|
||||
|
||||
androidTarget {
|
||||
compilerOptions {
|
||||
jvmTarget.set(JvmTarget.JVM_21)
|
||||
}
|
||||
}
|
||||
|
||||
listOf(iosArm64(), iosSimulatorArm64()).forEach { iosTarget ->
|
||||
iosTarget.binaries.framework {
|
||||
baseName = "shared"
|
||||
isStatic = true
|
||||
}
|
||||
}
|
||||
|
||||
sourceSets.all {
|
||||
languageSettings {
|
||||
optIn("androidx.compose.material3.ExperimentalMaterial3Api")
|
||||
optIn("kotlin.time.ExperimentalTime")
|
||||
}
|
||||
}
|
||||
|
||||
sourceSets.apply {
|
||||
commonMain {
|
||||
dependencies {
|
||||
implementation(libs.findLibrary("kotlinx.coroutines.core").get())
|
||||
}
|
||||
|
||||
androidMain {
|
||||
dependencies {
|
||||
implementation(libs.findLibrary("kotlinx.coroutines.android").get())
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,9 +0,0 @@
|
||||
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")
|
||||
@@ -1,4 +0,0 @@
|
||||
# Gradle properties are not passed to included builds https://github.com/gradle/gradle/issues/2534
|
||||
org.gradle.parallel=true
|
||||
org.gradle.caching=true
|
||||
org.gradle.configureondemand=true
|
||||
@@ -1,14 +0,0 @@
|
||||
dependencyResolutionManagement {
|
||||
repositories {
|
||||
google()
|
||||
mavenCentral()
|
||||
}
|
||||
versionCatalogs {
|
||||
create("libs") {
|
||||
from(files("../gradle/libs.versions.toml"))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
rootProject.name = "buildlogic"
|
||||
include(":convention")
|
||||
Reference in New Issue
Block a user