diff --git a/build.gradle.kts b/build.gradle.kts index c0532f4..e841361 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,10 +1,11 @@ plugins { base + idea } tasks { wrapper { - gradleVersion = "5.3" + gradleVersion = "5.3.1" distributionType = Wrapper.DistributionType.ALL } } diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 457aad0..5c2d1cf 100644 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index b8a51fe..51fb1c4 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -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 diff --git a/gradlew b/gradlew index af6708f..b0d6d0a 100755 --- a/gradlew +++ b/gradlew @@ -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" diff --git a/gradlew.bat b/gradlew.bat index 0f8d593..15e1ee3 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -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 diff --git a/plugin/build.gradle.kts b/plugin/build.gradle.kts index ee802b2..24a63e1 100644 --- a/plugin/build.gradle.kts +++ b/plugin/build.gradle.kts @@ -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" } } -} \ No newline at end of file +} + +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()) + } + } + } +} diff --git a/plugin/src/gradleTest/simple/build.gradle b/plugin/src/gradleTest/simple/build.gradle new file mode 100644 index 0000000..b5a8b48 --- /dev/null +++ b/plugin/src/gradleTest/simple/build.gradle @@ -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' +} diff --git a/plugin/src/gradleTest/simple/build.gradle.kts b/plugin/src/gradleTest/simple/build.gradle.kts new file mode 100644 index 0000000..9fcb227 --- /dev/null +++ b/plugin/src/gradleTest/simple/build.gradle.kts @@ -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") +} diff --git a/plugin/src/main/kotlin/org/nixos/gradle2nix/GradleCompat.kt b/plugin/src/main/kotlin/org/nixos/gradle2nix/GradleCompat.kt new file mode 100644 index 0000000..b95107d --- /dev/null +++ b/plugin/src/main/kotlin/org/nixos/gradle2nix/GradleCompat.kt @@ -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 Property.conventionCompat(value: T): Property { + return if (versionAtLeast("5.1")) { + convention(value) + } else { + apply { set(value) } + } +} + +internal fun Property.conventionCompat(valueProvider: Provider): Property { + 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 +): 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 +): RegularFileProperty { + return if (versionAtLeast("5.1")) { + convention(valueProvider) + } else { + apply { set(valueProvider) } + } +} diff --git a/plugin/src/main/kotlin/org/nixos/gradle2nix/NixBuildscriptEnv.kt b/plugin/src/main/kotlin/org/nixos/gradle2nix/NixBuildscriptEnv.kt index 09095c2..467cf46 100644 --- a/plugin/src/main/kotlin/org/nixos/gradle2nix/NixBuildscriptEnv.kt +++ b/plugin/src/main/kotlin/org/nixos/gradle2nix/NixBuildscriptEnv.kt @@ -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" -} \ No newline at end of file +} diff --git a/plugin/src/main/kotlin/org/nixos/gradle2nix/NixEnv.kt b/plugin/src/main/kotlin/org/nixos/gradle2nix/NixEnv.kt index e6803e4..b28910c 100644 --- a/plugin/src/main/kotlin/org/nixos/gradle2nix/NixEnv.kt +++ b/plugin/src/main/kotlin/org/nixos/gradle2nix/NixEnv.kt @@ -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 abstract fun artifacts(): List 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 { is MavenArtifactRepository -> setOf(url) + artifactUrls else -> emptySet() }.filterNotTo(mutableSetOf()) { it.scheme == "file" } -} \ No newline at end of file +} diff --git a/plugin/src/main/kotlin/org/nixos/gradle2nix/NixGradleDist.kt b/plugin/src/main/kotlin/org/nixos/gradle2nix/NixGradleDist.kt index eb338b7..84bf2ce 100644 --- a/plugin/src/main/kotlin/org/nixos/gradle2nix/NixGradleDist.kt +++ b/plugin/src/main/kotlin/org/nixos/gradle2nix/NixGradleDist.kt @@ -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() + internal val gradleDist = objects.property() @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 \ No newline at end of file +) : Serializable diff --git a/plugin/src/main/kotlin/org/nixos/gradle2nix/NixGradleEnv.kt b/plugin/src/main/kotlin/org/nixos/gradle2nix/NixGradleEnv.kt index 99a7b58..da77487 100644 --- a/plugin/src/main/kotlin/org/nixos/gradle2nix/NixGradleEnv.kt +++ b/plugin/src/main/kotlin/org/nixos/gradle2nix/NixGradleEnv.kt @@ -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() { diff --git a/plugin/src/main/kotlin/org/nixos/gradle2nix/NixPluginEnv.kt b/plugin/src/main/kotlin/org/nixos/gradle2nix/NixPluginEnv.kt index 0d118af..215febc 100644 --- a/plugin/src/main/kotlin/org/nixos/gradle2nix/NixPluginEnv.kt +++ b/plugin/src/main/kotlin/org/nixos/gradle2nix/NixPluginEnv.kt @@ -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 -) : NixEnv() { +) : NixEnv(layout, objects) { private val repositories by lazy { pluginDependencyResolutionServices.resolveRepositoryHandler } @@ -107,4 +111,4 @@ private class PluginContext : PluginResolveContext { dependencies.add(dependencyNotation) } } -} \ No newline at end of file +} diff --git a/plugin/src/main/kotlin/org/nixos/gradle2nix/NixProjectEnv.kt b/plugin/src/main/kotlin/org/nixos/gradle2nix/NixProjectEnv.kt index 0a1cb9f..a40a418 100644 --- a/plugin/src/main/kotlin/org/nixos/gradle2nix/NixProjectEnv.kt +++ b/plugin/src/main/kotlin/org/nixos/gradle2nix/NixProjectEnv.kt @@ -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() + val configurations = objects.setProperty().empty() + private val resolveConfigurations by lazy { val configs = configurations.get() @@ -38,4 +45,4 @@ open class NixProjectEnv : NixEnv() { } override fun filename(): String = "project.json" -} \ No newline at end of file +} diff --git a/plugin/src/main/kotlin/org/nixos/gradle2nix/Resolver.kt b/plugin/src/main/kotlin/org/nixos/gradle2nix/Resolver.kt index 45af037..23af5a5 100644 --- a/plugin/src/main/kotlin/org/nixos/gradle2nix/Resolver.kt +++ b/plugin/src/main/kotlin/org/nixos/gradle2nix/Resolver.kt @@ -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() -} \ No newline at end of file +}