Skip to content

Commit

Permalink
init/#1 : build-logic
Browse files Browse the repository at this point in the history
  • Loading branch information
haeti-dev committed Nov 5, 2024
1 parent cb532b7 commit 63b749c
Show file tree
Hide file tree
Showing 18 changed files with 643 additions and 41 deletions.
27 changes: 6 additions & 21 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
plugins {
alias(libs.plugins.android.application)
alias(libs.plugins.kotlin.android)
alias(libs.plugins.compose.compiler)
}

android {
Expand Down Expand Up @@ -30,18 +31,15 @@ android {
}
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}
kotlinOptions {
jvmTarget = "1.8"
jvmTarget = "17"
}
buildFeatures {
compose = true
}
composeOptions {
kotlinCompilerExtensionVersion = "1.5.1"
}
packaging {
resources {
excludes += "/META-INF/{AL2.0,LGPL2.1}"
Expand All @@ -50,20 +48,7 @@ android {
}

dependencies {
implementation(libs.bundles.compose)
implementation(libs.bundles.androidx.core)

implementation(libs.androidx.core.ktx)
implementation(libs.androidx.lifecycle.runtime.ktx)
implementation(libs.androidx.activity.compose)
implementation(platform(libs.androidx.compose.bom))
implementation(libs.androidx.ui)
implementation(libs.androidx.ui.graphics)
implementation(libs.androidx.ui.tooling.preview)
implementation(libs.androidx.material3)
testImplementation(libs.junit)
androidTestImplementation(libs.androidx.junit)
androidTestImplementation(libs.androidx.espresso.core)
androidTestImplementation(platform(libs.androidx.compose.bom))
androidTestImplementation(libs.androidx.ui.test.junit4)
debugImplementation(libs.androidx.ui.tooling)
debugImplementation(libs.androidx.ui.test.manifest)
}
51 changes: 51 additions & 0 deletions build-logic/convention/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
plugins {
`kotlin-dsl`
}

group = "com.boostcamp.mapisode.convention"

java {
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}

dependencies {
compileOnly(libs.android.gradlePlugin)
compileOnly(libs.kotlin.gradlePlugin)
compileOnly(libs.compose.compiler.gradlePlugin)
compileOnly(libs.ksp.gradlePlugin)
}

gradlePlugin {
plugins {
register("androidApplication") {
id = "mapisode.android.application"
implementationClass = "AndroidApplicationPlugin"
}

register("androidLibrary") {
id = "mapisode.android.library"
implementationClass = "AndroidLibraryPlugin"
}

register("androidCompose") {
id = "mapisode.android.compose"
implementationClass = "AndroidComposePlugin"
}

register("androidHilt") {
id = "mapisode.android.hilt"
implementationClass = "HiltPlugin"
}

register("feature") {
id = "mapisode.feature"
implementationClass = "MapisodeFeaturePlugin"
}

register("data") {
id = "mapisode.data"
implementationClass = "MapisodeDataPlugin"
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package com.boostcamp.mapisode.convention

import com.android.build.api.dsl.ApplicationExtension
import com.boostcamp.mapisode.convention.extension.configureComposeAndroid
import com.boostcamp.mapisode.convention.extension.configureKotlinAndroid
import com.boostcamp.mapisode.convention.extension.getLibrary
import com.boostcamp.mapisode.convention.extension.getVersion
import com.boostcamp.mapisode.convention.extension.implementation
import com.boostcamp.mapisode.convention.extension.libs
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.kotlin.dsl.configure
import org.gradle.kotlin.dsl.dependencies

class AndroidApplicationPlugin : Plugin<Project> {
override fun apply(target: Project) {
with(target) {
pluginManager.apply("com.android.application")

extensions.configure<ApplicationExtension> {
configureKotlinAndroid(this)
configureComposeAndroid(this)

with(defaultConfig) {
targetSdk = libs.getVersion("targetSdk").requiredVersion.toInt()
versionCode = libs.getVersion("versionCode").requiredVersion.toInt()
versionName = libs.getVersion("versionName").requiredVersion
}

dependencies {
implementation(libs.getLibrary("timber"))
}
}
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package com.boostcamp.mapisode.convention

import com.android.build.gradle.LibraryExtension
import com.boostcamp.mapisode.convention.extension.configureComposeAndroid
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.kotlin.dsl.configure

class AndroidComposePlugin : Plugin<Project> {
override fun apply(target: Project) {
with(target) {
pluginManager.apply("mapisode.android.compose")

extensions.configure<LibraryExtension> {
configureComposeAndroid(this)
}
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package com.boostcamp.mapisode.convention

import com.android.build.gradle.LibraryExtension
import com.boostcamp.mapisode.convention.extension.configureKotlinAndroid
import com.boostcamp.mapisode.convention.extension.configureKotlinCoroutine
import com.boostcamp.mapisode.convention.extension.getLibrary
import com.boostcamp.mapisode.convention.extension.implementation
import com.boostcamp.mapisode.convention.extension.libs
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.kotlin.dsl.configure
import org.gradle.kotlin.dsl.dependencies

class AndroidLibraryPlugin : Plugin<Project> {
override fun apply(target: Project) {
with(target) {
pluginManager.apply("com.android.library")

extensions.configure<LibraryExtension> {
configureKotlinAndroid(this)
configureKotlinCoroutine(this)
}

dependencies {
implementation(libs.getLibrary("timber"))
}
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package com.boostcamp.mapisode.convention

import com.boostcamp.mapisode.convention.extension.getLibrary
import com.boostcamp.mapisode.convention.extension.implementation
import com.boostcamp.mapisode.convention.extension.ksp
import com.boostcamp.mapisode.convention.extension.libs
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.kotlin.dsl.dependencies

class HiltPlugin : Plugin<Project> {
override fun apply(target: Project) {
with(target) {
pluginManager.apply {
apply("dagger.hilt.android.plugin")
apply("com.google.devtools.ksp")
}

dependencies {
implementation(libs.getLibrary("hilt-android"))
ksp(libs.getLibrary("hilt-android-compiler"))
}
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package com.boostcamp.mapisode.convention

import com.boostcamp.mapisode.convention.extension.getBundle
import com.boostcamp.mapisode.convention.extension.getLibrary
import com.boostcamp.mapisode.convention.extension.implementation
import com.boostcamp.mapisode.convention.extension.libs
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.kotlin.dsl.dependencies

class MapisodeDataPlugin : Plugin<Project> {
override fun apply(target: Project) {
with(target) {
pluginManager.apply {
apply("mapisode.android.library")
apply("mapisode.android.hilt")
apply("org.jetbrains.kotlin.plugin.serialization")
}

dependencies {
val retrofitBom = libs.getLibrary("retrofit-bom")
implementation(platform(retrofitBom))
implementation(project(":core:model"))
implementation(project(":core:network"))
implementation(libs.getLibrary("kotlinx-serialization"))
implementation(libs.getBundle("retrofit"))
}
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package com.boostcamp.mapisode.convention

import com.boostcamp.mapisode.convention.extension.getBundle
import com.boostcamp.mapisode.convention.extension.implementation
import com.boostcamp.mapisode.convention.extension.libs
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.kotlin.dsl.dependencies

class MapisodeFeaturePlugin : Plugin<Project> {
override fun apply(target: Project) {
with(target) {
pluginManager.apply {
apply("mapisode.android.library")
apply("mapisode.android.compose")
}

dependencies {
implementation(project(":core:ui"))
implementation(project(":core:designsystem"))
implementation(project(":core:model"))
implementation(libs.getBundle("compose"))
}
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package com.boostcamp.mapisode.convention.extension

import com.android.build.api.dsl.CommonExtension
import org.gradle.api.Project
import org.gradle.kotlin.dsl.dependencies

internal fun Project.configureComposeAndroid(
commonExtension: CommonExtension<*, *, *, *, *, *>,
) {
pluginManager.apply("org.jetbrains.kotlin.plugin.compose")

commonExtension.apply {
buildFeatures {
compose = true
}

dependencies {
val composeBom = libs.getLibrary("compose-bom")
implementation(platform(composeBom))
implementation(libs.getBundle("compose"))
debugImplementation(libs.getBundle("compose-debug"))
// TODO: Test 의존성 추가
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
package com.boostcamp.mapisode.convention.extension

import org.gradle.api.Project
import org.gradle.api.file.ConfigurableFileCollection
import org.gradle.api.file.ConfigurableFileTree
import org.gradle.api.provider.Provider
import org.gradle.kotlin.dsl.DependencyHandlerScope

fun DependencyHandlerScope.implementation(project: Project) {
"implementation"(project)
}

fun DependencyHandlerScope.implementation(provider: Provider<*>) {
"implementation"(provider)
}

fun DependencyHandlerScope.implementation(fileTree: ConfigurableFileTree) {
"implementation"(fileTree)
}

fun DependencyHandlerScope.implementation(fileCollection: ConfigurableFileCollection) {
"implementation"(fileCollection)
}

fun DependencyHandlerScope.debugImplementation(provider: Provider<*>) {
"debugImplementation"(provider)
}

fun DependencyHandlerScope.releaseImplementation(provider: Provider<*>) {
"releaseImplementation"(provider)
}

fun DependencyHandlerScope.ksp(provider: Provider<*>) {
"ksp"(provider)
}

fun DependencyHandlerScope.kspTest(provider: Provider<*>) {
"kspTest"(provider)
}

fun DependencyHandlerScope.coreLibraryDesugaring(provider: Provider<*>) {
"coreLibraryDesugaring"(provider)
}

fun DependencyHandlerScope.androidTestImplementation(provider: Provider<*>) {
"androidTestImplementation"(provider)
}

fun DependencyHandlerScope.testImplementation(provider: Provider<*>) {
"testImplementation"(provider)
}

fun DependencyHandlerScope.compileOnly(provider: Provider<*>) {
"compileOnly"(provider)
}
Loading

0 comments on commit 63b749c

Please sign in to comment.