Make --write-verification-metadata faster (#111103)

by ignoring elasticsearch distributions when resolving artifacts
This commit is contained in:
Rene Groeschke 2024-07-19 17:52:44 +02:00 committed by GitHub
parent fcc5b737ea
commit 022b84b41d
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -14,6 +14,7 @@ import org.elasticsearch.gradle.transform.UnzipTransform;
import org.gradle.api.NamedDomainObjectContainer; import org.gradle.api.NamedDomainObjectContainer;
import org.gradle.api.Plugin; import org.gradle.api.Plugin;
import org.gradle.api.Project; import org.gradle.api.Project;
import org.gradle.api.artifacts.Configuration;
import org.gradle.api.artifacts.dsl.DependencyHandler; import org.gradle.api.artifacts.dsl.DependencyHandler;
import org.gradle.api.artifacts.repositories.IvyArtifactRepository; import org.gradle.api.artifacts.repositories.IvyArtifactRepository;
import org.gradle.api.artifacts.type.ArtifactTypeDefinition; import org.gradle.api.artifacts.type.ArtifactTypeDefinition;
@ -53,6 +54,8 @@ public class DistributionDownloadPlugin implements Plugin<Project> {
private Property<Boolean> dockerAvailability; private Property<Boolean> dockerAvailability;
private boolean writingDependencies = false;
@Inject @Inject
public DistributionDownloadPlugin(ObjectFactory objectFactory) { public DistributionDownloadPlugin(ObjectFactory objectFactory) {
this.objectFactory = objectFactory; this.objectFactory = objectFactory;
@ -65,6 +68,7 @@ public class DistributionDownloadPlugin implements Plugin<Project> {
@Override @Override
public void apply(Project project) { public void apply(Project project) {
writingDependencies = project.getGradle().getStartParameter().getWriteDependencyVerifications().isEmpty() == false;
project.getDependencies().registerTransform(UnzipTransform.class, transformSpec -> { project.getDependencies().registerTransform(UnzipTransform.class, transformSpec -> {
transformSpec.getFrom().attribute(ArtifactTypeDefinition.ARTIFACT_TYPE_ATTRIBUTE, ArtifactTypeDefinition.ZIP_TYPE); transformSpec.getFrom().attribute(ArtifactTypeDefinition.ARTIFACT_TYPE_ATTRIBUTE, ArtifactTypeDefinition.ZIP_TYPE);
transformSpec.getTo().attribute(ArtifactTypeDefinition.ARTIFACT_TYPE_ATTRIBUTE, ArtifactTypeDefinition.DIRECTORY_TYPE); transformSpec.getTo().attribute(ArtifactTypeDefinition.ARTIFACT_TYPE_ATTRIBUTE, ArtifactTypeDefinition.DIRECTORY_TYPE);
@ -87,7 +91,6 @@ public class DistributionDownloadPlugin implements Plugin<Project> {
var extractedConfiguration = project.getConfigurations().create(DISTRO_EXTRACTED_CONFIG_PREFIX + name); var extractedConfiguration = project.getConfigurations().create(DISTRO_EXTRACTED_CONFIG_PREFIX + name);
extractedConfiguration.getAttributes() extractedConfiguration.getAttributes()
.attribute(ArtifactTypeDefinition.ARTIFACT_TYPE_ATTRIBUTE, ArtifactTypeDefinition.DIRECTORY_TYPE); .attribute(ArtifactTypeDefinition.ARTIFACT_TYPE_ATTRIBUTE, ArtifactTypeDefinition.DIRECTORY_TYPE);
var distribution = new ElasticsearchDistribution( var distribution = new ElasticsearchDistribution(
name, name,
objectFactory, objectFactory,
@ -96,16 +99,20 @@ public class DistributionDownloadPlugin implements Plugin<Project> {
objectFactory.fileCollection().from(extractedConfiguration) objectFactory.fileCollection().from(extractedConfiguration)
); );
registerDistributionDependencies(project, distribution); // when running with --write-dependency-verification to update dependency verification data,
// we do not register the dependencies as we ignore elasticsearch internal dependencies anyhow and
// want to reduce general resolution time
if (writingDependencies == false) {
registerDistributionDependencies(project, distribution);
}
return distribution; return distribution;
}); });
project.getExtensions().add(CONTAINER_NAME, distributionsContainer); project.getExtensions().add(CONTAINER_NAME, distributionsContainer);
} }
private void registerDistributionDependencies(Project project, ElasticsearchDistribution distribution) { private void registerDistributionDependencies(Project project, ElasticsearchDistribution distribution) {
project.getConfigurations() Configuration distroConfig = project.getConfigurations().getByName(DISTRO_CONFIG_PREFIX + distribution.getName());
.getByName(DISTRO_CONFIG_PREFIX + distribution.getName()) distroConfig.getDependencies()
.getDependencies()
.addLater( .addLater(
project.provider(() -> distribution.maybeFreeze()) project.provider(() -> distribution.maybeFreeze())
.map( .map(
@ -114,9 +121,9 @@ public class DistributionDownloadPlugin implements Plugin<Project> {
) )
); );
project.getConfigurations() Configuration extractedDistroConfig = project.getConfigurations()
.getByName(DISTRO_EXTRACTED_CONFIG_PREFIX + distribution.getName()) .getByName(DISTRO_EXTRACTED_CONFIG_PREFIX + distribution.getName());
.getDependencies() extractedDistroConfig.getDependencies()
.addAllLater( .addAllLater(
project.provider(() -> distribution.maybeFreeze()) project.provider(() -> distribution.maybeFreeze())
.map( .map(