Add gradle compatibility tests; fix compatibility with 5.0

This commit is contained in:
Tad Fisher
2019-04-01 11:22:46 -07:00
parent 932f690610
commit 23de1b99d0
16 changed files with 226 additions and 36 deletions

View File

@@ -1,10 +1,11 @@
plugins { plugins {
base base
idea
} }
tasks { tasks {
wrapper { wrapper {
gradleVersion = "5.3" gradleVersion = "5.3.1"
distributionType = Wrapper.DistributionType.ALL distributionType = Wrapper.DistributionType.ALL
} }
} }

Binary file not shown.

View File

@@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-5.3-all.zip distributionUrl=https\://services.gradle.org/distributions/gradle-5.3.1-all.zip
zipStoreBase=GRADLE_USER_HOME zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists zipStorePath=wrapper/dists

18
gradlew vendored
View File

@@ -1,5 +1,21 @@
#!/usr/bin/env sh #!/usr/bin/env sh
#
# Copyright 2015 the original author or authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
############################################################################## ##############################################################################
## ##
## Gradle start up script for UN*X ## Gradle start up script for UN*X
@@ -28,7 +44,7 @@ APP_NAME="Gradle"
APP_BASE_NAME=`basename "$0"` APP_BASE_NAME=`basename "$0"`
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS='"-Xmx64m"' DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
# Use the maximum available, or set MAX_FD != -1 to use that value. # Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD="maximum" MAX_FD="maximum"

18
gradlew.bat vendored
View File

@@ -1,3 +1,19 @@
@rem
@rem Copyright 2015 the original author or authors.
@rem
@rem Licensed under the Apache License, Version 2.0 (the "License");
@rem you may not use this file except in compliance with the License.
@rem You may obtain a copy of the License at
@rem
@rem http://www.apache.org/licenses/LICENSE-2.0
@rem
@rem Unless required by applicable law or agreed to in writing, software
@rem distributed under the License is distributed on an "AS IS" BASIS,
@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@rem See the License for the specific language governing permissions and
@rem limitations under the License.
@rem
@if "%DEBUG%" == "" @echo off @if "%DEBUG%" == "" @echo off
@rem ########################################################################## @rem ##########################################################################
@rem @rem
@@ -14,7 +30,7 @@ set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME% set APP_HOME=%DIRNAME%
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS="-Xmx64m" set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
@rem Find java.exe @rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome if defined JAVA_HOME goto findJavaFromJavaHome

View File

@@ -1,16 +1,17 @@
plugins { plugins {
id("com.github.johnrengelman.shadow") version "4.0.0"
`java-gradle-plugin` `java-gradle-plugin`
`kotlin-dsl` `kotlin-dsl`
`maven-publish` `maven-publish`
kotlin("kapt") version embeddedKotlinVersion kotlin("kapt") version embeddedKotlinVersion
id("com.github.johnrengelman.shadow") version "4.0.0"
id("org.ysb33r.gradletest") version "2.0-rc.4"
} }
group = "org.nixos" group = "org.nixos"
version = "1.0.0-SNAPSHOT" version = "1.0.0-SNAPSHOT"
repositories { repositories {
mavenCentral() jcenter()
} }
dependencies { dependencies {
@@ -31,4 +32,33 @@ gradlePlugin {
implementationClass = "org.nixos.gradle2nix.Gradle2NixPlugin" implementationClass = "org.nixos.gradle2nix.Gradle2NixPlugin"
} }
} }
} }
tasks {
gradleTest {
versions("5.0", "5.1.1", "5.2.1", "5.3.1")
kotlinDsl = true
}
gradleTestGenerator {
dependsOn(shadowJar)
doLast {
file(gradleTest.get().initScript).bufferedWriter().use { out ->
out.appendln("""
initscript {
dependencies {
classpath fileTree('file:${buildDir.absolutePath}/libs'.toURI()) {
include '*.jar'
}
""".trimIndent())
out.appendln("""
}
}
apply plugin: org.nixos.gradle2nix.Gradle2NixPlugin
""".trimIndent())
}
}
}
}

View File

@@ -0,0 +1,16 @@
plugins {
id 'java'
}
repositories {
jcenter()
}
dependencies {
implementation("com.squareup.okio:okio:2.2.2")
implementation("com.squareup.moshi:moshi:1.8.0")
}
task runGradleTest {
dependsOn 'nixGradleEnv'
}

