Skip to content
Draft
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
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
/local.properties
.DS_Store
build/
.kotlin/
.idea/*
.idea/codeStyles/*
!.idea/codeStyles/
Expand Down
18 changes: 18 additions & 0 deletions build-logic/convention/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@ kotlin {
dependencies {
implementation(libs.android.pluginGradle)
implementation(libs.kotlin.pluginGradle)
implementation(libs.compose.compiler.pluginGradle)
implementation(libs.metalava.pluginGradle)
}

gradlePlugin {
Expand All @@ -32,9 +34,25 @@ gradlePlugin {
id = "readmore.android.library"
implementationClass = "AndroidLibraryConventionPlugin"
}
register("kotlinAndroid") {
id = "readmore.kotlin.android"
implementationClass = "KotlinAndroidConventionPlugin"
}
register("kotlinMultiplatform") {
id = "readmore.kotlin.multiplatform"
implementationClass = "KotlinMultiplatformConventionPlugin"
}
register("compose") {
id = "readmore.compose"
implementationClass = "ComposeMultiplatformConventionPlugin"
}
register("androidCompose") {
id = "readmore.android.compose"
implementationClass = "AndroidComposeConventionPlugin"
}
register("metalava") {
id = "readmore.metalava"
implementationClass = "MetalavaConventionPlugin"
}
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import com.webtoonscorp.android.readmore.buildlogic.configureAndroid
import com.webtoonscorp.android.readmore.buildlogic.configureKotlin
import org.gradle.api.Plugin
import org.gradle.api.Project

Expand All @@ -8,10 +7,8 @@ class AndroidApplicationConventionPlugin : Plugin<Project> {
with(target) {
with(pluginManager) {
apply("com.android.application")
apply("org.jetbrains.kotlin.android")
}
configureAndroid()
configureKotlin()
}
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import com.webtoonscorp.android.readmore.buildlogic.configureAndroid
import com.webtoonscorp.android.readmore.buildlogic.configureKotlin
import org.gradle.api.Plugin
import org.gradle.api.Project

Expand All @@ -8,10 +7,8 @@ class AndroidLibraryConventionPlugin : Plugin<Project> {
with(target) {
with(pluginManager) {
apply("com.android.library")
apply("org.jetbrains.kotlin.android")
}
configureAndroid()
configureKotlin()
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import com.webtoonscorp.android.readmore.buildlogic.configureCompose
import org.gradle.api.Plugin
import org.gradle.api.Project

class ComposeMultiplatformConventionPlugin : Plugin<Project> {
override fun apply(target: Project) {
with(target) {
configureCompose()
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import com.webtoonscorp.android.readmore.buildlogic.configureKotlin
import org.gradle.api.Plugin
import org.gradle.api.Project

class KotlinAndroidConventionPlugin: Plugin<Project> {
override fun apply(target: Project) {
with(target) {
with(pluginManager) {
apply("org.jetbrains.kotlin.android")
}

configureKotlin()
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
import com.webtoonscorp.android.readmore.buildlogic.configureKotlin
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.kotlin.dsl.configure
import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension
import org.jetbrains.kotlin.gradle.targets.js.dsl.ExperimentalWasmDsl

class KotlinMultiplatformConventionPlugin : Plugin<Project> {
override fun apply(target: Project) {
with(target) {
pluginManager.apply("org.jetbrains.kotlin.multiplatform")

kotlin {
applyDefaultHierarchyTemplate()

if (pluginManager.hasPlugin("com.android.library")) {
androidTarget {
publishLibraryVariants("release")
}
}

jvm("desktop")

iosX64()
iosArm64()
iosSimulatorArm64()

@OptIn(ExperimentalWasmDsl::class)
wasmJs {
browser()
}

configureKotlin()
}
}
}
}

internal fun Project.kotlin(action: KotlinMultiplatformExtension.() -> Unit) {
extensions.configure<KotlinMultiplatformExtension>(action)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
import me.tylerbwong.gradle.metalava.extension.MetalavaExtension
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.kotlin.gradle.dsl.KotlinProjectExtension

class MetalavaConventionPlugin : Plugin<Project> {
override fun apply(target: Project) = with(target) {
with(pluginManager) {
apply("me.tylerbwong.gradle.metalava")
}

metalava {
filename.set("api/current.api")
sourcePaths.setFrom(
target.kotlin.sourceSets
.filterNot { it.name.contains("test", ignoreCase = true) }
.flatMap { it.kotlin.sourceDirectories },
)
}
}
}

private fun Project.metalava(action: MetalavaExtension.() -> Unit) =
extensions.configure<MetalavaExtension>(action)

internal val Project.kotlin: KotlinProjectExtension
get() = extensions.getByType<KotlinProjectExtension>()
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,8 @@ fun Project.configureAndroid() {
}

compileOptions {
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
}
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,23 +1,8 @@
package com.webtoonscorp.android.readmore.buildlogic

import com.android.build.gradle.BaseExtension
import org.gradle.api.Project
import org.gradle.api.artifacts.VersionCatalogsExtension
import org.gradle.kotlin.dsl.configure
import org.gradle.kotlin.dsl.getByType

fun Project.configureCompose() {
val libs = extensions.getByType<VersionCatalogsExtension>().named("libs")
android {
buildFeatures.compose = true

composeOptions {
kotlinCompilerExtensionVersion =
libs.findVersion("compose-compiler").get().toString()
}
}
}

private fun Project.android(action: BaseExtension.() -> Unit) {
extensions.configure(action)
pluginManager.apply("org.jetbrains.compose")
pluginManager.apply("org.jetbrains.kotlin.plugin.compose")
}
Original file line number Diff line number Diff line change
@@ -1,16 +1,19 @@
package com.webtoonscorp.android.readmore.buildlogic

import org.gradle.api.JavaVersion
import org.gradle.api.Project
import org.gradle.kotlin.dsl.withType
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
import org.jetbrains.kotlin.gradle.dsl.KotlinJvmCompilerOptions
import org.jetbrains.kotlin.gradle.tasks.KotlinCompilationTask

fun Project.configureKotlin() {
tasks.withType<KotlinCompile>().configureEach {
kotlinOptions {
jvmTarget = JavaVersion.VERSION_1_8.toString()
tasks.withType<KotlinCompilationTask<*>>().configureEach {
compilerOptions {
if (this is KotlinJvmCompilerOptions) {
jvmTarget.set(JvmTarget.JVM_11)
}

freeCompilerArgs = freeCompilerArgs + listOf(
freeCompilerArgs.addAll(
"-opt-in=kotlin.RequiresOptIn",
)
}
Expand Down
1 change: 1 addition & 0 deletions build-logic/settings.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ dependencyResolutionManagement {
repositories {
google()
mavenCentral()
gradlePluginPortal()
}
versionCatalogs {
create("libs") {
Expand Down
4 changes: 4 additions & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,10 @@ plugins {
alias(libs.plugins.android.application) apply false
alias(libs.plugins.android.library) apply false
alias(libs.plugins.kotlin.android) apply false
alias(libs.plugins.kotlin.jvm) apply false
alias(libs.plugins.kotlin.multiplatform) apply false
alias(libs.plugins.compose.compiler) apply false
alias(libs.plugins.jetbrains.compose) apply false
alias(libs.plugins.metalava) apply false
alias(libs.plugins.maven.publish) apply false
alias(libs.plugins.jetbrains.dokka)
Expand Down
2 changes: 2 additions & 0 deletions gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@ android.nonTransitiveRClass=true
org.gradle.parallel=true
org.gradle.caching=true


#Publish
SONATYPE_HOST=S01
RELEASE_SIGNING_ENABLED=true

Expand Down
30 changes: 21 additions & 9 deletions gradle/libs.versions.toml
Original file line number Diff line number Diff line change
@@ -1,21 +1,22 @@
[versions]

agp = "8.7.1"
mavenPublish = "0.25.1"
metalava = "0.3.3"
mavenPublish = "0.28.0"
metalava = "0.3.5"

kotlin = "1.8.22"
dokka = "1.8.10"
kotlin = "2.1.0"
kotlinx-coroutines = "1.10.1"
dokka = "1.9.20"

compose = "1.8.0-beta02"
compose-compiler = "1.4.8"
compose = "1.7.0"
compose-material3 = "1.4.0-alpha08"
jetbrains-navigation = "2.7.0-alpha07"

material = "1.5.0"
material = "1.12.0"

activity = "1.5.1"
activity = "1.9.3"
appcompat = "1.7.0"
core = "1.7.0"
core = "1.15.0"

androidxtest = "1.4.0"
androidxtest-junit = "1.1.3"
Expand All @@ -26,6 +27,7 @@ junit = "4.13"

kotlin-stdlib = { module = "org.jetbrains.kotlin:kotlin-stdlib-jdk8", version.ref = "kotlin" }
kotlin-test = { module = "org.jetbrains.kotlin:kotlin-test", version.ref = "kotlin" }
kotlinx-coroutines-swing = { group = "org.jetbrains.kotlinx", name = "kotlinx-coroutines-swing", version.ref = "kotlinx-coroutines" }

compose-ui-ui = { module = "androidx.compose.ui:ui", version.ref = "compose" }
compose-ui-util = { module = "androidx.compose.ui:ui-util", version.ref = "compose" }
Expand All @@ -37,6 +39,10 @@ compose-foundation-foundation = { module = "androidx.compose.foundation:foundati
compose-material = { module = "androidx.compose.material:material", version.ref = "compose" }
compose-material3 = { module = "androidx.compose.material3:material3", version.ref = "compose-material3" }

jetbrains-compose-ui-text = { module = "org.jetbrains.compose.ui:ui-text", version.ref = "compose" }
jetbrains-annotation = { module = "org.jetbrains.compose.annotation-internal:annotation", version.ref = "compose" }
jetbrains-navigation-compose = { module = "org.jetbrains.androidx.navigation:navigation-compose", version.ref = "jetbrains-navigation" }

material-android = { module = "com.google.android.material:material", version.ref = "material" }

androidx-activity-compose = { module = "androidx.activity:activity-compose", version.ref = "activity" }
Expand All @@ -54,11 +60,17 @@ junit = { module = "junit:junit", version.ref = "junit" }
# Dependencies of the included build-logic
android-pluginGradle = { module = "com.android.tools.build:gradle", version.ref = "agp" }
kotlin-pluginGradle = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin", version.ref = "kotlin" }
compose-compiler-pluginGradle = { module = "org.jetbrains.kotlin:compose-compiler-gradle-plugin", version.ref = "kotlin" }
metalava-pluginGradle = { module = "me.tylerbwong.gradle.metalava:plugin", version.ref = "metalava" }

[plugins]
android-application = { id = "com.android.application", version.ref = "agp" }
android-library = { id = "com.android.library", version.ref = "agp" }
kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" }
kotlin-jvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" }
kotlin-multiplatform = { id = "org.jetbrains.kotlin.multiplatform", version.ref = "kotlin" }
compose-compiler = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" }
jetbrains-compose = { id = "org.jetbrains.compose", version.ref = "compose" }
jetbrains-dokka = { id = "org.jetbrains.dokka", version.ref = "dokka" }
metalava = { id = "me.tylerbwong.gradle.metalava", version.ref = "metalava" }
maven-publish = { id = "com.vanniktech.maven.publish", version.ref = "mavenPublish" }
Loading
Loading