Ver Fonte

code improvements

milan jurkulák há 2 anos atrás
pai
commit
d617acefb7

+ 1 - 0
.gitignore

@@ -50,3 +50,4 @@ google-services.json
 # Android Profiling
 *.hprof!/release.zip
 !/documentation/release-notes-1.0.0.md
+/reports/

+ 4 - 0
buildSrc/src/main/kotlin/org/mjdev/gradle/base/BasePlugin.kt

@@ -8,6 +8,7 @@
 
 package org.mjdev.gradle.base
 
+import org.gradle.api.NamedDomainObjectCollection
 import org.gradle.api.Plugin
 import org.gradle.api.Project
 
@@ -19,4 +20,7 @@ abstract class BasePlugin : Plugin<Project> {
 
     abstract fun Project.work()
 
+    operator fun <T> NamedDomainObjectCollection<T>.get(index:String) =
+        getByName(index)
+
 }

+ 53 - 30
buildSrc/src/main/kotlin/org/mjdev/gradle/plugin/AppPlugin.kt

@@ -45,16 +45,18 @@ import org.mjdev.gradle.extensions.kotlinCompileOptions
 import org.mjdev.gradle.extensions.detektTask
 import org.mjdev.gradle.extensions.dokkaTask
 import org.mjdev.gradle.extensions.apply
+import org.mjdev.gradle.extensions.projectName
 import org.mjdev.gradle.plugin.config.AppConfig
 import org.mjdev.gradle.tasks.ReleaseNotesCleanTask
 import org.mjdev.gradle.tasks.ReleaseNotesCreateTask
 import org.mjdev.gradle.tasks.ZipReleaseClearTask
 import org.mjdev.gradle.tasks.ZipReleaseCreateTask
