mirror of
https://github.com/tadfisher/gradle2nix.git
synced 2026-01-11 15:30:38 -05:00
Add gradle compatibility tests; fix compatibility with 5.0
This commit is contained in:
@@ -1,10 +1,11 @@
|
||||
plugins {
|
||||
base
|
||||
idea
|
||||
}
|
||||
|
||||
tasks {
|
||||
wrapper {
|
||||
gradleVersion = "5.3"
|
||||
gradleVersion = "5.3.1"
|
||||
distributionType = Wrapper.DistributionType.ALL
|
||||
}
|
||||
}
|
||||
|
||||
BIN
gradle/wrapper/gradle-wrapper.jar
vendored
BIN
gradle/wrapper/gradle-wrapper.jar
vendored
Binary file not shown.
2
gradle/wrapper/gradle-wrapper.properties
vendored
2
gradle/wrapper/gradle-wrapper.properties
vendored
@@ -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
18
gradlew
vendored
@@ -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
18
gradlew.bat
vendored
@@ -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
|
||||
|
||||
@@ -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())
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
16
plugin/src/gradleTest/simple/build.gradle
Normal file
16
plugin/src/gradleTest/simple/build.gradle
Normal 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'
|
||||
}
|
||||
16
plugin/src/gradleTest/simple/build.gradle.kts
Normal file
16
plugin/src/gradleTest/simple/build.gradle.kts
Normal 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")
|
||||
}
|
||||
69
plugin/src/main/kotlin/org/nixos/gradle2nix/GradleCompat.kt
Normal file
69
plugin/src/main/kotlin/org/nixos/gradle2nix/GradleCompat.kt
Normal 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) }
|
||||
}
|
||||
}
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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" }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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() {
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user