Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 39 additions & 0 deletions build-logic/convention/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
plugins {
`kotlin-dsl`
}

dependencies {
compileOnly(libs.androidx.gradle)
compileOnly(libs.kotlin.gradle)
compileOnly(libs.compose.compiler.gradle)
implementation(libs.spotless.gradle)
}

gradlePlugin {
plugins {
register("androidApplication") {
id = "cfw.android.application"
implementationClass = "AndroidApplicationConventionPlugin"
}
register("androidTests") {
id = "cfw.android.tests"
implementationClass = "AndroidTestsConventionPlugin"
}
register("codeLint") {
id = "cfw.code.lint"
implementationClass = "CodeLintConventionPlugin"
}
register("androidLibrary") {
id = "cfw.library"
implementationClass = "AndroidLibraryConventionPlugin"
}
register("androidLibraryTests") {
id = "cfw.library.tests"
implementationClass = "AndroidLibraryTestsConventionPlugin"
}
register("sampleCommonDeps") {
id = "cfw.sample.common.deps"
implementationClass = "SampleCommonDepsConventionPlugin"
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
import com.android.build.api.dsl.ApplicationExtension
import cfw.buildlogic.AndroidConfig
import cfw.buildlogic.configureAndroid
import cfw.buildlogic.configureCommonKotlinCompileOptions
import cfw.buildlogic.libs
import cfw.buildlogic.pluginId
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.kotlin.dsl.configure

@Suppress("unused")
class AndroidApplicationConventionPlugin : Plugin<Project> {
override fun apply(target: Project) {
with(target) {
with(pluginManager) {
apply("com.android.application")
apply(libs.pluginId("compose-compiler"))
apply("cfw.code.lint")
}

extensions.configure<ApplicationExtension> {
defaultConfig {
targetSdk = AndroidConfig.TARGET_SDK
}
configureAndroid(this)

buildFeatures {
compose = true
}

packaging {
resources {
excludes.add("/META-INF/{AL2.0,LGPL2.1}")
}
}
}

configureCommonKotlinCompileOptions()
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
import com.android.build.api.dsl.LibraryExtension
import cfw.buildlogic.AndroidConfig
import cfw.buildlogic.configureAndroid
import cfw.buildlogic.configureCommonKotlinCompileOptions
import cfw.buildlogic.libs
import cfw.buildlogic.pluginId
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.kotlin.dsl.configure

@Suppress("unused")
class AndroidLibraryConventionPlugin : Plugin<Project> {
override fun apply(target: Project) {
with(target) {
with(pluginManager) {
apply("com.android.library")
apply(libs.pluginId("compose-compiler"))
apply("cfw.code.lint")
}

extensions.configure<LibraryExtension> {
defaultConfig {
lint.targetSdk = AndroidConfig.TARGET_SDK
}
configureAndroid(this)

buildFeatures {
compose = true
}

packaging {
resources {
excludes.add("/META-INF/{AL2.0,LGPL2.1}")
}
}
}

configureCommonKotlinCompileOptions()
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
import com.android.build.api.dsl.LibraryExtension
import cfw.buildlogic.library
import cfw.buildlogic.libs
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.kotlin.dsl.configure
import org.gradle.kotlin.dsl.dependencies

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

extensions.configure<LibraryExtension> {
defaultConfig {
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
}
testOptions {
unitTests.all {
it.useJUnitPlatform()
}
}
}

dependencies {
add("testImplementation", libs.library("junit"))
add("androidTestImplementation", libs.library("androidx-test-junit"))
add("androidTestImplementation", libs.library("androidx-test-espresso"))
add("androidTestImplementation", platform(libs.library("compose-bom")))
add("androidTestImplementation", libs.library("compose-ui-test-junit4"))
}
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
import com.android.build.api.dsl.ApplicationExtension
import cfw.buildlogic.library
import cfw.buildlogic.libs
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.kotlin.dsl.configure
import org.gradle.kotlin.dsl.dependencies

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

extensions.configure<ApplicationExtension> {
defaultConfig {
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
}
}

dependencies {
add("testImplementation", libs.library("junit"))
add("androidTestImplementation", libs.library("androidx-test-junit"))
add("androidTestImplementation", libs.library("androidx-test-espresso"))
add("androidTestImplementation", platform(libs.library("compose-bom")))
add("androidTestImplementation", libs.library("compose-ui-test-junit4"))
}
}
}
}
33 changes: 33 additions & 0 deletions build-logic/convention/src/main/kotlin/CodeLintConventionPlugin.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
import com.diffplug.gradle.spotless.SpotlessExtension
import cfw.buildlogic.libs
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.kotlin.dsl.configure

@Suppress("unused")
class CodeLintConventionPlugin : Plugin<Project> {
override fun apply(target: Project) {
with(target) {
pluginManager.apply("com.diffplug.spotless")

extensions.configure<SpotlessExtension> {
kotlin {
target("**/*.kt", "**/*.kts")
targetExclude("**/build/**/*.kt")
ktlint(
libs.findLibrary("ktlint-core").get().get().version!!,
).editorConfigOverride(
mapOf("ktlint_standard_annotation" to "disabled"),
)
trimTrailingWhitespace()
endWithNewline()
}
format("xml") {
target("**/*.xml")
trimTrailingWhitespace()
endWithNewline()
}
}
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
import cfw.buildlogic.library
import cfw.buildlogic.libs
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.kotlin.dsl.dependencies

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

dependencies {
add("implementation", libs.library("appcompat"))
add("implementation", libs.library("androidx-core-ktx"))
add("implementation", libs.library("androidx-lifecycle-runtime-ktx"))
add("implementation", libs.library("androidx-lifecycle-viewmodel-compose"))
add("implementation", libs.library("activity-compose"))
add("implementation", platform(libs.library("compose-bom")))
add("implementation", libs.findBundle("compose-ui").get())
}
}
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package buildlogic
package cfw.buildlogic

import org.gradle.api.JavaVersion as GradleJavaVersion
import org.jetbrains.kotlin.gradle.dsl.JvmTarget as KotlinJvmTarget
Expand All @@ -11,4 +11,4 @@ object AndroidConfig {
// https://youtrack.jetbrains.com/issue/KT-66995/JvmTarget-and-JavaVersion-compatibility-for-easier-JVM-version-setup
val JavaVersion = GradleJavaVersion.VERSION_17
val JvmTarget = KotlinJvmTarget.JVM_17
}
}
20 changes: 20 additions & 0 deletions build-logic/convention/src/main/kotlin/cfw/buildlogic/Libs.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package cfw.buildlogic

import org.gradle.api.Project
import org.gradle.api.artifacts.MinimalExternalModuleDependency
import org.gradle.api.artifacts.VersionCatalog
import org.gradle.api.artifacts.VersionCatalogsExtension
import org.gradle.api.provider.Provider
import org.gradle.kotlin.dsl.getByType

val Project.libs: VersionCatalog
get() = extensions.getByType<VersionCatalogsExtension>().named("libs")

fun VersionCatalog.library(name: String): Provider<MinimalExternalModuleDependency> =
findLibrary(name).get()

fun VersionCatalog.pluginId(name: String): String =
findPlugin(name).get().get().pluginId

fun VersionCatalog.version(name: String): String =
findVersion(name).get().requiredVersion
Original file line number Diff line number Diff line change
@@ -1,11 +1,9 @@
package buildlogic
package cfw.buildlogic

import com.android.build.api.dsl.CommonExtension
import org.gradle.accessors.dm.LibrariesForLibs
import org.gradle.api.Project
import org.gradle.kotlin.dsl.the

val Project.libs get() = the<LibrariesForLibs>()
import org.gradle.kotlin.dsl.withType
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

internal fun Project.configureAndroid(commonExtension: CommonExtension) {
commonExtension.apply {
Expand All @@ -21,3 +19,11 @@ internal fun Project.configureAndroid(commonExtension: CommonExtension) {
}
}
}

internal fun Project.configureCommonKotlinCompileOptions() {
tasks.withType<KotlinCompile>().configureEach {
compilerOptions {
jvmTarget.set(AndroidConfig.JvmTarget)
}
}
}
4 changes: 4 additions & 0 deletions build-logic/gradle.properties
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
# 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
21 changes: 21 additions & 0 deletions build-logic/settings.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
dependencyResolutionManagement {
repositories {
google {
content {
includeGroupByRegex("com\\.android.*")
includeGroupByRegex("com\\.google.*")
includeGroupByRegex("androidx.*")
}
}
mavenCentral()
gradlePluginPortal()
}
versionCatalogs {
create("libs") {
from(files("../gradle/libs.versions.toml"))
}
}
}

rootProject.name = "build-logic"
include(":convention")
16 changes: 5 additions & 11 deletions build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,16 +1,10 @@
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

// Top-level build file where you can add configuration options common to all sub-projects/modules.
plugins {
alias(libs.plugins.agp) apply false
alias(libs.plugins.android.library) apply false
alias(libs.plugins.kotlin.android) apply false
alias(libs.plugins.compose.compiler) apply false
alias(libs.plugins.spotless) apply false
alias(libs.plugins.ksp) apply false
alias(libs.plugins.hilt.android) apply false
}

subprojects {
tasks.withType<KotlinCompile>().configureEach {
compilerOptions {
jvmTarget.set(JvmTarget.JVM_17)
}
}
}
20 changes: 0 additions & 20 deletions buildSrc/build.gradle.kts

This file was deleted.

9 changes: 0 additions & 9 deletions buildSrc/settings.gradle.kts

This file was deleted.

Loading