View File

@@ -0,0 +1,16 @@
plugins {
java
}
repositories {
jcenter()
}
dependencies {
implementation("com.squareup.okio:okio:2.2.2")
implementation("com.squareup.moshi:moshi:1.8.0")
}
tasks.register("runGradleTest") {
dependsOn("nixGradleEnv")
}

View File

@@ -0,0 +1,69 @@
package org.nixos.gradle2nix
import org.gradle.api.file.Directory
import org.gradle.api.file.DirectoryProperty
import org.gradle.api.file.RegularFile
import org.gradle.api.file.RegularFileProperty
import org.gradle.api.provider.Property
import org.gradle.api.provider.Provider
import org.gradle.util.GradleVersion
private fun versionAtLeast(version: String): Boolean =
GradleVersion.current() >= GradleVersion.version(version)
internal fun <T> Property<T>.conventionCompat(value: T): Property<T> {
return if (versionAtLeast("5.1")) {
convention(value)
} else {
apply { set(value) }
}
}
internal fun <T> Property<T>.conventionCompat(valueProvider: Provider<out T>): Property<T> {
return if (versionAtLeast("5.1")) {
convention(valueProvider)
} else {
apply { set(valueProvider) }
}
}
internal fun DirectoryProperty.conventionCompat(
value: Directory
): DirectoryProperty {
return if (versionAtLeast("5.1")) {
convention(value)
} else {
apply { set(value) }
}
}
internal fun DirectoryProperty.conventionCompat(
valueProvider: Provider<out Directory>
): DirectoryProperty {
return if (versionAtLeast("5.1")) {
convention(valueProvider)
} else {
apply { set(valueProvider) }
}
}
internal fun RegularFileProperty.conventionCompat(
value: RegularFile
): RegularFileProperty {
return if (versionAtLeast("5.1")) {
convention(value)
} else {
apply { set(value) }
}
}
internal fun RegularFileProperty.conventionCompat(
valueProvider: Provider<out RegularFile>
): RegularFileProperty {
return if (versionAtLeast("5.1")) {
convention(valueProvider)
} else {
apply { set(valueProvider) }
}
}

View File

