Browse Source

Create plugin for linting (#8942)

Andreas 2 years ago
parent
commit
c31e75f02f

+ 1 - 1
.github/workflows/build_pull_request.yml

@@ -36,4 +36,4 @@ jobs:
       - name: Build app and run unit tests
         uses: gradle/gradle-command-action@v2
         with:
-          arguments: assembleStandardRelease testStandardReleaseUnitTest
+          arguments: lintKotlin assembleStandardRelease testStandardReleaseUnitTest

+ 1 - 1
.github/workflows/build_push.yml

@@ -31,7 +31,7 @@ jobs:
       - name: Build app and run unit tests
         uses: gradle/gradle-command-action@v2
         with:
-          arguments: assembleStandardRelease testStandardReleaseUnitTest
+          arguments: lintKotlin assembleStandardRelease testStandardReleaseUnitTest
 
       # Sign APK and create release for tags
 

+ 1 - 5
app/build.gradle.kts

@@ -6,6 +6,7 @@ plugins {
     id("com.android.application")
     id("com.mikepenz.aboutlibraries.plugin")
     kotlin("android")
+    id("tachiyomi.lint")
     kotlin("plugin.serialization")
     id("com.github.zellius.shortcut-helper")
     id("com.squareup.sqldelight")
@@ -346,11 +347,6 @@ tasks {
             )
         }
     }
