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 {
base
idea
}
tasks {
wrapper {
gradleVersion = "5.3"
gradleVersion = "5.3.1"
distributionType = Wrapper.DistributionType.ALL
}
}

Binary file not shown.

View File

@@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME
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
zipStorePath=wrapper/dists

18
gradlew vendored
View File

@@ -1,5 +1,21 @@
#!/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
@@ -28,7 +44,7 @@ APP_NAME="Gradle"
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.
DEFAULT_JVM_OPTS='"-Xmx64m"'
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
# Use the maximum available, or set MAX_FD != -1 to use that value.
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
@rem ##########################################################################
@rem
@@ -14,7 +30,7 @@ set APP_BASE_NAME=%~n0
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.
set DEFAULT_JVM_OPTS="-Xmx64m"
set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
@rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome

View File

@@ -1,16 +1,17 @@
plugins {
id("com.github.johnrengelman.shadow") version "4.0.0"
`java-gradle-plugin`
`kotlin-dsl`
`maven-publish`
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"
version = "1.0.0-SNAPSHOT"
repositories {
mavenCentral()
jcenter()
}
dependencies {
@@ -31,4 +32,33 @@ gradlePlugin {
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.source
import org.gradle.api.file.ProjectLayout
import org.gradle.api.model.ObjectFactory
import org.gradle.api.tasks.InputFile
import java.lang.IllegalStateException
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
val pluginEnvFile = project.objects.fileProperty()
val pluginEnvFile = objects.fileProperty()
private val pluginEnv: BuildEnv by lazy {
pluginEnvFile.get().asFile.source().buffer().use { src ->
@@ -40,4 +46,4 @@ open class NixBuildscriptEnv : NixEnv() {
}
override fun filename(): String = "buildscript.json"
}
}

View File

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

View File

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

View File

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

View File

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

View File

@@ -1,13 +1,20 @@
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.Optional
import org.gradle.kotlin.dsl.setProperty
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
val configurations = project.objects.setProperty<String>()
val configurations = objects.setProperty<String>().empty()
private val resolveConfigurations by lazy {
val configs = configurations.get()
@@ -38,4 +45,4 @@ open class NixProjectEnv : NixEnv() {
}
override fun filename(): String = "project.json"
}
}

View File

@@ -156,11 +156,11 @@ private class MavenPomResolver(
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 hash: ByteString = hashSource.buffer().use { source ->
source.readAll(blackholeSink())
hashSource.hash
}
return hash.base64()
}
}