milan jurkulák před 2 roky
rodič
revize
c3887902e2

+ 3 - 4
buildSrc/src/main/kotlin/org/mjdev/gradle/custom/icons/LauncherIconTask.kt

@@ -9,7 +9,6 @@
 package org.mjdev.gradle.custom.icons
 
 import org.gradle.api.tasks.OutputDirectory
-import org.gradle.api.tasks.TaskAction
 import org.mjdev.gradle.base.BaseTask
 import org.mjdev.gradle.extensions.androidManifestFiles
 import org.mjdev.gradle.extensions.fileTree
@@ -23,7 +22,7 @@ open class LauncherIconTask : BaseTask() {
 
     val outputDir
         @OutputDirectory
-        get()= resOutputDirectory
+        get() = resOutputDirectory
 
     private var iconNames: MutableSet<String> = HashSet()
     private var foregroundIconNames: MutableSet<String> = HashSet()
@@ -42,8 +41,7 @@ open class LauncherIconTask : BaseTask() {
         description = "Generate icon due application variant"
     }
 
-    @TaskAction
-    fun run() {
+    override fun doTask() {
         if (filters.isEmpty()) return
         val names = HashSet<String>().apply {
             iconNames.forEach { add(it) }
@@ -92,4 +90,5 @@ open class LauncherIconTask : BaseTask() {
             }
         }
     }
+
 }

+ 18 - 7
buildSrc/src/main/kotlin/org/mjdev/gradle/extensions/ProjectExt.kt

@@ -28,6 +28,7 @@ import org.gradle.api.tasks.SourceSet.MAIN_SOURCE_SET_NAME
 import org.gradle.api.tasks.SourceSet.TEST_SOURCE_SET_NAME
 import org.gradle.api.tasks.SourceSetContainer
 import org.gradle.api.tasks.TaskProvider
+import org.gradle.internal.impldep.jakarta.xml.bind.DatatypeConverter.parseBoolean
 import org.gradle.kotlin.dsl.extra
 import org.gradle.kotlin.dsl.findByType
 import org.gradle.kotlin.dsl.the
@@ -36,7 +37,7 @@ import org.jetbrains.dokka.gradle.DokkaTask
 import org.jetbrains.kotlin.gradle.dsl.KotlinProjectExtension
 import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
 import org.mjdev.gradle.plugin.config.base.BuildConfigs
-//import org.kordamp.gradle.plugin.markdown.tasks.MarkdownToHtmlTask
+import org.kordamp.gradle.plugin.markdown.tasks.MarkdownToHtmlTask
 import java.io.File
 import java.io.FileInputStream
 import java.util.Properties
@@ -136,6 +137,15 @@ val Project.isAndroid: Boolean
 val Project.packageName: String
     get() = applicationId
 
+val Project.androidStudioVersion
+    get() = project.extra.properties["android.studio.version"]
+
+val Project.runningFromAndroidStudio
+    get() = parseBoolean(project.extra.properties["android.injected.invoked.from.ide"].toString())
+
+val Project.isAndroidStudio
+    get() = project.extra.properties.keys.contains("android.studio.version")
+
 val Project.applicationId: String
     get() = if (isAndroid) android.defaultConfig.applicationId ?: "" else ""
 
@@ -209,7 +219,7 @@ val Project.log: Logger
 //    })
 //}
 
-fun Project.loadPropertiesFile(path:String) {
+fun Project.loadPropertiesFile(path: String) {
     val propertiesFile = project.rootDir.resolve(path)
     val props = Properties()
     props.load(FileInputStream(propertiesFile))
@@ -222,9 +232,10 @@ fun Project.loadPropertiesFile(path:String) {
 }
 
 inline fun <reified T> Project.extension(name: String? = null): T = runCatching {
-    var cfg: T? = project.extensions.findByType(T::class.java)
+    var cfg: T? = project.rootProject.extensions.findByType(T::class.java)
+        ?: project.extensions.findByType(T::class.java)
     if (cfg == null && name != null) {
-        project.extensions.add(name, T::class.java)
+        project.extensions.create(name, T::class.java)
     }
     cfg = project.extensions.findByType(T::class.java)
     cfg!!
@@ -266,9 +277,9 @@ fun Project.dokkaTask(scoped: DokkaTask.() -> Unit) {
     tasks.withType<DokkaTask>().first().also { t -> scoped(t) }
 }
 
-//fun Project.markDownToHtmlTask(scoped: MarkdownToHtmlTask.() -> Unit) {
-//    tasks.withType<MarkdownToHtmlTask>().first().also { t -> scoped(t) }
-//}
+fun Project.markDownToHtmlTask(scoped: MarkdownToHtmlTask.() -> Unit) {
+    tasks.withType<MarkdownToHtmlTask>().first().also { t -> scoped(t) }
+}
 
 fun Project.registerSources(outDir: File, variant: BaseVariant) {
     if (outDir.absolutePath.contains("generated/source")) {

+ 45 - 0
buildSrc/src/main/kotlin/org/mjdev/gradle/extensions/TaskExt.kt

@@ -14,17 +14,26 @@ import com.android.build.api.dsl.CommonExtension
 import com.android.build.api.variant.AndroidComponentsExtension
 import com.android.build.gradle.AppExtension
 import com.android.build.gradle.api.BaseVariant
+import io.gitlab.arturbosch.detekt.Detekt
 import org.gradle.StartParameter
 import org.gradle.api.GradleException
+import org.gradle.api.Plugin
+import org.gradle.api.Project
 import org.gradle.api.Task
+import org.gradle.api.file.ConfigurableFileCollection
 import org.gradle.api.logging.Logger
 import org.gradle.api.logging.Logging
 import org.gradle.api.plugins.AppliedPlugin
 import org.gradle.api.tasks.SourceSet.MAIN_SOURCE_SET_NAME
 import org.gradle.api.tasks.SourceSet.TEST_SOURCE_SET_NAME
 import org.gradle.api.tasks.TaskContainer
+import org.gradle.kotlin.dsl.withType
+import org.jetbrains.dokka.gradle.DokkaTask
+import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
 import org.mjdev.gradle.base.BaseTask
+import org.mjdev.gradle.plugin.config.base.BuildConfigs
 import java.io.File
+import kotlin.reflect.KClass
 
 val Task.projectName: String
     get() = project.name
@@ -109,6 +118,17 @@ val BaseTask.androidManifestFiles: List<File>
         }
     }
 
+val Task.rootDir: File
+    get() = project.rootDir
+
+inline fun <reified T : Task> Task.registerTask(
+    name: String? = null,
+    fn: T.() -> Unit = {}
+): T = project.registerTask(name, fn)
+
+fun Task.files(vararg paths: Any): ConfigurableFileCollection =
+    project.files(paths)
+
 @Suppress("UnstableApiUsage")
 fun Task.finalizeDsl(block: CommonExtension<*, *, *, *, *>.() -> Unit) {
     androidComponents.finalizeDsl { android ->
@@ -270,6 +290,31 @@ fun Task.setTaskDescription(description: String?): Task = this.apply {
     description?.let { this.description = it }
 }
 
+inline fun <reified T> Task.runConfigured(crossinline function: T.() -> Unit) {
+    val config = project.extension<T>()
+    if (config is BuildConfigs) {
+//            project.androidExtension.buildTypes.forEach { bt ->
+//                println("> Configuring build : ${bt.name}")
+//                val btConfig = config.buildTypes[bt.name.lowercase()]
+//                println ("> Config: $btConfig")
+//                btConfig?.invoke(bt)
+//            }
+    }
+    function(config)
+}
+
+fun <T : Plugin<*>> Task.apply(type: KClass<T>): T =
+    project.apply(type)
+
+fun Task.kotlinCompileOptions(scoped: KotlinCompile.() -> Unit) =
+    project.kotlinCompileOptions(scoped)
+
+fun Task.detektTask(scoped: Detekt.() -> Unit) =
+    project.detektTask(scoped)
+
+fun Task.dokkaTask(scoped: DokkaTask.() -> Unit) =
+    project.dokkaTask(scoped)
+
 fun Task.println(message: String) = this.log.lifecycle(message)
 
 fun Task.println(exception: Throwable) = this.log.lifecycle(exception.message)

+ 47 - 0
buildSrc/src/main/kotlin/org/mjdev/gradle/tasks/ApplicationConfigTask.kt

@@ -0,0 +1,47 @@
+/*
+ *  Copyright (c) Milan Jurkulák 2024.
+ *  Contact:
+ *  e: mimoccc@gmail.com
+ *  e: mj@mjdev.org
+ *  w: https://mjdev.org
+ */
+
+package org.mjdev.gradle.tasks
+
+import org.mjdev.gradle.base.BaseTask
+import org.mjdev.gradle.extensions.runConfigured
+import org.mjdev.gradle.plugin.config.AppConfig
+
+open class ApplicationConfigTask : BaseTask() {
+
+    init {
+        group = "mjdev"
+        description = "This task configure android application project."
+        outputs.upToDateWhen { false }
+    }
+
+    override fun doTask() = runConfigured<AppConfig> {
+//        println("---------------------------------------------------------------------")
+//        println("App Configuration")
+//        println("---------------------------------------------------------------------")
+//        println(project.versionName)
+//        println("---------------------------------------------------------------------")
+//        println(autoCorrectCode)
+//        println(ignoreCodeFailures)
+//        println(createDocumentation)
+//        println(reportUndocumentedFiles)
+//        println(failOnDocumentationWarning)
+//        println(createReleaseNotes)
+//        println(createZipRelease)
+//        println(createInfoClass)
+//        println(createWebApp)
+//        println(createWebSiteFromGit)
+//        println(renameApkOutputByAppID)
+//        println(launcherIconByBuildType)
+//        println("---------------------------------------------------------------------")
+//        println(codeReportsDir)
+//        println(documentationDir)
+//        println(detectConfigFile)
+//        println("---------------------------------------------------------------------")
+    }
+}

+ 1 - 3
buildSrc/src/main/kotlin/org/mjdev/gradle/tasks/ReleaseNotesCleanTask.kt

@@ -8,7 +8,6 @@
 
 package org.mjdev.gradle.tasks
 
-import org.gradle.api.tasks.TaskAction
 import org.mjdev.gradle.extensions.file
 import org.mjdev.gradle.extensions.projectVersion
 import java.io.File
@@ -33,8 +32,7 @@ open class ReleaseNotesCleanTask : BaseTask() {
         outputs.upToDateWhen { false }
     }
 
-    @TaskAction
-    fun taskAction() {
+    override fun doTask() {
         outputFiles.forEach { file ->
             if (file.isDirectory) {
                 file.deleteRecursively()

+ 4 - 7
buildSrc/src/main/kotlin/org/mjdev/gradle/tasks/ReleaseNotesCreateTask.kt

@@ -8,7 +8,6 @@
 
 package org.mjdev.gradle.tasks
 
-import org.gradle.api.tasks.TaskAction
 import org.gradle.internal.impldep.org.eclipse.jgit.api.Git
 import org.gradle.internal.impldep.org.eclipse.jgit.internal.storage.file.FileRepository
 import org.mjdev.gradle.extensions.toDateString
@@ -18,7 +17,6 @@ import java.util.Locale
 import org.mjdev.gradle.extensions.file
 import org.mjdev.gradle.extensions.writeText
 import org.mjdev.gradle.extensions.projectVersion
-import org.mjdev.gradle.extensions.projectName
 import org.mjdev.gradle.base.BaseTask
 
 open class ReleaseNotesCreateTask : BaseTask() {
@@ -44,11 +42,10 @@ open class ReleaseNotesCreateTask : BaseTask() {
         outputs.upToDateWhen { false }
     }
 
-    @Suppress("DEPRECATION")
-    @TaskAction
-    fun taskAction() {
+    override fun doTask() {
         println("Creating release notes")
         StringBuilder().apply {
+            @Suppress("DEPRECATION")
             append("** Release notes $projectVersion - ${Date().toLocaleString()}\n")
             branches.forEach { ref ->
                 if (ref.name.endsWith(branchName)) {
@@ -59,11 +56,11 @@ open class ReleaseNotesCreateTask : BaseTask() {
                     commits.forEach { commit ->
                         val author = commit.authorIdent
                             .name
-                            .toLowerCase(Locale.getDefault())
+                            .lowercase(Locale.getDefault())
                         val date = commit.authorIdent.`when`.toDateString()
                         val message = commit.fullMessage
                             .replace("\n", " ")
-                            .toLowerCase(Locale.getDefault())
+                            .lowercase(Locale.getDefault())
                         if (lastDate == null || !lastDate.contentEquals(date)) {
                             lastDate = date
                             append("\n")

+ 0 - 2
buildSrc/src/main/kotlin/org/mjdev/gradle/tasks/TestCaseGeneratorTask.kt

@@ -8,7 +8,6 @@
 
 package org.mjdev.gradle.tasks
 
-import org.gradle.api.tasks.TaskAction
 import org.mjdev.gradle.base.BaseTask
 import org.mjdev.gradle.custom.unittest.Worker
 import org.mjdev.gradle.custom.unittest.WorkerImpl
@@ -36,7 +35,6 @@ abstract class TestCaseGeneratorTask : BaseTask() {
         description = "Test classes generation tool"
     }
 
-    @TaskAction
     fun injectSource() {
         worker = WorkerImpl(urls, sourceDirectoryList, exclude).apply {
             work()

+ 2 - 7
buildSrc/src/main/kotlin/org/mjdev/gradle/tasks/TestClassesGeneratorTask.kt

@@ -9,9 +9,7 @@
 package org.mjdev.gradle.tasks
 
 import com.squareup.kotlinpoet.FileSpec
-import com.squareup.kotlinpoet.TypeSpec
 import org.gradle.api.Project
-import org.gradle.api.tasks.TaskAction
 import org.mjdev.gradle.base.BaseTask
 import org.mjdev.gradle.extensions.file
 import org.mjdev.gradle.extensions.allFiles
@@ -46,8 +44,7 @@ open class TestClassesGeneratorTask : BaseTask() {
         outputs.upToDateWhen { false }
     }
 
-    @TaskAction
-    fun taskAction() {
+    override fun doTask() {
         println("> Got files:")
         fileMap.keys.forEach { project ->
             val files = fileMap[project] ?: emptyList()
@@ -74,9 +71,7 @@ open class TestClassesGeneratorTask : BaseTask() {
         destfile: File
     ) {
         worker.makeTestClass(srcFile).also { createdClass ->
-            if (createdClass != null) {
-                createdClass.writeTo(destfile)
-            }
+            createdClass?.writeTo(destfile)
         }
     }
 

+ 1 - 2
buildSrc/src/main/kotlin/org/mjdev/gradle/tasks/WebServiceCreateTask.kt

@@ -147,8 +147,7 @@ open class WebServiceCreateTask : BaseTask() {
         outputs.upToDateWhen { false }
     }
 
-    @TaskAction
-    fun taskAction() {
+    override fun doTask() {
         webDir.file(systemdFile).writeText(systemdFileContent)
         webDir.file(nginxFileName).writeText(nginxFileContent)
         webDir.file(packageFileName).writeText(packageJsonFile)

+ 1 - 3
buildSrc/src/main/kotlin/org/mjdev/gradle/tasks/ZipReleaseClearTask.kt

@@ -8,7 +8,6 @@
 
 package org.mjdev.gradle.tasks
 
-import org.gradle.api.tasks.TaskAction
 import org.mjdev.gradle.base.BaseTask
 
 open class ZipReleaseClearTask : BaseTask() {
@@ -23,8 +22,7 @@ open class ZipReleaseClearTask : BaseTask() {
         outputs.upToDateWhen { false }
     }
 
-    @TaskAction
-    fun taskAction() {
+    override fun doTask() {
         outputFiles.forEach { file ->
             if (file.isDirectory) {
                 file.deleteRecursively()