-
 @Suppress("UnstableApiUsage")
 class AppPlugin : BasePlugin() {
+    private val configFieldName = "appConfig"
+    // todo : move
     private val projectJavaVersion = JavaVersion.VERSION_17
-    private val projectKotlinCompilerVersion = "1.5.8"
+    // todo : move
     private val projectExcludes = listOf(
         "META-INF/",
         "/META-INF/{AL2.0,LGPL2.1}",
@@ -68,8 +70,6 @@ class AppPlugin : BasePlugin() {
     )
     private val projectProguardFile = "proguard-android-optimize.txt"
     private val projectProguardRulesFile = "proguard-rules.pro"
-    private val projectJacocoVersion = "0.8.8"
-    private val configFieldName = "appConfig"
 
     override fun Project.work() {
         extension<AppConfig>(configFieldName)
@@ -92,10 +92,14 @@ class AppPlugin : BasePlugin() {
             runAfterCleanTask()
         }
         configure<ApplicationExtension> {
+            // todo : move
             namespace = libs.versions.app.namespace.string
+            // todo : move
             compileSdk = libs.versions.compileSdk.int
             setSigningConfigs(project) {
+                // todo : move
                 debugKeyFile = libs.versions.debug.keyfile.string
+                // todo : move
                 releaseKeyFile = libs.versions.release.keyfile.string
             }
             buildFeatures {
@@ -103,11 +107,14 @@ class AppPlugin : BasePlugin() {
                 buildConfig = true
             }
             compileOptions {
+                // todo : move
                 sourceCompatibility = projectJavaVersion
+                // todo : move
                 targetCompatibility = projectJavaVersion
             }
             composeOptions {
-                kotlinCompilerExtensionVersion = projectKotlinCompilerVersion
+                // todo : move
+                kotlinCompilerExtensionVersion = libs.versions.kotlin.compiler.version.string
             }
             defaultConfig {
                 applicationId = libs.versions.app.namespace.string
@@ -116,11 +123,13 @@ class AppPlugin : BasePlugin() {
                 versionCode = project.versionCode
                 versionName = project.versionName
                 multiDexEnabled = true
+                // todo : move
                 buildConfigString(
                     "IPTV_API_URL" to "https://iptv-org.github.io/api/",
                     "GITHUB_USER" to "mimoccc",
                     "GITHUB_REPOSITORY" to "tvapp"
                 )
+                // todo : move
                 manifestPlaceholders(
                     "auth0Domain" to "@string/com_auth0_domain",
                     "auth0Scheme" to "demo"
@@ -146,7 +155,7 @@ class AppPlugin : BasePlugin() {
 //                  enableAndroidTestCoverage = true
 //                  isRenderscriptDebuggable = true
 //                  isZipAlignEnabled = false
-                    signingConfig = signingConfigs.getAt(name)
+                    signingConfig = signingConfigs[name]
                     stringRes("app_name", "TVApp-Debug")
                     addSyncProviderAuthString("sync_auth", ".sync")
                     proguardFiles(
@@ -155,7 +164,7 @@ class AppPlugin : BasePlugin() {
                     )
                 }
                 release {
-                    applicationIdSuffix = ".$name"
+                    applicationIdSuffix = ""
                     isDebuggable = false
                     isJniDebuggable = false
                     isMinifyEnabled = true
@@ -167,8 +176,10 @@ class AppPlugin : BasePlugin() {
 //                  enableAndroidTestCoverage = false
 //                  isRenderscriptDebuggable = false
 //                  isZipAlignEnabled = true
-                    signingConfig = signingConfigs.getAt(name)
+                    signingConfig = signingConfigs[name]
+                    // todo : move
                     stringRes("app_name", "TVApp")
+                    // todo : move
                     addSyncProviderAuthString("sync_auth", ".sync")
                     proguardFiles(
                         getDefaultProguardFile(projectProguardFile),
@@ -180,22 +191,23 @@ class AppPlugin : BasePlugin() {
                 getByName("main") { jniLibs.srcDirs() }
             }
             lint {
-                checkReleaseBuilds = false
+                checkReleaseBuilds = true
                 checkAllWarnings = true
                 showAll = true
                 explainIssues = true
-                abortOnError = true
-                warningsAsErrors = true
+                // todo : move
+                abortOnError = false
+                // todo move
+                warningsAsErrors = false
                 disable += "UnusedIds"
             }
             testOptions {
                 unitTests.isReturnDefaultValues = true
             }
             testCoverage {
-                jacocoVersion = projectJacocoVersion
+                jacocoVersion = libs.versions.jacoco.version.string
             }
         }
-        // app
         afterEvaluate {
             val appConfig = project.extension<AppConfig>()
             kotlinCompileOptions {
@@ -205,17 +217,19 @@ class AppPlugin : BasePlugin() {
                 }
             }
             detektTask {
-                if (appConfig.autoCorrectCode) runAfterAssembleTask()
+                if (appConfig.autoCorrectCode)
+                    runAfterAssembleTask()
             }
             dokkaTask {
-                outputDirectory.set(project.rootDir.resolve(appConfig.documentationDir))
-                moduleName.set(project.name)
+                outputDirectory.set(rootDir.resolve(appConfig.documentationDir))
+                moduleName.set(projectName)
                 suppressObviousFunctions.set(false)
                 dokkaSourceSets.configureEach {
                     offlineMode.set(false)
                     includeNonPublic.set(false)
                     skipDeprecated.set(false)
-                    reportUndocumented.set(false)
+                    failOnWarning.set(appConfig.failOnDocumentationWarning)
+                    reportUndocumented.set(appConfig.reportUndocumentedFiles)
                     skipEmptyPackages.set(false)
                     platform.set(Platform.jvm)
                     jdkVersion.set(projectJavaVersion.asInt())
@@ -223,21 +237,27 @@ class AppPlugin : BasePlugin() {
                     noJdkLink.set(false)
                     noAndroidSdkLink.set(false)
                 }
-                if (appConfig.createDocumentation) runAfterAssembleTask()
+                if (appConfig.createDocumentation)
+                    runAfterAssembleTask()
             }
             val rnTask = registerTask<ReleaseNotesCreateTask> {
-                if (appConfig.createReleaseNotes) runAfterAssembleTask()
+                if (appConfig.createReleaseNotes)
+                    runAfterAssembleTask()
             }
             registerTask<ZipReleaseCreateTask> {
-                mustRunAfter(rnTask)
-                if (appConfig.createZipRelease) runAfterAssembleTask()
+                if(appConfig.createReleaseNotes)
+                    mustRunAfter(rnTask)
+                if (appConfig.createZipRelease)
+                    runAfterAssembleTask()
             }
             configure<DetektExtension> {
+                ignoreFailures = appConfig.ignoreCodeFailures
+                reportsDir = rootDir.resolve(appConfig.codeReportsDir)
                 @Suppress("DEPRECATION")
                 config = files(project.rootDir.resolve(appConfig.detectConfigFile))
             }
             configure<KotlinterExtension> {
-                ignoreFailures = false
+                ignoreFailures = appConfig.ignoreCodeFailures
                 reporters = arrayOf("checkstyle", "plain")
             }
 //            configurations.getByName("releaseRuntimeClasspath") {
@@ -246,18 +266,21 @@ class AppPlugin : BasePlugin() {
 //            configurations.getByName("debugRuntimeClasspath") {
 //                resolutionStrategy.activateDependencyLocking()
 //            }
-//            applicationVariants.all {
-//                outputs.map {
-//                    it as BaseVariantOutputImpl
-//                }.forEach { output ->
-//                    val outputFileName = "$applicationId-$versionName.apk"
-//                    output.outputFileName = outputFileName
+            // todo
+//            if (appConfig.renameApkOutputByAppID) {
+//                applicationVariants.all {
+//                    outputs.map {
+//                        it as BaseVariantOutputImpl
+//                    }.forEach { output ->
+//                        val outputFileName = "$applicationId-$versionName.apk"
+//                        output.outputFileName = outputFileName
+//                    }
 //                }
 //            }
         }
-        dependencyLocking {
+//        dependencyLocking {
 //            lockMode.set(LockMode.STRICT)
-        }
+//        }
         dependencies {
             implementation(project(mapOf("path" to ":tvlib")))
             // compose

+ 35 - 24
buildSrc/src/main/kotlin/org/mjdev/gradle/plugin/LibPlugin.kt

@@ -35,14 +35,16 @@ import org.mjdev.gradle.extensions.kotlinCompileOptions
 import org.mjdev.gradle.extensions.detektTask
 import org.mjdev.gradle.extensions.dokkaTask
 import org.mjdev.gradle.extensions.apply
+import org.mjdev.gradle.extensions.int
+import org.mjdev.gradle.extensions.string
+import org.mjdev.gradle.extensions.projectName
 
 @Suppress("UnstableApiUsage")
 class LibPlugin : BasePlugin() {
-    private val projectNamespace = "org.mjdev.tvlib"
-    private val projectCompileSdk = 34
-    private val projectMinSdk = 21
+    private val configFieldName = "libConfig"
+    // todo : move
     private val projectJavaVersion = JavaVersion.VERSION_17
-    private val projectKotlinCompilerVersion = "1.5.8"
+    // todo : move
     private val projectExcludes = listOf(
         "META-INF/",
         "/META-INF/{AL2.0,LGPL2.1}",
@@ -56,8 +58,6 @@ class LibPlugin : BasePlugin() {
     )
     private val projectProguardFile = "proguard-android-optimize.txt"
     private val projectProguardRulesFile = "proguard-rules.pro"
-    private val projectJacocoVersion = "0.8.8"
-    private val configFieldName = "libConfig"
 
     override fun Project.work() {
         extension<LibConfig>(configFieldName)
@@ -70,18 +70,23 @@ class LibPlugin : BasePlugin() {
         apply(plugin = "com.google.dagger.hilt.android")
         apply(plugin = "dagger.hilt.android.plugin")
         apply(plugin = "io.objectbox")
+        apply("org.jetbrains.dokka")
         apply(DetektPlugin::class)
         apply(KotlinterPlugin::class)
-        apply("org.jetbrains.dokka")
         configure<LibraryExtension> {
-            namespace = projectNamespace
-            compileSdk = projectCompileSdk
+            // todo : move
+            namespace = libs.versions.lib.namespace.string
+            // todo : move
+            compileSdk = libs.versions.compileSdk.int
             compileOptions {
+                // todo : move
                 sourceCompatibility = projectJavaVersion
+                // todo : move
                 targetCompatibility = projectJavaVersion
             }
             defaultConfig {
-                minSdk = projectMinSdk
+                // todo : move
+                minSdk = libs.versions.minSdk.int
                 testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
             }
             buildFeatures {
@@ -89,7 +94,8 @@ class LibPlugin : BasePlugin() {
                 buildConfig = true
             }
             composeOptions {
-                kotlinCompilerExtensionVersion = projectKotlinCompilerVersion
+                // todo : move
+                kotlinCompilerExtensionVersion = libs.versions.kotlin.compiler.version.string
             }
             packaging {
                 resources {
@@ -121,15 +127,17 @@ class LibPlugin : BasePlugin() {
                 checkAllWarnings = true
                 showAll = true
                 explainIssues = true
-                abortOnError = true
-                warningsAsErrors = true
+                // todo : move
+                abortOnError = false
+                // todo : move
+                warningsAsErrors = false
                 disable += "UnusedIds"
             }
             testOptions {
                 unitTests.isReturnDefaultValues = true
             }
             testCoverage {
-                jacocoVersion = projectJacocoVersion
+                jacocoVersion = libs.versions.jacoco.version.string
             }
         }
         afterEvaluate {
@@ -141,19 +149,19 @@ class LibPlugin : BasePlugin() {
                 }
             }
             detektTask {
-                if (libConfig.autoCorrectCode) runAfterAssembleTask()
+                if (libConfig.autoCorrectCode)
+                    runAfterAssembleTask()
             }
             dokkaTask {
-                outputDirectory.set(
-                    project.rootDir.resolve(libConfig.documentationDir)
-                )
-                moduleName.set(project.name)
+                outputDirectory.set(rootDir.resolve(libConfig.documentationDir))
+                moduleName.set(projectName)
                 suppressObviousFunctions.set(false)
                 dokkaSourceSets.configureEach {
                     offlineMode.set(false)
                     includeNonPublic.set(false)
                     skipDeprecated.set(false)
-                    reportUndocumented.set(false)
+                    failOnWarning.set(libConfig.failOnDocumentationWarning)
+                    reportUndocumented.set(libConfig.reportUndocumentedFiles)
                     skipEmptyPackages.set(false)
                     platform.set(Platform.jvm)
                     jdkVersion.set(projectJavaVersion.asInt())
@@ -161,14 +169,17 @@ class LibPlugin : BasePlugin() {
                     noJdkLink.set(false)
                     noAndroidSdkLink.set(false)
                 }
-                if (libConfig.createDocumentation) runAfterAssembleTask()
+                if (libConfig.createDocumentation)
+                    runAfterAssembleTask()
             }
             configure<DetektExtension> {
+                reportsDir = rootDir.resolve(libConfig.codeReportsDir)
+                ignoreFailures = libConfig.ignoreCodeFailures
                 @Suppress("DEPRECATION")
                 config = files(project.rootDir.resolve(libConfig.detectConfigFile))
             }
             configure<KotlinterExtension> {
-                ignoreFailures = false
+                ignoreFailures = libConfig.ignoreCodeFailures
                 reporters = arrayOf("checkstyle", "plain")
             }
 //            configurations.getByName("releaseRuntimeClasspath") {
@@ -178,9 +189,9 @@ class LibPlugin : BasePlugin() {
 //                resolutionStrategy.activateDependencyLocking()
 //            }
         }
-        dependencyLocking {
+//        dependencyLocking {
 //            lockMode.set(LockMode.STRICT)
-        }
+//        }
         dependencies {
             // core
             implementation(libs.androidx.ktx)

+ 7 - 3
buildSrc/src/main/kotlin/org/mjdev/gradle/plugin/config/AppConfig.kt

@@ -9,15 +9,19 @@
 package org.mjdev.gradle.plugin.config
 
 open class AppConfig {
-    open var autoCorrectCode = false
+    open var autoCorrectCode = true
+    open var ignoreCodeFailures = true
     open var createDocumentation = false
+    open var reportUndocumentedFiles = false
+    open var failOnDocumentationWarning = false
     open var createReleaseNotes = false
     open var createZipRelease = false
+    open var renameApkOutputByAppID = false
 
-//    open var renameApkOutputByAppID = false
 //    open var createInfoClass = false
 //    open var buildTypeInLauncherIcon = false
 
+    open var codeReportsDir = "reports/app"
     open var documentationDir = "documentation/app"
-    open var detectConfigFile = "config/detekt.ym"
+    open var detectConfigFile = "config/detekt.yml"
 }

+ 6 - 2
buildSrc/src/main/kotlin/org/mjdev/gradle/plugin/config/LibConfig.kt

@@ -9,9 +9,13 @@
 package org.mjdev.gradle.plugin.config
 
 open class LibConfig {
-    open var autoCorrectCode = false
+    open var autoCorrectCode = true
+    open var ignoreCodeFailures = true
     open var createDocumentation = false
+    open var reportUndocumentedFiles = false
+    open var failOnDocumentationWarning = false
 
+    open var codeReportsDir = "reports/lib"
     open var documentationDir = "documentation/lib"
-    open var detectConfigFile = "config/detekt.ym"
+    open var detectConfigFile = "config/detekt.yml"
 }

+ 4 - 0
documentation/home.md

@@ -59,6 +59,10 @@ Just an test app to skills showcase of coding skills, using
 - SyncAdapter
 - Automatic documentation
 - Automatic release
+- Toml dependencies
+- Gradle plugins
+- Screenshots auto creation (coming soon)
+- AI test auto creation (coming soon)
 
 ## Compilation
 

+ 10 - 5
gradle/libs.versions.toml

@@ -1,17 +1,22 @@
 [versions]
 app-namespace = "org.mjdev.tvapp"
-debug-keyfile = "config/signing.prop"
-release-keyfile = "config/signing.prop"
-#lib-namespace = ""
+lib-namespace = "org.mjdev.tvlib"
+#
 minSdk = "21"
 compileSdk = "34"
 targetSdk = "34"
-
+#
+debug-keyfile = "config/signing.prop"
+release-keyfile = "config/signing.prop"
+#
+jacoco-version = "0.8.8"
+kotlin-compiler-version = "1.5.8"
+#
 accompanist-permissions = "0.33.2-alpha"
 aescrypt = "0.0.1"
 android-documentation-plugin = "1.9.10"
 androidsvg-aar = "1.4"
-
+#
 androidx-activity-compose = "1.9.0"
 androidx-customview-poolingcontainer = "1.0.0"
 androidx-espresso-core = "3.5.1"

+ 4 - 0
readme.md

@@ -76,6 +76,10 @@ Technologies that will be used:
 - SyncAdapter
 - Automatic documentation
 - Automatic release
+- Toml dependencies
+- Gradle plugins
+- Screenshots auto creation (coming soon)
+- AI test auto creation (coming soon)
 
 ## Compilation
 

+ 0 - 0
reports/.nomedia