From caadae8823411737933dc20d51164974562f2245 Mon Sep 17 00:00:00 2001 From: nathan Date: Sun, 24 May 2020 01:00:21 +0200 Subject: [PATCH] Fixed issues with updating gradle wrapper version. Added kotlin extension functions --- build.gradle.kts | 8 +++-- src/dorkbox/gradle/GradleUpdateTask.kt | 41 ++++++++++++-------------- src/dorkbox/gradle/GradleUtils.kt | 23 ++++++++++++++- 3 files changed, 47 insertions(+), 25 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index de25ca2..05c1f6f 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -26,7 +26,7 @@ plugins { id("com.dorkbox.Licensing") version "1.3" id("com.dorkbox.VersionUpdate") version "1.6.1" - id("com.dorkbox.GradleUtils") version "1.4" + id("com.dorkbox.GradleUtils") version "1.5" kotlin("jvm") version "1.3.72" } @@ -35,7 +35,7 @@ object Extras { // set for the project const val description = "Gradle Plugin to manage various Gradle tasks, such as updating gradle and dependencies" const val group = "com.dorkbox" - const val version = "1.4" + const val version = "1.5" // set as project.ext const val name = "Gradle Utils" @@ -79,6 +79,9 @@ sourceSets { repositories { jcenter() + maven { + url = uri("https://plugins.gradle.org/m2/") + } } dependencies { @@ -90,6 +93,7 @@ dependencies { // setup checking for the latest version of a plugin or dependency implementation("com.github.ben-manes:gradle-versions-plugin:0.28.0") + // for parsing JSON implementation("org.json:json:20180813") } diff --git a/src/dorkbox/gradle/GradleUpdateTask.kt b/src/dorkbox/gradle/GradleUpdateTask.kt index b8ae338..34c5b0d 100644 --- a/src/dorkbox/gradle/GradleUpdateTask.kt +++ b/src/dorkbox/gradle/GradleUpdateTask.kt @@ -16,6 +16,9 @@ package dorkbox.gradle import org.gradle.api.DefaultTask +import org.gradle.api.tasks.Input +import org.gradle.api.tasks.Internal +import org.gradle.api.tasks.Optional import org.gradle.api.tasks.TaskAction import org.gradle.api.tasks.wrapper.Wrapper import org.gradle.util.GradleVersion @@ -24,36 +27,17 @@ import java.net.URL open class GradleUpdateTask : DefaultTask() { - @Volatile var foundGradleVersion : String? = "0.0" - private val wrapper = project.tasks.create("wrapperUpdate", Wrapper::class.java) - private val releaseText: String - init { outputs.upToDateWhen { false } outputs.cacheIf { false } description = "Automatically update GRADLE to the latest version" - - releaseText = URL("https://services.gradle.org/versions/current").readText() - foundGradleVersion = JSONObject(releaseText)["version"] as String? - - if (foundGradleVersion != "0.0") { - wrapper.apply { - group = "gradle" - outputs.upToDateWhen { false } - outputs.cacheIf { false } - - gradleVersion = foundGradleVersion - distributionUrl = distributionUrl.replace("bin", "all") - } - - finalizedBy(wrapper) - } else { - println("\tUnable to detect New Gradle Version.") - } } @TaskAction fun run() { + val releaseText = URL("https://services.gradle.org/versions/current").readText() + val foundGradleVersion = JSONObject(releaseText)["version"] as String? + if (foundGradleVersion.isNullOrEmpty()) { println("\tUnable to detect New Gradle Version. Output json: $releaseText") } @@ -64,6 +48,19 @@ GradleUpdateTask : DefaultTask() { println("\tGradle is already latest version '$foundGradleVersion'") } else { println("\tDetected new Gradle Version: '$foundGradleVersion', updating from $current") + + val wrapper = project.tasks.create("wrapperUpdate", Wrapper::class.java) + wrapper.apply { + group = "other" + outputs.upToDateWhen { false } + outputs.cacheIf { false } + + gradleVersion = foundGradleVersion + distributionUrl = distributionUrl.replace("bin", "all") + distributionType = Wrapper.DistributionType.ALL + } + + wrapper.actions[0].execute(wrapper) } } } diff --git a/src/dorkbox/gradle/GradleUtils.kt b/src/dorkbox/gradle/GradleUtils.kt index e91f179..c5f6ab7 100644 --- a/src/dorkbox/gradle/GradleUtils.kt +++ b/src/dorkbox/gradle/GradleUtils.kt @@ -18,6 +18,10 @@ package dorkbox.gradle import com.github.benmanes.gradle.versions.updates.DependencyUpdatesTask import org.gradle.api.Plugin import org.gradle.api.Project +import org.gradle.api.file.SourceDirectorySet +import org.gradle.api.tasks.SourceSet +import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet +import java.util.* /** @@ -32,7 +36,7 @@ class GradleUtils : Plugin { override fun apply(project: Project) { propertyMappingExtension = project.extensions.create("GradleUtils", StaticMethodsAndTools::class.java, project) - project.tasks.create("autoUpdateGradle", GradleUpdateTask::class.java).apply { + project.tasks.create("updateGradleWrapper", GradleUpdateTask::class.java).apply { group = "gradle" } @@ -60,3 +64,20 @@ class GradleUtils : Plugin { } } } + + +// Fix defaults for gradle, since it's mildly retarded when it comes to kotlin, so we can have sane sourceset/configuration options +// from: https://github.com/gradle/kotlin-dsl-samples/blob/201534f53d93660c273e09f768557220d33810a9/buildSrc/src/main/kotlin/build/KotlinPluginExtensions.kt +val SourceSet.kotlin: SourceDirectorySet + get() = + (this as org.gradle.api.internal.HasConvention) + .convention + .getPlugin(KotlinSourceSet::class.java) + .kotlin + +fun SourceSet.kotlin(action: SourceDirectorySet.() -> Unit) = + kotlin.action() + +val Project.sourceSets: SortedMap + get() = (this.extensions.getByName("sourceSets") as org.gradle.api.tasks.SourceSetContainer).asMap +