Skip to content

Commit

Permalink
#60 plugins versions (#71)
Browse files Browse the repository at this point in the history
#60 plugins versions
  • Loading branch information
Jean-Michel Fayard committed Sep 11, 2019
2 parents 5c66508 + 9a6c9e8 commit 612be00
Show file tree
Hide file tree
Showing 8 changed files with 67 additions and 1 deletion.
4 changes: 3 additions & 1 deletion plugin/src/main/kotlin/de/fayard/BuildSrcVersionsPlugin.kt
@@ -1,5 +1,6 @@
package de.fayard

import com.github.benmanes.gradle.versions.VersionsPlugin
import com.github.benmanes.gradle.versions.updates.DependencyUpdatesTask
import de.fayard.PluginConfig.isNonStable
import org.gradle.api.Plugin
Expand All @@ -11,10 +12,11 @@ open class BuildSrcVersionsPlugin : Plugin<Project> {
override fun apply(project: Project) = project.configure()

fun Project.configure() {
VersionsPlugin().apply(project)
extensions.create(BuildSrcVersionsExtension::class, PluginConfig.EXTENSION_NAME, BuildSrcVersionsExtensionImpl::class)

if (PluginConfig.supportsTaskAvoidance()) {
val provider = tasks.register("dependencyUpdates", DependencyUpdatesTask::class.java)
val provider = tasks.named("dependencyUpdates", DependencyUpdatesTask::class.java)
PluginConfig.configureGradleVersions = { operation -> provider.configure(operation) }
tasks.register("buildSrcVersions", BuildSrcVersionsTask::class.java)

Expand Down
24 changes: 24 additions & 0 deletions plugin/src/main/kotlin/de/fayard/BuildSrcVersionsTask.kt
Expand Up @@ -3,10 +3,13 @@ package de.fayard
import org.gradle.api.Action
import org.gradle.api.DefaultTask
import org.gradle.api.Project
import org.gradle.api.artifacts.Configuration
import org.gradle.api.internal.artifacts.dependencies.DefaultExternalModuleDependency
import org.gradle.api.tasks.Input
import org.gradle.api.tasks.Optional
import org.gradle.api.tasks.TaskAction
import org.gradle.kotlin.dsl.getByType
import org.gradle.kotlin.dsl.withType

@Suppress("UnstableApiUsage")
open class BuildSrcVersionsTask : DefaultTask() {
Expand All @@ -28,6 +31,8 @@ open class BuildSrcVersionsTask : DefaultTask() {

@TaskAction
fun taskAction() {
generateProjectProperties()

val extension : BuildSrcVersionsExtension = extension ?: project.extensions.getByType()
if (extension.indent == PluginConfig.DEFAULT_INDENT) {
extension.indent = EditorConfig.findIndentForKotlin(project.file("buildSrc/src/main/kotlin")) ?: " "
Expand Down Expand Up @@ -86,6 +91,25 @@ open class BuildSrcVersionsTask : DefaultTask() {
}
}

private fun generateProjectProperties() {
if (PluginConfig.supportSettingPluginVersions().not()) return
val dependencies: List<DefaultExternalModuleDependency> = project.allprojects.flatMap {
val classpath: Configuration = it.buildscript.configurations.named("classpath").get()
classpath.allDependencies.withType()
}
val file = project.file("gradle.properties")
if (!file.exists()) file.createNewFile()

val existingLines = file.readLines().filterNot {
it.startsWith("plugin.") || it in PluginConfig.PLUGIN_NFORMATION_START + PluginConfig.PLUGIN_INFORMATION_END
}
val newLines = dependencies.map { it ->
"plugin.${it.group}=${it.version}"
}
val newFileContent = PluginConfig.PLUGIN_NFORMATION_START + newLines + existingLines + PluginConfig.PLUGIN_INFORMATION_END
file.writeText(newFileContent.joinToString(separator = "\n", postfix = "\n"))
}


fun onSingleActionMode(dependencies: List<Dependency>, extension: BuildSrcVersionsExtension) {
val file = extension.versionsOnlyFile?.let { project.file(it) }
Expand Down
10 changes: 10 additions & 0 deletions plugin/src/main/kotlin/de/fayard/PluginConfig.kt
Expand Up @@ -108,13 +108,23 @@ repositories {
"See $issue54VersionOnlyMode"
)

val PLUGIN_NFORMATION_START = listOf(
"# Plugin versions",
"# See https://github.com/jmfayard/buildSrcVersions/issues/60"
)
val PLUGIN_INFORMATION_END = listOf(
"# You can edit the rest of the file")

const val GRADLE_CURRENT_VERSION = "gradleCurrentVersion"
const val GRADLE_LATEST_VERSION = "gradleLatestVersion"


fun supportsTaskAvoidance(): Boolean =
GradleVersion.current() >= GradleVersion.version("4.9")

fun supportSettingPluginVersions() : Boolean =
GradleVersion.current() >= GradleVersion.version("5.6")

lateinit var configureGradleVersions: (DependencyUpdatesTask.() -> Unit) -> Unit

}
6 changes: 6 additions & 0 deletions sample-groovy/gradle.properties
@@ -0,0 +1,6 @@
# Plugin versions
# See https://github.com/jmfayard/buildSrcVersions/issues/60
plugin.io.vertx.vertx-plugin=0.3.1
plugin.com.gradle.build-scan=2.4.2
# You can edit the rest of the file

6 changes: 6 additions & 0 deletions sample-groovy/settings.gradle
Expand Up @@ -3,6 +3,12 @@ pluginManagement {
mavenLocal()
gradlePluginPortal()
}
resolutionStrategy.eachPlugin {
def key = "plugin.${requested.id.id}"
if (settings.ext.has(key)) {
useVersion(settings.ext.get(key) as String)
}
}
}
rootProject.name = 'sample-groovy'
includeBuild '../plugin'
Expand Down
6 changes: 6 additions & 0 deletions sample-kotlin/gradle.properties
@@ -0,0 +1,6 @@
# Plugin versions
# See https://github.com/jmfayard/buildSrcVersions/issues/60
plugin.org.jetbrains.kotlin.jvm=1.3.11
plugin.com.gradle.build-scan=2.4.1
# You can edit the rest of the file

6 changes: 6 additions & 0 deletions sample-kotlin/settings.gradle.kts
Expand Up @@ -3,6 +3,12 @@ pluginManagement {
mavenLocal()
gradlePluginPortal()
}
resolutionStrategy.eachPlugin {
val key = "plugin.${requested.id.id}"
if (extra.has(key)) {
useVersion(extra.get(key) as String)
}
}
}
rootProject.name = "sample-kotlin"
includeBuild("../plugin")
Expand Down
6 changes: 6 additions & 0 deletions sample-versionsOnlyMode/gradle.properties
@@ -0,0 +1,6 @@
# Plugin versions
# See https://github.com/jmfayard/buildSrcVersions/issues/60
plugin.org.jetbrains.kotlin.jvm=1.3.50
plugin.com.gradle.build-scan=2.4.1
# You can edit the rest of the file

0 comments on commit 612be00

Please sign in to comment.