@@ -46,7 +46,7 @@ jobs:
|
|||||||
|
|
||||||
- name: Run unit tests
|
- name: Run unit tests
|
||||||
id: unit_tests
|
id: unit_tests
|
||||||
run: ./gradlew testReleaseUnitTest
|
run: ./gradlew testDebugUnitTest
|
||||||
|
|
||||||
- name: Verify SQLDelight migrations
|
- name: Verify SQLDelight migrations
|
||||||
run: ./gradlew verifySqlDelightMigration
|
run: ./gradlew verifySqlDelightMigration
|
||||||
@@ -56,7 +56,7 @@ jobs:
|
|||||||
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0
|
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0
|
||||||
with:
|
with:
|
||||||
name: test-report-${{ github.sha }}
|
name: test-report-${{ github.sha }}
|
||||||
path: app/build/reports/tests/testReleaseUnitTest
|
path: app/build/reports/tests/testDebugUnitTest
|
||||||
|
|
||||||
- name: Build app
|
- name: Build app
|
||||||
run: ./gradlew assembleRelease -Pinclude-telemetry -Penable-updater
|
run: ./gradlew assembleRelease -Pinclude-telemetry -Penable-updater
|
||||||
|
|||||||
@@ -89,8 +89,8 @@ android {
|
|||||||
}
|
}
|
||||||
|
|
||||||
sourceSets {
|
sourceSets {
|
||||||
getByName("preview").res.srcDirs("src/debug/res")
|
getByName("preview").res.directories.add("src/debug/res")
|
||||||
getByName("benchmark").res.srcDirs("src/debug/res")
|
getByName("benchmark").res.directories.add("src/debug/res")
|
||||||
}
|
}
|
||||||
|
|
||||||
splits {
|
splits {
|
||||||
@@ -139,10 +139,6 @@ android {
|
|||||||
viewBinding = true
|
viewBinding = true
|
||||||
buildConfig = true
|
buildConfig = true
|
||||||
aidl = true
|
aidl = true
|
||||||
|
|
||||||
// Disable some unused things
|
|
||||||
renderScript = false
|
|
||||||
shaders = false
|
|
||||||
}
|
}
|
||||||
|
|
||||||
lint {
|
lint {
|
||||||
|
|||||||
@@ -1,6 +1,13 @@
|
|||||||
|
buildscript {
|
||||||
|
dependencies {
|
||||||
|
classpath(libs.kotlin.gradle)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
plugins {
|
plugins {
|
||||||
alias(libs.plugins.aboutLibraries) apply false
|
alias(libs.plugins.aboutLibraries) apply false
|
||||||
alias(libs.plugins.android.application) apply false
|
alias(libs.plugins.android.application) apply false
|
||||||
|
alias(libs.plugins.android.kmp.library) apply false
|
||||||
alias(libs.plugins.android.library) apply false
|
alias(libs.plugins.android.library) apply false
|
||||||
alias(libs.plugins.android.test) apply false
|
alias(libs.plugins.android.test) apply false
|
||||||
alias(libs.plugins.firebase.crashlytics) apply false
|
alias(libs.plugins.firebase.crashlytics) apply false
|
||||||
|
|||||||
@@ -26,6 +26,7 @@ dependencies {
|
|||||||
|
|
||||||
api(libs.sqldelight.androidxPaging)
|
api(libs.sqldelight.androidxPaging)
|
||||||
|
|
||||||
|
compileOnly(platform(libs.androidx.compose.bom))
|
||||||
compileOnly(libs.androidx.compose.runtimeAnnotation)
|
compileOnly(libs.androidx.compose.runtimeAnnotation)
|
||||||
|
|
||||||
testImplementation(libs.bundles.test)
|
testImplementation(libs.bundles.test)
|
||||||
|
|||||||
@@ -1,8 +1,6 @@
|
|||||||
android.nonTransitiveRClass=false
|
android.nonTransitiveRClass=false
|
||||||
android.useAndroidX=true
|
|
||||||
|
|
||||||
kotlin.code.style=official
|
kotlin.code.style=official
|
||||||
kotlin.mpp.androidSourceSetLayoutVersion=2
|
|
||||||
|
|
||||||
# Configuration should be synced with [/gradle/build-logic/gradle.properties]
|
# Configuration should be synced with [/gradle/build-logic/gradle.properties]
|
||||||
org.gradle.caching=true
|
org.gradle.caching=true
|
||||||
|
|||||||
@@ -1,21 +1,50 @@
|
|||||||
import mihon.gradle.configurations.configureAndroid
|
import com.android.build.api.dsl.ApplicationDefaultConfig
|
||||||
|
import com.android.build.api.dsl.CommonExtension
|
||||||
|
import com.android.build.api.dsl.CompileOptions
|
||||||
|
import com.android.build.api.dsl.DefaultConfig
|
||||||
import mihon.gradle.configurations.configureKotlin
|
import mihon.gradle.configurations.configureKotlin
|
||||||
import mihon.gradle.extensions.alias
|
import mihon.gradle.extensions.android
|
||||||
import mihon.gradle.extensions.configureTest
|
import mihon.gradle.extensions.configureTest
|
||||||
|
import mihon.gradle.extensions.coreLibraryDesugaring
|
||||||
import mihon.gradle.extensions.libs
|
import mihon.gradle.extensions.libs
|
||||||
import mihon.gradle.extensions.plugins
|
import mihon.gradle.extensions.mihonx
|
||||||
import org.gradle.api.Plugin
|
import org.gradle.api.Plugin
|
||||||
import org.gradle.api.Project
|
import org.gradle.api.Project
|
||||||
|
import org.gradle.kotlin.dsl.dependencies
|
||||||
|
|
||||||
@Suppress("UNUSED")
|
@Suppress("UNUSED")
|
||||||
class PluginAndroidBase : Plugin<Project> {
|
class PluginAndroidBase : Plugin<Project> {
|
||||||
override fun apply(target: Project): Unit = with(target) {
|
override fun apply(target: Project): Unit = with(target) {
|
||||||
plugins {
|
|
||||||
alias(libs.plugins.kotlin.android)
|
|
||||||
}
|
|
||||||
|
|
||||||
configureKotlin()
|
configureKotlin()
|
||||||
configureTest()
|
configureTest()
|
||||||
configureAndroid()
|
|
||||||
|
android {
|
||||||
|
defaultConfig {
|
||||||
|
minSdk = mihonx.versions.android.sdk.min.get().toInt()
|
||||||
|
if (this is ApplicationDefaultConfig) {
|
||||||
|
targetSdk = mihonx.versions.android.sdk.target.get().toInt()
|
||||||
|
}
|
||||||
|
|
||||||
|
ndkVersion = mihonx.versions.android.ndk.get()
|
||||||
|
}
|
||||||
|
|
||||||
|
compileSdk = mihonx.versions.android.sdk.compile.get().toInt()
|
||||||
|
|
||||||
|
compileOptions {
|
||||||
|
isCoreLibraryDesugaringEnabled = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
coreLibraryDesugaring(libs.android.desugar)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun CommonExtension.defaultConfig(block: DefaultConfig.() -> Unit) {
|
||||||
|
defaultConfig.apply(block)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun CommonExtension.compileOptions(block: CompileOptions.() -> Unit) {
|
||||||
|
compileOptions.apply(block)
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
import com.android.build.api.dsl.BuildFeatures
|
||||||
|
import com.android.build.api.dsl.CommonExtension
|
||||||
import mihon.gradle.extensions.alias
|
import mihon.gradle.extensions.alias
|
||||||
import mihon.gradle.extensions.android
|
import mihon.gradle.extensions.android
|
||||||
import mihon.gradle.extensions.api
|
import mihon.gradle.extensions.api
|
||||||
@@ -31,3 +33,7 @@ class PluginComposeAndroid : Plugin<Project> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun CommonExtension.buildFeatures(block: BuildFeatures.() -> Unit) {
|
||||||
|
buildFeatures.apply(block)
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,32 +1,44 @@
|
|||||||
import mihon.gradle.configurations.configureAndroid
|
import com.android.build.api.dsl.KotlinMultiplatformAndroidLibraryTarget
|
||||||
import mihon.gradle.configurations.configureKotlin
|
import mihon.gradle.configurations.configureKotlin
|
||||||
import mihon.gradle.extensions.alias
|
import mihon.gradle.extensions.alias
|
||||||
import mihon.gradle.extensions.configureTest
|
import mihon.gradle.extensions.configureTest
|
||||||
|
import mihon.gradle.extensions.coreLibraryDesugaring
|
||||||
import mihon.gradle.extensions.libs
|
import mihon.gradle.extensions.libs
|
||||||
|
import mihon.gradle.extensions.mihonx
|
||||||
import mihon.gradle.extensions.plugins
|
import mihon.gradle.extensions.plugins
|
||||||
import org.gradle.api.Plugin
|
import org.gradle.api.Plugin
|
||||||
import org.gradle.api.Project
|
import org.gradle.api.Project
|
||||||
import org.gradle.kotlin.dsl.configure
|
import org.gradle.kotlin.dsl.configure
|
||||||
|
import org.gradle.kotlin.dsl.dependencies
|
||||||
|
import org.gradle.kotlin.dsl.withType
|
||||||
import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi
|
import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi
|
||||||
import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension
|
import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension
|
||||||
|
import kotlin.text.toInt
|
||||||
|
|
||||||
@Suppress("UNUSED")
|
@Suppress("UNUSED")
|
||||||
class PluginKotlinMultiplatform : Plugin<Project> {
|
class PluginKotlinMultiplatform : Plugin<Project> {
|
||||||
override fun apply(target: Project): Unit = with(target) {
|
override fun apply(target: Project): Unit = with(target) {
|
||||||
plugins {
|
plugins {
|
||||||
alias(libs.plugins.android.library)
|
alias(libs.plugins.android.kmp.library)
|
||||||
alias(libs.plugins.kotlin.multiplatform)
|
alias(libs.plugins.kotlin.multiplatform)
|
||||||
}
|
}
|
||||||
|
|
||||||
configureKotlin()
|
configureKotlin()
|
||||||
configureTest()
|
configureTest()
|
||||||
configureAndroid()
|
|
||||||
|
|
||||||
kotlin {
|
kotlin {
|
||||||
@OptIn(ExperimentalKotlinGradlePluginApi::class)
|
@OptIn(ExperimentalKotlinGradlePluginApi::class)
|
||||||
applyDefaultHierarchyTemplate()
|
applyDefaultHierarchyTemplate()
|
||||||
|
|
||||||
androidTarget()
|
android {
|
||||||
|
minSdk = mihonx.versions.android.sdk.min.get().toInt()
|
||||||
|
compileSdk = mihonx.versions.android.sdk.compile.get().toInt()
|
||||||
|
enableCoreLibraryDesugaring = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
coreLibraryDesugaring(libs.android.desugar)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -34,3 +46,7 @@ class PluginKotlinMultiplatform : Plugin<Project> {
|
|||||||
private fun Project.kotlin(block: KotlinMultiplatformExtension.() -> Unit) {
|
private fun Project.kotlin(block: KotlinMultiplatformExtension.() -> Unit) {
|
||||||
extensions.configure(block)
|
extensions.configure(block)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun KotlinMultiplatformExtension.android(block: KotlinMultiplatformAndroidLibraryTarget.() -> Unit) {
|
||||||
|
targets.withType<KotlinMultiplatformAndroidLibraryTarget>().configureEach(block)
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,32 +0,0 @@
|
|||||||
package mihon.gradle.configurations
|
|
||||||
|
|
||||||
import com.android.build.api.dsl.ApplicationDefaultConfig
|
|
||||||
import mihon.gradle.extensions.android
|
|
||||||
import mihon.gradle.extensions.coreLibraryDesugaring
|
|
||||||
import mihon.gradle.extensions.libs
|
|
||||||
import mihon.gradle.extensions.mihonx
|
|
||||||
import org.gradle.api.Project
|
|
||||||
import org.gradle.kotlin.dsl.dependencies
|
|
||||||
|
|
||||||
fun Project.configureAndroid() {
|
|
||||||
android {
|
|
||||||
defaultConfig {
|
|
||||||
minSdk = mihonx.versions.android.sdk.min.get().toInt()
|
|
||||||
if (this is ApplicationDefaultConfig) {
|
|
||||||
targetSdk = mihonx.versions.android.sdk.target.get().toInt()
|
|
||||||
}
|
|
||||||
|
|
||||||
ndkVersion = mihonx.versions.android.ndk.get()
|
|
||||||
}
|
|
||||||
|
|
||||||
compileSdk = mihonx.versions.android.sdk.compile.get().toInt()
|
|
||||||
|
|
||||||
compileOptions {
|
|
||||||
isCoreLibraryDesugaringEnabled = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
dependencies {
|
|
||||||
coreLibraryDesugaring(libs.android.desugar)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,7 +1,6 @@
|
|||||||
package mihon.gradle.extensions
|
package mihon.gradle.extensions
|
||||||
|
|
||||||
import com.android.build.api.dsl.CommonExtension
|
import com.android.build.api.dsl.CommonExtension
|
||||||
import com.android.build.gradle.BaseExtension
|
|
||||||
import org.gradle.accessors.dm.LibrariesForLibs
|
import org.gradle.accessors.dm.LibrariesForLibs
|
||||||
import org.gradle.accessors.dm.LibrariesForMihonx
|
import org.gradle.accessors.dm.LibrariesForMihonx
|
||||||
import org.gradle.api.Project
|
import org.gradle.api.Project
|
||||||
@@ -19,10 +18,8 @@ internal fun Project.plugins(block: PluginManager.() -> Unit) {
|
|||||||
pluginManager.apply(block)
|
pluginManager.apply(block)
|
||||||
}
|
}
|
||||||
|
|
||||||
internal fun Project.android(block: CommonExtension<*, *, *, *, *, *>.() -> Unit) {
|
internal fun Project.android(block: CommonExtension.() -> Unit) {
|
||||||
extensions.configure<BaseExtension> {
|
extensions.configure(block)
|
||||||
if (this is CommonExtension<*, *, *, *, *, *>) apply(block)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fun Project.configureTest() {
|
fun Project.configureTest() {
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
[versions]
|
[versions]
|
||||||
aboutLibraries = "14.0.1"
|
aboutLibraries = "14.0.1"
|
||||||
android-desugar = "2.1.5"
|
android-desugar = "2.1.5"
|
||||||
android-gradle = "8.13.2"
|
android-gradle = "9.2.0"
|
||||||
androidx-activity-compose = "1.13.0"
|
androidx-activity-compose = "1.13.0"
|
||||||
androidx-annotation = "1.10.0"
|
androidx-annotation = "1.10.0"
|
||||||
androidx-appCompat = "1.7.1"
|
androidx-appCompat = "1.7.1"
|
||||||
@@ -83,7 +83,7 @@ androidx-benchmark-macroJunit4 = { module = "androidx.benchmark:benchmark-macro-
|
|||||||
androidx-biometric = { module = "androidx.biometric:biometric-ktx", version.ref = "androidx-biometric" }
|
androidx-biometric = { module = "androidx.biometric:biometric-ktx", version.ref = "androidx-biometric" }
|
||||||
androidx-compose-animation = { module = "androidx.compose.animation:animation" }
|
androidx-compose-animation = { module = "androidx.compose.animation:animation" }
|
||||||
androidx-compose-animationGraphics = { module = "androidx.compose.animation:animation-graphics" }
|
androidx-compose-animationGraphics = { module = "androidx.compose.animation:animation-graphics" }
|
||||||
androidx-compose-bom = { module = "androidx.compose:compose-bom-beta", version.ref = "androidx-compose-bom" }
|
androidx-compose-bom = { module = "androidx.compose:compose-bom-alpha", version.ref = "androidx-compose-bom" }
|
||||||
androidx-compose-foundation = { module = "androidx.compose.foundation:foundation" }
|
androidx-compose-foundation = { module = "androidx.compose.foundation:foundation" }
|
||||||
androidx-compose-material3 = { module = "androidx.compose.material3:material3" }
|
androidx-compose-material3 = { module = "androidx.compose.material3:material3" }
|
||||||
androidx-compose-materialIcons = { module = "androidx.compose.material:material-icons-extended" }
|
androidx-compose-materialIcons = { module = "androidx.compose.material:material-icons-extended" }
|
||||||
@@ -186,11 +186,11 @@ xmlutil-serialization = { module = "io.github.pdvrieze.xmlutil:serialization", v
|
|||||||
[plugins]
|
[plugins]
|
||||||
aboutLibraries = { id = "com.mikepenz.aboutlibraries.plugin.android", version.ref = "aboutLibraries" }
|
aboutLibraries = { id = "com.mikepenz.aboutlibraries.plugin.android", version.ref = "aboutLibraries" }
|
||||||
android-application = { id = "com.android.application", version.ref = "android-gradle" }
|
android-application = { id = "com.android.application", version.ref = "android-gradle" }
|
||||||
android-library = { id = "com.android.library", version.ref = "android-gradle" }
|
|
||||||
android-test = { id = "com.android.test", version.ref = "android-gradle" }
|
android-test = { id = "com.android.test", version.ref = "android-gradle" }
|
||||||
|
android-kmp-library = { id = "com.android.kotlin.multiplatform.library", version.ref = "android-gradle" }
|
||||||
|
android-library = { id = "com.android.library", version.ref = "android-gradle" }
|
||||||
firebase-crashlytics = { id = "com.google.firebase.crashlytics", version.ref = "firebase-crashlytics" }
|
firebase-crashlytics = { id = "com.google.firebase.crashlytics", version.ref = "firebase-crashlytics" }
|
||||||
google-services = { id = "com.google.gms.google-services", version.ref = "google-services" }
|
google-services = { id = "com.google.gms.google-services", version.ref = "google-services" }
|
||||||
kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin-gradle" }
|
|
||||||
kotlin-compose-compiler = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin-gradle" }
|
kotlin-compose-compiler = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin-gradle" }
|
||||||
kotlin-jvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin-gradle" }
|
kotlin-jvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin-gradle" }
|
||||||
kotlin-multiplatform = { id = "org.jetbrains.kotlin.multiplatform", version.ref = "kotlin-gradle" }
|
kotlin-multiplatform = { id = "org.jetbrains.kotlin.multiplatform", version.ref = "kotlin-gradle" }
|
||||||
|
|||||||
@@ -11,10 +11,12 @@ plugins {
|
|||||||
kotlin {
|
kotlin {
|
||||||
android {
|
android {
|
||||||
namespace = "tachiyomi.i18n"
|
namespace = "tachiyomi.i18n"
|
||||||
|
|
||||||
|
// TODO(antsy): Remove when https://youtrack.jetbrains.com/issue/KT-83319 is resolved
|
||||||
|
withHostTest { }
|
||||||
}
|
}
|
||||||
|
|
||||||
@OptIn(ExperimentalKotlinGradlePluginApi::class)
|
@OptIn(ExperimentalKotlinGradlePluginApi::class)
|
||||||
@Suppress("UnstableApiUsage")
|
|
||||||
dependencies {
|
dependencies {
|
||||||
api(libs.moko.resources)
|
api(libs.moko.resources)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,16 +8,21 @@ plugins {
|
|||||||
}
|
}
|
||||||
|
|
||||||
kotlin {
|
kotlin {
|
||||||
|
@Suppress("UnstableApiUsage")
|
||||||
android {
|
android {
|
||||||
namespace = "eu.kanade.tachiyomi.source"
|
namespace = "eu.kanade.tachiyomi.source"
|
||||||
|
optimization {
|
||||||
defaultConfig {
|
consumerKeepRules.apply {
|
||||||
consumerProguardFile("consumer-proguard.pro")
|
publish = true
|
||||||
|
file("consumer-proguard.pro")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO(antsy): Remove when https://youtrack.jetbrains.com/issue/KT-83319 is resolved
|
||||||
|
withHostTest { }
|
||||||
|
}
|
||||||
|
|
||||||
@OptIn(ExperimentalKotlinGradlePluginApi::class)
|
@OptIn(ExperimentalKotlinGradlePluginApi::class)
|
||||||
@Suppress("UnstableApiUsage")
|
|
||||||
dependencies {
|
dependencies {
|
||||||
api(libs.kotlinx.serialization.json)
|
api(libs.kotlinx.serialization.json)
|
||||||
api(libs.injekt)
|
api(libs.injekt)
|
||||||
|
|||||||
@@ -8,10 +8,12 @@ plugins {
|
|||||||
kotlin {
|
kotlin {
|
||||||
android {
|
android {
|
||||||
namespace = "tachiyomi.source.local"
|
namespace = "tachiyomi.source.local"
|
||||||
|
|
||||||
|
// TODO(antsy): Remove when https://youtrack.jetbrains.com/issue/KT-83319 is resolved
|
||||||
|
withHostTest { }
|
||||||
}
|
}
|
||||||
|
|
||||||
@OptIn(ExperimentalKotlinGradlePluginApi::class)
|
@OptIn(ExperimentalKotlinGradlePluginApi::class)
|
||||||
@Suppress("UnstableApiUsage")
|
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation(projects.sourceApi)
|
implementation(projects.sourceApi)
|
||||||
api(projects.i18n)
|
api(projects.i18n)
|
||||||
|
|||||||
@@ -11,9 +11,9 @@ android {
|
|||||||
sourceSets {
|
sourceSets {
|
||||||
getByName("main") {
|
getByName("main") {
|
||||||
if (Config.includeTelemetry) {
|
if (Config.includeTelemetry) {
|
||||||
kotlin.srcDirs("src/firebase/kotlin")
|
kotlin.directories.add("src/firebase/kotlin")
|
||||||
} else {
|
} else {
|
||||||
kotlin.srcDirs("src/noop/kotlin")
|
kotlin.directories.add("src/noop/kotlin")
|
||||||
manifest.srcFile("src/noop/AndroidManifext.xml")
|
manifest.srcFile("src/noop/AndroidManifext.xml")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user