Support downloading additional artifacts (sources, javadoc, etc.)

This commit is contained in:
Tad Fisher
2025-01-17 11:44:31 -08:00
committed by Tad Fisher
parent f8c0afcd29
commit 96a444c22b
30 changed files with 1985 additions and 366 deletions

View File

@@ -1,37 +1,49 @@
package org.nixos.gradle2nix
import org.gradle.api.Project
import org.gradle.api.artifacts.Configuration
import org.gradle.api.artifacts.component.ModuleComponentIdentifier
import org.gradle.api.attributes.Bundling
import org.gradle.api.attributes.DocsType
import org.gradle.api.file.FileCollection
import org.gradle.api.model.ObjectFactory
import org.gradle.api.tasks.TaskAction
import org.gradle.api.tasks.TaskProvider
import org.gradle.internal.serialization.Cached
import org.gradle.work.DisableCachingByDefault
import org.nixos.gradle2nix.model.RESOLVE_PROJECT_TASK
import javax.inject.Inject
import org.nixos.gradle2nix.model.ArtifactType
object ResolveAllArtifactsApplierG8 : AbstractResolveAllArtifactsApplier() {
override fun Project.registerProjectTask(): TaskProvider<*> =
tasks.register(RESOLVE_PROJECT_TASK, ResolveProjectDependenciesTaskG8::class.java)
}
@Suppress("UnstableApiUsage")
override fun Project.addConfigurationArtifactResolver(
configuration: Configuration,
artifactType: ArtifactType,
): FileCollection {
val result =
configuration.incoming
.artifactView { view ->
view.isLenient = true
view.withVariantReselection()
view.componentFilter { it is ModuleComponentIdentifier }
view.attributes { attrs ->
with(attrs) {
attribute(Bundling.BUNDLING_ATTRIBUTE, objects.named(Bundling::class.java, Bundling.EXTERNAL))
attribute(
DocsType.DOCS_TYPE_ATTRIBUTE,
objects.named(
DocsType::class.java,
when (artifactType) {
ArtifactType.DOXYGEN -> DocsType.DOXYGEN
ArtifactType.JAVADOC -> DocsType.JAVADOC
ArtifactType.SAMPLES -> DocsType.SAMPLES
ArtifactType.SOURCES -> DocsType.SOURCES
ArtifactType.USERMANUAL -> DocsType.USER_MANUAL
},
),
)
}
}
}.files
@DisableCachingByDefault(because = "Not worth caching")
abstract class ResolveProjectDependenciesTaskG8
@Inject
constructor(
private val objects: ObjectFactory,
) : ResolveProjectDependenciesTask() {
private val artifactFiles = Cached.of { artifactFiles() }
private fun artifactFiles(): FileCollection =
objects.fileCollection().from(
getReportableConfigurations().map { configuration ->
configuration.artifactFiles()
},
)
@TaskAction
fun action() {
artifactFiles.get().count()
configuration.incoming.afterResolve {
result.files.count()
}
return result
}
}