-
-    preBuild {
-        val ktlintTask = if (System.getenv("GITHUB_BASE_REF") == null) formatKotlin else lintKotlin
-        dependsOn(ktlintTask)
-    }
 }
 
 buildscript {

+ 1 - 19
build.gradle.kts

@@ -3,30 +3,12 @@ buildscript {
         classpath(libs.android.shortcut.gradle)
         classpath(libs.google.services.gradle)
         classpath(libs.aboutLibraries.gradle)
-        classpath(kotlinx.serialization.gradle)
         classpath(libs.sqldelight.gradle)
     }
 }
 
 plugins {
-    alias(androidx.plugins.application) apply false
-    alias(androidx.plugins.library) apply false
-    alias(androidx.plugins.test) apply false
-    alias(kotlinx.plugins.android) apply false
-    alias(libs.plugins.kotlinter)
-}
-
-subprojects {
-    apply<org.jmailen.gradle.kotlinter.KotlinterPlugin>()
-
-    kotlinter {
-        experimentalRules = true
-
-        disabledRules = arrayOf(
-            "experimental:argument-list-wrapping", // Doesn't play well with Android Studio
-            "filename", // Often broken to give a more general name
-        )
-    }
+    alias(kotlinx.plugins.serialization) apply false
 }
 
 tasks.register<Delete>("clean") {

+ 4 - 2
buildSrc/build.gradle.kts

@@ -3,12 +3,14 @@ plugins {
 }
 
 dependencies {
-    compileOnly("org.jetbrains.kotlin:kotlin-gradle-plugin:${kotlinLibs.versions.kotlin.version.get()}")
-
+    implementation(androidxLibs.gradle)
+    implementation(kotlinLibs.gradle)
+    implementation(libs.kotlinter)
     implementation(gradleApi())
 }
 
 repositories {
+    gradlePluginPortal()
     mavenCentral()
     google()
 }

+ 6 - 0
buildSrc/settings.gradle.kts

@@ -1,5 +1,11 @@
 dependencyResolutionManagement {
     versionCatalogs {
+        create("libs") {
+            from(files("../gradle/libs.versions.toml"))
+        }
+        create("androidxLibs") {
+            from(files("../gradle/androidx.versions.toml"))
+        }
         create("kotlinLibs") {
             from(files("../gradle/kotlinx.versions.toml"))
         }

+ 20 - 0
buildSrc/src/main/kotlin/tachiyomi.lint.gradle.kts

@@ -0,0 +1,20 @@
+import org.jmailen.gradle.kotlinter.KotlinterExtension
+import org.jmailen.gradle.kotlinter.KotlinterPlugin
+
+apply<KotlinterPlugin>()
+
+extensions.configure<KotlinterExtension>("kotlinter") {
+    experimentalRules = true
+
+    disabledRules = arrayOf(
+        "experimental:argument-list-wrapping", // Doesn't play well with Android Studio
+        "filename", // Often broken to give a more general name
+    )
+}
+
+tasks {
+    named<DefaultTask>("preBuild").configure {
+        if (!System.getenv("CI").toBoolean())
+            dependsOn("formatKotlin")
+    }
+}

+ 1 - 0
core/build.gradle.kts

@@ -1,6 +1,7 @@
 plugins {
     id("com.android.library")
     kotlin("android")
+    id("tachiyomi.lint")
     kotlin("plugin.serialization")
 }
 

+ 2 - 5
gradle/androidx.versions.toml

@@ -3,6 +3,8 @@ agp_version = "7.4.0"
 lifecycle_version = "2.5.1"
 
 [libraries]
+gradle = { module = "com.android.tools.build:gradle", version.ref = "agp_version" }
+
 annotation = "androidx.annotation:annotation:1.5.0"
 appcompat = "androidx.appcompat:appcompat:1.6.0"
 biometricktx = "androidx.biometric:biometric-ktx:1.2.0-alpha05"
@@ -33,8 +35,3 @@ test-uiautomator = "androidx.test.uiautomator:uiautomator:2.2.0"
 [bundles]
 lifecycle = ["lifecycle-common", "lifecycle-process", "lifecycle-runtimektx"]
 workmanager = ["work-runtime", "guava"]
-
-[plugins]
-application = { id = "com.android.application", version.ref = "agp_version" }
-library = { id = "com.android.library", version.ref = "agp_version" }
-test = { id = "com.android.test", version.ref = "agp_version" }

+ 2 - 2
gradle/kotlinx.versions.toml

@@ -15,7 +15,6 @@ coroutines-android = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-androi
 serialization-json = { module = "org.jetbrains.kotlinx:kotlinx-serialization-json", version = "1.4.0" }
 serialization-json-okio = { module = "org.jetbrains.kotlinx:kotlinx-serialization-json-okio", version = "1.4.0" }
 serialization-protobuf = { module = "org.jetbrains.kotlinx:kotlinx-serialization-protobuf", version.ref = "serialization_version" }
-serialization-gradle = { module = "org.jetbrains.kotlin:kotlin-serialization", version.ref = "kotlin_version" }
 serialization-xml-core = { module = "io.github.pdvrieze.xmlutil:core-android", version.ref = "xml_serialization_version" }
 serialization-xml = { module = "io.github.pdvrieze.xmlutil:serialization-android", version.ref = "xml_serialization_version" }
 
@@ -24,4 +23,5 @@ coroutines = ["coroutines-core", "coroutines-android"]
 serialization = ["serialization-json", "serialization-json-okio", "serialization-protobuf", "serialization-xml-core", "serialization-xml"]
 
 [plugins]
-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin_version" }
+android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin_version" }
+serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin_version" }

+ 2 - 3
gradle/libs.versions.toml

@@ -89,6 +89,8 @@ voyager-navigator = { module = "ca.gosyer:voyager-navigator", version.ref = "voy
 voyager-tab-navigator = { module = "ca.gosyer:voyager-tab-navigator", version.ref = "voyager" }
 voyager-transitions = { module = "ca.gosyer:voyager-transitions", version.ref = "voyager" }
 
+kotlinter = "org.jmailen.gradle:kotlinter-gradle:3.13.0"
+
 [bundles]
 reactivex = ["rxandroid", "rxjava", "rxrelay"]
 okhttp = ["okhttp-core", "okhttp-logging", "okhttp-dnsoverhttps"]
@@ -98,6 +100,3 @@ coil = ["coil-core", "coil-gif", "coil-compose"]
 shizuku = ["shizuku-api", "shizuku-provider"]
 voyager = ["voyager-navigator", "voyager-tab-navigator", "voyager-transitions"]
 richtext = ["richtext-commonmark", "richtext-m3"]
-
-[plugins]
-kotlinter = { id = "org.jmailen.kotlinter", version = "3.13.0" }

+ 1 - 0
i18n/build.gradle.kts

@@ -1,6 +1,7 @@
 plugins {
     id("com.android.library")
     kotlin("android")
+    id("tachiyomi.lint")
 }
 
 android {

+ 1 - 0
macrobenchmark/build.gradle.kts

@@ -1,6 +1,7 @@
 plugins {
     id("com.android.test")
     kotlin("android")
+    id("tachiyomi.lint")
 }
 
 android {

+ 1 - 0
source-api/build.gradle.kts

@@ -1,6 +1,7 @@
 plugins {
     id("com.android.library")
     kotlin("android")
+    id("tachiyomi.lint")
     kotlin("plugin.serialization")
 }
 

+ 1 - 0
source-api/src/main/java/eu/kanade/tachiyomi/source/model/Page.kt

@@ -29,6 +29,7 @@ open class Page(
 
     @Transient
     private val _progressFlow = MutableStateFlow(0)
+
     @Transient
     val progressFlow = _progressFlow.asStateFlow()
     var progress: Int