Use exclusiveContent gradle feature for jdk and distro downloads (#53358)

The jdk and distribution download plugins create fake ivy repositories,
and use group based repository filtering to ensure no other artifacts
try to resolve against the fake repos. Currently this works by adding a
blanket exclude to all repositories for the given group name. This
commit changes to using the new exclusiveContent feature in
Gradle to do the exclusion.
This commit is contained in:
Ryan Ernst 2020-03-11 15:45:47 -07:00 committed by Ryan Ernst
parent d8e70d4688
commit 4301c35783
2 changed files with 25 additions and 31 deletions

View File

@ -183,24 +183,21 @@ public class DistributionDownloadPlugin implements Plugin<Project> {
}
private static void addIvyRepo(Project project, String name, String url, String group) {
project.getRepositories().ivy(ivyRepo -> {
ivyRepo.setName(name);
ivyRepo.setUrl(url);
ivyRepo.metadataSources(IvyArtifactRepository.MetadataSources::artifact);
IvyArtifactRepository ivyRepo = project.getRepositories().ivy(repo -> {
repo.setName(name);
repo.setUrl(url);
repo.metadataSources(IvyArtifactRepository.MetadataSources::artifact);
// this header is not a credential but we hack the capability to send this header to avoid polluting our download stats
ivyRepo.credentials(HttpHeaderCredentials.class, creds -> {
repo.credentials(HttpHeaderCredentials.class, creds -> {
creds.setName("X-Elastic-No-KPI");
creds.setValue("1");
});
ivyRepo.getAuthentication().create("header", HttpHeaderAuthentication.class);
ivyRepo.patternLayout(layout -> layout.artifact("/downloads/elasticsearch/[module]-[revision](-[classifier]).[ext]"));
ivyRepo.content(content -> content.includeGroup(group));
repo.getAuthentication().create("header", HttpHeaderAuthentication.class);
repo.patternLayout(layout -> layout.artifact("/downloads/elasticsearch/[module]-[revision](-[classifier]).[ext]"));
});
project.getRepositories().all(repo -> {
if (repo.getName().equals(name) == false) {
// all other repos should ignore the special group name
repo.content(content -> content.excludeGroup(group));
}
project.getRepositories().exclusiveContent(exclusiveContentRepository -> {
exclusiveContentRepository.filter(config -> config.includeGroup(group));
exclusiveContentRepository.forRepositories(ivyRepo);
});
}

View File

@ -79,16 +79,6 @@ public class JdkDownloadPlugin implements Plugin<Project> {
setupRootJdkDownload(project.getRootProject(), jdk);
}
});
// all other repos should ignore the special jdk artifacts
project.getRootProject().getRepositories().all(repo -> {
if (repo.getName().startsWith(REPO_NAME_PREFIX) == false) {
repo.content(content -> {
content.excludeGroup("adoptopenjdk");
content.excludeGroup("openjdk");
});
}
});
}
@SuppressWarnings("unchecked")
@ -145,13 +135,16 @@ public class JdkDownloadPlugin implements Plugin<Project> {
}
// Define the repository if we haven't already
if (rootProject.getRepositories().findByName(repoName) == null) {
repositories.ivy(ivyRepo -> {
ivyRepo.setName(repoName);
ivyRepo.setUrl(repoUrl);
ivyRepo.metadataSources(IvyArtifactRepository.MetadataSources::artifact);
ivyRepo.patternLayout(layout -> layout.artifact(artifactPattern));
ivyRepo.content(content -> content.includeGroup(jdk.getVendor()));
if (repositories.findByName(repoName) == null) {
IvyArtifactRepository ivyRepo = repositories.ivy(repo -> {
repo.setName(repoName);
repo.setUrl(repoUrl);
repo.metadataSources(IvyArtifactRepository.MetadataSources::artifact);
repo.patternLayout(layout -> layout.artifact(artifactPattern));
});
repositories.exclusiveContent(exclusiveContentRepository -> {
exclusiveContentRepository.forRepositories(ivyRepo);
exclusiveContentRepository.filter(config -> config.includeGroup(groupName(jdk)));
});
}
@ -261,7 +254,11 @@ public class JdkDownloadPlugin implements Plugin<Project> {
: jdk.getPlatform();
String extension = jdk.getPlatform().equals("windows") ? "zip" : "tar.gz";
return jdk.getVendor() + ":" + platformDep + ":" + jdk.getBaseVersion() + "@" + extension;
return groupName(jdk) + ":" + platformDep + ":" + jdk.getBaseVersion() + "@" + extension;
}
private static String groupName(Jdk jdk) {
return jdk.getVendor() + "_" + jdk.getMajor();
}
private static String configName(String... parts) {