mirror of
https://github.com/tadfisher/gradle2nix.git
synced 2026-01-12 07:50:53 -05:00
Add gradle compatibility tests; fix compatibility with 5.0
This commit is contained in:
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