mirror of
https://github.com/tadfisher/gradle2nix.git
synced 2026-01-11 23:40:37 -05:00
Move Gradle build logic to a setup hook
This commit is contained in:
@@ -1,7 +1,8 @@
|
||||
package org.nixos.gradle2nix
|
||||
|
||||
abstract class Gradle2NixPlugin : AbstractGradle2NixPlugin(
|
||||
GradleCacheAccessFactoryBase,
|
||||
DependencyExtractorApplierBase,
|
||||
ResolveAllArtifactsApplierBase,
|
||||
)
|
||||
abstract class Gradle2NixPlugin :
|
||||
AbstractGradle2NixPlugin(
|
||||
GradleCacheAccessFactoryBase,
|
||||
DependencyExtractorApplierBase,
|
||||
ResolveAllArtifactsApplierBase,
|
||||
)
|
||||
|
||||
@@ -4,12 +4,12 @@ import org.gradle.api.internal.artifacts.ivyservice.ArtifactCachesProvider
|
||||
import org.gradle.api.invocation.Gradle
|
||||
|
||||
object GradleCacheAccessFactoryBase : GradleCacheAccessFactory {
|
||||
override fun create(gradle: Gradle): GradleCacheAccess {
|
||||
return GradleCacheAccessBase(gradle)
|
||||
}
|
||||
override fun create(gradle: Gradle): GradleCacheAccess = GradleCacheAccessBase(gradle)
|
||||
}
|
||||
|
||||
class GradleCacheAccessBase(gradle: Gradle) : GradleCacheAccess {
|
||||
class GradleCacheAccessBase(
|
||||
gradle: Gradle,
|
||||
) : GradleCacheAccess {
|
||||
private val artifactCachesProvider = gradle.service<ArtifactCachesProvider>()
|
||||
|
||||
override fun useCache(block: () -> Unit) {
|
||||
|
||||
@@ -116,22 +116,27 @@ private fun cachedComponentId(file: File): DependencyCoordinates? {
|
||||
val parts = file.invariantSeparatorsPath.split('/')
|
||||
if (parts.size < 6) return null
|
||||
if (parts[parts.size - 6] != "files-2.1") return null
|
||||
return parts.dropLast(2).takeLast(3).joinToString(":").let(DefaultDependencyCoordinates::parse)
|
||||
return parts
|
||||
.dropLast(2)
|
||||
.takeLast(3)
|
||||
.joinToString(":")
|
||||
.let(DefaultDependencyCoordinates::parse)
|
||||
}
|
||||
|
||||
@OptIn(ExperimentalSerializationApi::class)
|
||||
private fun parseFileMappings(file: File): Map<String, String>? =
|
||||
try {
|
||||
Json.decodeFromStream<JsonObject>(file.inputStream())
|
||||
.jsonObject["variants"]?.jsonArray
|
||||
Json
|
||||
.decodeFromStream<JsonObject>(file.inputStream())
|
||||
.jsonObject["variants"]
|
||||
?.jsonArray
|
||||
?.flatMap { it.jsonObject["files"]?.jsonArray ?: emptyList() }
|
||||
?.map { it.jsonObject }
|
||||
?.mapNotNull {
|
||||
val name = it["name"]?.jsonPrimitive?.content ?: return@mapNotNull null
|
||||
val url = it["url"]?.jsonPrimitive?.content ?: return@mapNotNull null
|
||||
if (name != url) name to url else null
|
||||
}
|
||||
?.toMap()
|
||||
}?.toMap()
|
||||
?.takeUnless { it.isEmpty() }
|
||||
} catch (e: Throwable) {
|
||||
null
|
||||
|
||||
@@ -17,11 +17,10 @@ class DependencySetModelBuilder(
|
||||
override fun buildAll(
|
||||
modelName: String,
|
||||
project: Project,
|
||||
): DependencySet {
|
||||
return dependencyExtractor.buildDependencySet(
|
||||
): DependencySet =
|
||||
dependencyExtractor.buildDependencySet(
|
||||
cacheAccess,
|
||||
checksumService,
|
||||
fileStoreAndIndexProvider,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -38,14 +38,15 @@ abstract class AbstractResolveAllArtifactsApplier : ResolveAllArtifactsApplier {
|
||||
|
||||
abstract class ResolveProjectDependenciesTask : DefaultTask() {
|
||||
@Internal
|
||||
protected fun getReportableConfigurations(): List<Configuration> {
|
||||
return project.configurations.filter { (it as? DeprecatableConfiguration)?.canSafelyBeResolved() ?: true }
|
||||
}
|
||||
protected fun getReportableConfigurations(): List<Configuration> =
|
||||
project.configurations.filter {
|
||||
(it as? DeprecatableConfiguration)?.canSafelyBeResolved() ?: true
|
||||
}
|
||||
|
||||
protected fun Configuration.artifactFiles(): FileCollection {
|
||||
return incoming.artifactView { viewConfiguration ->
|
||||
viewConfiguration.isLenient = true
|
||||
viewConfiguration.componentFilter { it is ModuleComponentIdentifier }
|
||||
}.files
|
||||
}
|
||||
protected fun Configuration.artifactFiles(): FileCollection =
|
||||
incoming
|
||||
.artifactView { viewConfiguration ->
|
||||
viewConfiguration.isLenient = true
|
||||
viewConfiguration.componentFilter { it is ModuleComponentIdentifier }
|
||||
}.files
|
||||
}
|
||||
|
||||
@@ -18,12 +18,14 @@ object DependencyExtractorApplierG8 : DependencyExtractorApplier {
|
||||
extractor: DependencyExtractor,
|
||||
) {
|
||||
val serviceProvider =
|
||||
gradle.sharedServices.registerIfAbsent(
|
||||
"nixDependencyExtractor",
|
||||
DependencyExtractorService::class.java,
|
||||
) {}.map { service ->
|
||||
service.apply { this.extractor = extractor }
|
||||
}
|
||||
gradle.sharedServices
|
||||
.registerIfAbsent(
|
||||
"nixDependencyExtractor",
|
||||
DependencyExtractorService::class.java,
|
||||
) {}
|
||||
.map { service ->
|
||||
service.apply { this.extractor = extractor }
|
||||
}
|
||||
|
||||
gradle.service<BuildEventListenerRegistryInternal>().onOperationCompletion(serviceProvider)
|
||||
}
|
||||
@@ -31,7 +33,9 @@ object DependencyExtractorApplierG8 : DependencyExtractorApplier {
|
||||
|
||||
@Suppress("UnstableApiUsage")
|
||||
internal abstract class DependencyExtractorService :
|
||||
BuildService<BuildServiceParameters.None>, BuildOperationListener, AutoCloseable {
|
||||
BuildService<BuildServiceParameters.None>,
|
||||
BuildOperationListener,
|
||||
AutoCloseable {
|
||||
var extractor: DependencyExtractor? = null
|
||||
|
||||
override fun started(
|
||||
|
||||
@@ -23,13 +23,12 @@ abstract class ResolveProjectDependenciesTaskG8
|
||||
) : ResolveProjectDependenciesTask() {
|
||||
private val artifactFiles = Cached.of { artifactFiles() }
|
||||
|
||||
private fun artifactFiles(): FileCollection {
|
||||
return objects.fileCollection().from(
|
||||
private fun artifactFiles(): FileCollection =
|
||||
objects.fileCollection().from(
|
||||
getReportableConfigurations().map { configuration ->
|
||||
configuration.artifactFiles()
|
||||
},
|
||||
)
|
||||
}
|
||||
|
||||
@TaskAction
|
||||
fun action() {
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
package org.nixos.gradle2nix
|
||||
|
||||
abstract class Gradle2NixPlugin : AbstractGradle2NixPlugin(
|
||||
GradleCacheAccessFactoryG80,
|
||||
DependencyExtractorApplierG8,
|
||||
ResolveAllArtifactsApplierG8,
|
||||
)
|
||||
abstract class Gradle2NixPlugin :
|
||||
AbstractGradle2NixPlugin(
|
||||
GradleCacheAccessFactoryG80,
|
||||
DependencyExtractorApplierG8,
|
||||
ResolveAllArtifactsApplierG8,
|
||||
)
|
||||
|
||||
@@ -4,12 +4,12 @@ import org.gradle.api.internal.artifacts.ivyservice.ArtifactCachesProvider
|
||||
import org.gradle.api.invocation.Gradle
|
||||
|
||||
object GradleCacheAccessFactoryG80 : GradleCacheAccessFactory {
|
||||
override fun create(gradle: Gradle): GradleCacheAccess {
|
||||
return GradleCacheAccessG80(gradle)
|
||||
}
|
||||
override fun create(gradle: Gradle): GradleCacheAccess = GradleCacheAccessG80(gradle)
|
||||
}
|
||||
|
||||
class GradleCacheAccessG80(gradle: Gradle) : GradleCacheAccess {
|
||||
class GradleCacheAccessG80(
|
||||
gradle: Gradle,
|
||||
) : GradleCacheAccess {
|
||||
private val artifactCachesProvider = gradle.service<ArtifactCachesProvider>()
|
||||
|
||||
override fun useCache(block: () -> Unit) {
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
package org.nixos.gradle2nix
|
||||
|
||||
abstract class Gradle2NixPlugin : AbstractGradle2NixPlugin(
|
||||
GradleCacheAccessFactoryG81,
|
||||
DependencyExtractorApplierG8,
|
||||
ResolveAllArtifactsApplierG8,
|
||||
)
|
||||
abstract class Gradle2NixPlugin :
|
||||
AbstractGradle2NixPlugin(
|
||||
GradleCacheAccessFactoryG81,
|
||||
DependencyExtractorApplierG8,
|
||||
ResolveAllArtifactsApplierG8,
|
||||
)
|
||||
|
||||
@@ -4,12 +4,12 @@ import org.gradle.api.internal.artifacts.ivyservice.ArtifactCachesProvider
|
||||
import org.gradle.api.invocation.Gradle
|
||||
|
||||
object GradleCacheAccessFactoryG81 : GradleCacheAccessFactory {
|
||||
override fun create(gradle: Gradle): GradleCacheAccess {
|
||||
return GradleCacheAccessG81(gradle)
|
||||
}
|
||||
override fun create(gradle: Gradle): GradleCacheAccess = GradleCacheAccessG81(gradle)
|
||||
}
|
||||
|
||||
class GradleCacheAccessG81(gradle: Gradle) : GradleCacheAccess {
|
||||
class GradleCacheAccessG81(
|
||||
gradle: Gradle,
|
||||
) : GradleCacheAccess {
|
||||
private val artifactCachesProvider = gradle.service<ArtifactCachesProvider>()
|
||||
|
||||
override fun useCache(block: () -> Unit) {
|
||||
|
||||
Reference in New Issue
Block a user