@@ -2,13 +2,19 @@ package org.nixos.gradle2nix
import okio.buffer import okio.buffer
import okio.source import okio.source
import org.gradle.api.file.ProjectLayout
import org.gradle.api.model.ObjectFactory
import org.gradle.api.tasks.InputFile import org.gradle.api.tasks.InputFile
import java.lang.IllegalStateException import java.lang.IllegalStateException
import java.net.URI import java.net.URI
import javax.inject.Inject
open class NixBuildscriptEnv : NixEnv() { open class NixBuildscriptEnv @Inject constructor(
layout: ProjectLayout,
objects: ObjectFactory
): NixEnv(layout, objects) {
@InputFile @InputFile
val pluginEnvFile = project.objects.fileProperty() val pluginEnvFile = objects.fileProperty()
private val pluginEnv: BuildEnv by lazy { private val pluginEnv: BuildEnv by lazy {
pluginEnvFile.get().asFile.source().buffer().use { src -> pluginEnvFile.get().asFile.source().buffer().use { src ->
@@ -40,4 +46,4 @@ open class NixBuildscriptEnv : NixEnv() {
} }
override fun filename(): String = "buildscript.json" override fun filename(): String = "buildscript.json"
} }

View File

@@ -1,31 +1,32 @@
package org.nixos.gradle2nix package org.nixos.gradle2nix
import com.squareup.moshi.JsonClass import com.squareup.moshi.JsonClass
import com.squareup.moshi.Moshi
import okio.buffer import okio.buffer
import okio.sink import okio.sink
import org.gradle.api.DefaultTask import org.gradle.api.DefaultTask
import org.gradle.api.artifacts.repositories.ArtifactRepository import org.gradle.api.artifacts.repositories.ArtifactRepository
import org.gradle.api.artifacts.repositories.MavenArtifactRepository import org.gradle.api.artifacts.repositories.MavenArtifactRepository
import org.gradle.api.file.ProjectLayout
import org.gradle.api.model.ObjectFactory
import org.gradle.api.tasks.Internal import org.gradle.api.tasks.Internal
import org.gradle.api.tasks.OutputDirectory
import org.gradle.api.tasks.OutputFile import org.gradle.api.tasks.OutputFile
import org.gradle.api.tasks.TaskAction import org.gradle.api.tasks.TaskAction
import java.net.URI import java.net.URI
import javax.inject.Inject
abstract class NixEnv : DefaultTask() { abstract class NixEnv(layout: ProjectLayout, objects: ObjectFactory): DefaultTask() {
abstract fun environment(): String abstract fun environment(): String
abstract fun repositories(): List<String> abstract fun repositories(): List<String>
abstract fun artifacts(): List<Artifact> abstract fun artifacts(): List<Artifact>
abstract fun filename(): String abstract fun filename(): String
@Internal @Internal
val outputDir = project.objects.directoryProperty() val outputDir = objects.directoryProperty()
.convention(project.layout.buildDirectory.dir("nix")) .conventionCompat(layout.buildDirectory.dir("nix"))
@OutputFile @OutputFile
val outputFile = project.objects.fileProperty() val outputFile = objects.fileProperty()
.convention(outputDir.map { it.file(filename()) }) .conventionCompat(outputDir.map { it.file(filename()) })
@TaskAction @TaskAction
open fun run() { open fun run() {
@@ -70,4 +71,4 @@ internal fun ArtifactRepository.repositoryUrls(): Set<URI> {
is MavenArtifactRepository -> setOf(url) + artifactUrls is MavenArtifactRepository -> setOf(url) + artifactUrls
else -> emptySet() else -> emptySet()
}.filterNotTo(mutableSetOf()) { it.scheme == "file" } }.filterNotTo(mutableSetOf()) { it.scheme == "file" }
} }

View File

@@ -4,23 +4,27 @@ import com.squareup.moshi.JsonClass
import okio.buffer import okio.buffer
import okio.sink import okio.sink
import org.gradle.api.DefaultTask import org.gradle.api.DefaultTask
import org.gradle.api.model.ObjectFactory
import org.gradle.api.tasks.Input import org.gradle.api.tasks.Input
import org.gradle.api.tasks.OutputDirectory import org.gradle.api.tasks.OutputDirectory
import org.gradle.api.tasks.OutputFile import org.gradle.api.tasks.OutputFile
import org.gradle.api.tasks.TaskAction import org.gradle.api.tasks.TaskAction
import org.gradle.kotlin.dsl.property import org.gradle.kotlin.dsl.property
import java.io.Serializable import java.io.Serializable
import javax.inject.Inject
open class NixGradleDist : DefaultTask() { open class NixGradleDist @Inject constructor(
objects: ObjectFactory
) : DefaultTask() {
@Input @Input
internal val gradleDist = project.objects.property<GradleDist>() internal val gradleDist = objects.property<GradleDist>()
@OutputDirectory @OutputDirectory
val outputDir = project.objects.directoryProperty() val outputDir = objects.directoryProperty()
@OutputFile @OutputFile
val outputFile = project.objects.fileProperty() val outputFile = objects.fileProperty()
.convention(outputDir.file("gradle-dist.json")) .conventionCompat(outputDir.file("gradle-dist.json"))
@TaskAction @TaskAction
fun run() { fun run() {
@@ -41,4 +45,4 @@ internal data class GradleDist(
val url: String, val url: String,
val sha256: String, val sha256: String,
val nativeVersion: String val nativeVersion: String
) : Serializable ) : Serializable

View File

@@ -6,6 +6,7 @@ import okio.sink
import okio.source import okio.source
import org.gradle.api.DefaultTask import org.gradle.api.DefaultTask
import org.gradle.api.file.RegularFile import org.gradle.api.file.RegularFile
import org.gradle.api.model.ObjectFactory
import org.gradle.api.tasks.Input import org.gradle.api.tasks.Input
import org.gradle.api.tasks.InputFiles import org.gradle.api.tasks.InputFiles
import org.gradle.api.tasks.Internal import org.gradle.api.tasks.Internal
@@ -13,18 +14,21 @@ import org.gradle.api.tasks.OutputDirectory
import org.gradle.api.tasks.OutputFile import org.gradle.api.tasks.OutputFile
import org.gradle.api.tasks.TaskAction import org.gradle.api.tasks.TaskAction
import org.gradle.kotlin.dsl.listProperty import org.gradle.kotlin.dsl.listProperty
import javax.inject.Inject
open class NixGradleEnv : DefaultTask() { open class NixGradleEnv @Inject constructor(
objects: ObjectFactory
) : DefaultTask() {
@InputFiles @InputFiles
val inputEnvs = project.objects.fileCollection() val inputEnvs = project.files()
@Internal @Internal
val outputDir = project.objects.directoryProperty() val outputDir = objects.directoryProperty()
@OutputFile @OutputFile
val outputFile = project.objects.fileProperty() val outputFile = objects.fileProperty()
.convention(outputDir.file("gradle-env.json")) .conventionCompat(outputDir.file("gradle-env.json"))
@TaskAction @TaskAction
fun run() { fun run() {

View File

@@ -1,8 +1,10 @@
package org.nixos.gradle2nix package org.nixos.gradle2nix
import org.gradle.api.artifacts.ExternalModuleDependency import org.gradle.api.artifacts.ExternalModuleDependency
import org.gradle.api.file.ProjectLayout
import org.gradle.api.internal.artifacts.ivyservice.ivyresolve.strategy.VersionSelectorScheme import org.gradle.api.internal.artifacts.ivyservice.ivyresolve.strategy.VersionSelectorScheme
import org.gradle.api.internal.plugins.PluginImplementation import org.gradle.api.internal.plugins.PluginImplementation
import org.gradle.api.model.ObjectFactory
import org.gradle.plugin.management.PluginRequest import org.gradle.plugin.management.PluginRequest
import org.gradle.plugin.management.internal.PluginRequestInternal import org.gradle.plugin.management.internal.PluginRequestInternal
import org.gradle.plugin.use.PluginId import org.gradle.plugin.use.PluginId
@@ -15,10 +17,12 @@ import java.net.URI
import javax.inject.Inject import javax.inject.Inject
open class NixPluginEnv @Inject constructor( open class NixPluginEnv @Inject constructor(
layout: ProjectLayout,
objects: ObjectFactory,
private val pluginDependencyResolutionServices: PluginDependencyResolutionServices, private val pluginDependencyResolutionServices: PluginDependencyResolutionServices,
versionSelectorScheme: VersionSelectorScheme, versionSelectorScheme: VersionSelectorScheme,
private val pluginRequests: Collection<PluginRequest> private val pluginRequests: Collection<PluginRequest>
) : NixEnv() { ) : NixEnv(layout, objects) {
private val repositories by lazy { private val repositories by lazy {
pluginDependencyResolutionServices.resolveRepositoryHandler pluginDependencyResolutionServices.resolveRepositoryHandler
} }
@@ -107,4 +111,4 @@ private class PluginContext : PluginResolveContext {
dependencies.add(dependencyNotation) dependencies.add(dependencyNotation)
} }
} }
} }

View File

@@ -1,13 +1,20 @@
package org.nixos.gradle2nix package org.nixos.gradle2nix
import org.gradle.api.file.ProjectLayout
import org.gradle.api.model.ObjectFactory
import org.gradle.api.tasks.Input import org.gradle.api.tasks.Input
import org.gradle.api.tasks.Optional import org.gradle.api.tasks.Optional
import org.gradle.kotlin.dsl.setProperty import org.gradle.kotlin.dsl.setProperty
import java.net.URI import java.net.URI
import javax.inject.Inject
open class NixProjectEnv : NixEnv() { open class NixProjectEnv @Inject constructor(
layout: ProjectLayout,
objects: ObjectFactory
) : NixEnv(layout, objects) {
@Input @Optional @Input @Optional
val configurations = project.objects.setProperty<String>() val configurations = objects.setProperty<String>().empty()
private val resolveConfigurations by lazy { private val resolveConfigurations by lazy {
val configs = configurations.get() val configs = configurations.get()
@@ -38,4 +45,4 @@ open class NixProjectEnv : NixEnv() {
} }
override fun filename(): String = "project.json" override fun filename(): String = "project.json"
} }

View File

@@ -156,11 +156,11 @@ private class MavenPomResolver(
override fun addRepository(repository: Repository, replace: Boolean) {} override fun addRepository(repository: Repository, replace: Boolean) {}
} }
fun sha256(file: File): String { private fun sha256(file: File): String {
val hashSource = HashingSource.sha256(file.source()) val hashSource = HashingSource.sha256(file.source())
val hash: ByteString = hashSource.buffer().use { source -> val hash: ByteString = hashSource.buffer().use { source ->
source.readAll(blackholeSink()) source.readAll(blackholeSink())
hashSource.hash hashSource.hash
} }
return hash.base64() return hash.base64()
} }