Skip to content

Cleanup on standardizing elasticsearch classifier in artifact names #130473

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 20 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -9,18 +9,21 @@

package org.elasticsearch.gradle.internal


import spock.lang.Unroll

import org.elasticsearch.gradle.Architecture
import org.elasticsearch.gradle.VersionProperties
import org.elasticsearch.gradle.fixtures.AbstractGradleFuncTest
import org.gradle.testkit.runner.TaskOutcome


@Unroll
class InternalDistributionDownloadPluginFuncTest extends AbstractGradleFuncTest {

def "resolves current version from local build"() {
def "resolves current #arch version from local build"() {
given:
internalBuild()
localDistroSetup()
localDistroSetup(arch)
def distroVersion = VersionProperties.getElasticsearch()
buildFile << """
apply plugin: 'elasticsearch.internal-distribution-download'
Expand All @@ -40,12 +43,14 @@ class InternalDistributionDownloadPluginFuncTest extends AbstractGradleFuncTest
"""

when:
def result = gradleRunner("setupDistro", '-g', gradleUserHome).build()
def result = gradleRunner("-Dos.arch=${arch.classifier}", "setupDistro", '-g', gradleUserHome).build()

then:
result.task(":distribution:archives:${testArchiveProjectName}:buildExpanded").outcome == TaskOutcome.SUCCESS
result.task(":distribution:archives:${getTestArchiveProjectName(arch)}:buildExpanded").outcome == TaskOutcome.SUCCESS
result.task(":setupDistro").outcome == TaskOutcome.SUCCESS
assertExtractedDistroIsCreated("build/distro", 'current-marker.txt')
where:
arch << [Architecture.AARCH64, Architecture.AMD64]
}

def "resolves expanded bwc versions from source"() {
Expand Down Expand Up @@ -74,8 +79,10 @@ class InternalDistributionDownloadPluginFuncTest extends AbstractGradleFuncTest
then:
result.task(":distribution:bwc:minor:buildBwcExpandedTask").outcome == TaskOutcome.SUCCESS
result.task(":setupDistro").outcome == TaskOutcome.SUCCESS
assertExtractedDistroIsCreated("distribution/bwc/minor/build/install/elastic-distro",
'bwc-marker.txt')
assertExtractedDistroIsCreated(
"distribution/bwc/minor/build/install/elastic-distro",
'bwc-marker.txt'
)
}

def "fails on resolving bwc versions with no bundled jdk"() {
Expand All @@ -101,8 +108,10 @@ class InternalDistributionDownloadPluginFuncTest extends AbstractGradleFuncTest
when:
def result = gradleRunner("createExtractedTestDistro").buildAndFail()
then:
assertOutputContains(result.output, "Configuring a snapshot bwc distribution ('test_distro') " +
"without a bundled JDK is not supported.")
assertOutputContains(
result.output, "Configuring a snapshot bwc distribution ('test_distro') " +
"without a bundled JDK is not supported."
)
}

private void bwcMinorProjectSetup() {
Expand Down Expand Up @@ -140,11 +149,12 @@ class InternalDistributionDownloadPluginFuncTest extends AbstractGradleFuncTest
"""
}

private void localDistroSetup() {
private void localDistroSetup(Architecture arch = Architecture.current()) {
def archiveProjectName = getTestArchiveProjectName(arch)
settingsFile << """
include ":distribution:archives:${testArchiveProjectName}"
include ":distribution:archives:${ archiveProjectName}"
"""
def bwcSubProjectFolder = testProjectDir.newFolder("distribution", "archives", testArchiveProjectName)
def bwcSubProjectFolder = testProjectDir.newFolder("distribution", "archives", archiveProjectName)
new File(bwcSubProjectFolder, 'current-marker.txt') << "current"
new File(bwcSubProjectFolder, 'build.gradle') << """
import org.gradle.api.internal.artifacts.ArtifactAttributes;
Expand Down Expand Up @@ -174,10 +184,11 @@ class InternalDistributionDownloadPluginFuncTest extends AbstractGradleFuncTest
"""
}

String getTestArchiveProjectName() {
def archSuffix = Architecture.current() == Architecture.AARCH64 ? '-aarch64' : ''
String getTestArchiveProjectName(Architecture architecture = Architecture.current()) {
def archSuffix = '-' + architecture.classifier
return "linux${archSuffix}-tar"
}

boolean assertExtractedDistroIsCreated(String relativeDistroPath, String markerFileName) {
File extractedFolder = new File(testProjectDir.root, relativeDistroPath)
assert extractedFolder.exists()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ package org.elasticsearch.gradle.internal
import spock.lang.Unroll
import com.github.tomakehurst.wiremock.WireMockServer

import org.elasticsearch.gradle.Architecture
import org.elasticsearch.gradle.fixtures.AbstractGradleFuncTest
import org.elasticsearch.gradle.fixtures.WiremockFixture
import org.elasticsearch.gradle.transform.SymbolicLinkPreservingUntarTransform
Expand All @@ -23,6 +24,8 @@ import java.nio.file.Paths
import java.util.regex.Matcher
import java.util.regex.Pattern

import static org.elasticsearch.gradle.Architecture.AARCH64
import static org.elasticsearch.gradle.Architecture.AMD64
import static org.elasticsearch.gradle.internal.JdkDownloadPlugin.*

class JdkDownloadPluginFuncTest extends AbstractGradleFuncTest {
Expand Down Expand Up @@ -76,23 +79,23 @@ class JdkDownloadPluginFuncTest extends AbstractGradleFuncTest {
assertExtraction(result.output, expectedJavaBin);

where:
platform | arch | jdkVendor | jdkVersion | distributionVersion | expectedJavaBin | suffix
"linux" | "x64" | VENDOR_ADOPTIUM | ADOPT_JDK_VERSION | null | "bin/java" | ""
"linux" | "x64" | VENDOR_OPENJDK | OPEN_JDK_VERSION | null | "bin/java" | ""
"linux" | "x64" | VENDOR_OPENJDK | OPENJDK_VERSION_OLD | null | "bin/java" | "(old version)"
"windows" | "x64" | VENDOR_ADOPTIUM | ADOPT_JDK_VERSION | null | "bin/java" | ""
"windows" | "x64" | VENDOR_OPENJDK | OPEN_JDK_VERSION | null | "bin/java" | ""
"windows" | "x64" | VENDOR_OPENJDK | OPENJDK_VERSION_OLD | null | "bin/java" | "(old version)"
"darwin" | "x64" | VENDOR_ADOPTIUM | ADOPT_JDK_VERSION | null | "Contents/Home/bin/java" | ""
"darwin" | "x64" | VENDOR_OPENJDK | OPEN_JDK_VERSION | null | "Contents/Home/bin/java" | ""
"darwin" | "x64" | VENDOR_OPENJDK | OPENJDK_VERSION_OLD | null | "Contents/Home/bin/java" | "(old version)"
"mac" | "x64" | VENDOR_OPENJDK | OPEN_JDK_VERSION | null | "Contents/Home/bin/java" | ""
"mac" | "x64" | VENDOR_OPENJDK | OPENJDK_VERSION_OLD | null | "Contents/Home/bin/java" | "(old version)"
"darwin" | "aarch64" | VENDOR_ADOPTIUM | ADOPT_JDK_VERSION | null | "Contents/Home/bin/java" | ""
"linux" | "aarch64" | VENDOR_ADOPTIUM | ADOPT_JDK_VERSION | null | "bin/java" | ""
"linux" | "aarch64" | VENDOR_ADOPTIUM | ADOPT_JDK_VERSION_11 | null | "bin/java" | "(jdk 11)"
"linux" | "aarch64" | VENDOR_ADOPTIUM | ADOPT_JDK_VERSION_15 | null | "bin/java" | "(jdk 15)"
"darwin" | "aarch64" | VENDOR_ZULU | AZUL_JDK_VERSION_8 | AZUL_8_DISTRO_VERSION | "Contents/Home/bin/java" | "(jdk 8)"
platform | arch | jdkVendor | jdkVersion | distributionVersion | expectedJavaBin | suffix
"linux" | AMD64 | VENDOR_ADOPTIUM | ADOPT_JDK_VERSION | null | "bin/java" | ""
"linux" | AMD64 | VENDOR_OPENJDK | OPEN_JDK_VERSION | null | "bin/java" | ""
"linux" | AMD64 | VENDOR_OPENJDK | OPENJDK_VERSION_OLD | null | "bin/java" | "(old version)"
"windows" | AMD64 | VENDOR_ADOPTIUM | ADOPT_JDK_VERSION | null | "bin/java" | ""
"windows" | AMD64 | VENDOR_OPENJDK | OPEN_JDK_VERSION | null | "bin/java" | ""
"windows" | AMD64 | VENDOR_OPENJDK | OPENJDK_VERSION_OLD | null | "bin/java" | "(old version)"
"darwin" | AMD64 | VENDOR_ADOPTIUM | ADOPT_JDK_VERSION | null | "Contents/Home/bin/java" | ""
"darwin" | AMD64 | VENDOR_OPENJDK | OPEN_JDK_VERSION | null | "Contents/Home/bin/java" | ""
"darwin" | AMD64 | VENDOR_OPENJDK | OPENJDK_VERSION_OLD | null | "Contents/Home/bin/java" | "(old version)"
"mac" | AMD64 | VENDOR_OPENJDK | OPEN_JDK_VERSION | null | "Contents/Home/bin/java" | ""
"mac" | AMD64 | VENDOR_OPENJDK | OPENJDK_VERSION_OLD | null | "Contents/Home/bin/java" | "(old version)"
"darwin" | AARCH64 | VENDOR_ADOPTIUM | ADOPT_JDK_VERSION | null | "Contents/Home/bin/java" | ""
"linux" | AARCH64 | VENDOR_ADOPTIUM | ADOPT_JDK_VERSION | null | "bin/java" | ""
"linux" | AARCH64 | VENDOR_ADOPTIUM | ADOPT_JDK_VERSION_11 | null | "bin/java" | "(jdk 11)"
"linux" | AARCH64 | VENDOR_ADOPTIUM | ADOPT_JDK_VERSION_15 | null | "bin/java" | "(jdk 15)"
"darwin" | AARCH64 | VENDOR_ZULU | AZUL_JDK_VERSION_8 | AZUL_8_DISTRO_VERSION | "Contents/Home/bin/java" | "(jdk 8)"
}

def "transforms are reused across projects"() {
Expand All @@ -103,17 +106,21 @@ class JdkDownloadPluginFuncTest extends AbstractGradleFuncTest {
plugins {
id 'elasticsearch.jdk-download' apply false
}


"""
3.times {
subProject(':sub-' + it) << """
import org.elasticsearch.gradle.Architecture

apply plugin: 'elasticsearch.jdk-download'

jdks {
myJdk {
vendor = '$jdkVendor'
version = '$jdkVersion'
platform = "$platform"
architecture = "x64"
architecture = Architecture.AMD64
}
}
tasks.register("getJdk") {
Expand Down Expand Up @@ -151,6 +158,8 @@ class JdkDownloadPluginFuncTest extends AbstractGradleFuncTest {
id 'elasticsearch.jdk-download'
}
import org.elasticsearch.gradle.internal.Jdk
import org.elasticsearch.gradle.Architecture

apply plugin: 'base'
apply plugin: 'elasticsearch.jdk-download'

Expand All @@ -160,7 +169,7 @@ class JdkDownloadPluginFuncTest extends AbstractGradleFuncTest {
version = '$ADOPT_JDK_VERSION'
platform = "$platform"
distributionVersion = '$ADOPT_JDK_VERSION'
architecture = "x64"
architecture = Architecture.AMD64
}
}

Expand Down Expand Up @@ -214,10 +223,10 @@ class JdkDownloadPluginFuncTest extends AbstractGradleFuncTest {
private static String urlPath(final String vendor,
final String version,
final String platform,
final String arch = 'x64') {
final Architecture arch = AMD64) {
if (vendor.equals(VENDOR_ADOPTIUM)) {
final String module = isMac(platform) ? "mac" : platform;
return "/jdk-" + version + "/" + module + "/${arch}/jdk/hotspot/normal/adoptium";
return "/jdk-" + version + "/" + module + "/${arch.jdkClassifier}/jdk/hotspot/normal/adoptium";
} else if (vendor.equals(VENDOR_OPENJDK)) {
final String effectivePlatform = isMac(platform) ? "macos" : platform;
final boolean isOld = version.equals(OPENJDK_VERSION_OLD);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ subprojects {
archiveBaseName.set("elasticsearch${project.name.startsWith('oss')?'-oss':''}")
def versionFromBranch = calculateBranchVersion()
archiveVersion.set("${versionFromBranch}-SNAPSHOT")
archiveClassifier.set("darwin-x86_64")
archiveClassifier.set("darwin-amd64")
archiveExtension.set('tar.gz')
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -179,9 +179,7 @@ private static String distributionProjectName(ElasticsearchDistribution distribu
Architecture architecture = distribution.getArchitecture();
String projectName = "";

final String archString = platform == ElasticsearchDistribution.Platform.WINDOWS || architecture == Architecture.X64
? ""
: "-" + architecture.toString().toLowerCase();
final String archString = calculateArchString(distribution);

if (distribution.getBundledJdk() == false) {
projectName += "no-jdk-";
Expand All @@ -204,7 +202,21 @@ private static String distributionProjectName(ElasticsearchDistribution distribu
if (distribution.getType() == InternalElasticsearchDistributionTypes.DOCKER_WOLFI) {
return projectName + "wolfi-docker" + archString + "-export";
}
return projectName + distribution.getType().getName();
return projectName + architecture.classifier + "-" + distribution.getType().getName();
}

private static String calculateArchString(ElasticsearchDistribution distribution) {
Architecture architecture = distribution.getArchitecture();
ElasticsearchDistribution.Platform platform = distribution.getPlatform();
Version version = Version.fromString(distribution.getVersion());

if (version.onOrAfter("9.2.0")) {
return platform == ElasticsearchDistribution.Platform.WINDOWS ? "" : "-" + architecture.toString().toLowerCase();
} else {
return platform == ElasticsearchDistribution.Platform.WINDOWS || architecture == Architecture.AMD64
? ""
: "-" + architecture.toString().toLowerCase();
}
}

public static class ProjectBasedDistributionDependency implements DistributionDependency {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@

package org.elasticsearch.gradle.internal;

import org.elasticsearch.gradle.Architecture;
import org.gradle.api.Buildable;
import org.gradle.api.artifacts.Configuration;
import org.gradle.api.file.FileCollection;
Expand Down Expand Up @@ -39,7 +40,7 @@ public class Jdk implements Buildable, Iterable<File> {
private final Property<String> vendor;
private final Property<String> version;
private final Property<String> platform;
private final Property<String> architecture;
private final Property<Architecture> architecture;
private final Property<String> distributionVersion;
private final String configurationName;
private String baseVersion;
Expand All @@ -54,7 +55,7 @@ public class Jdk implements Buildable, Iterable<File> {
this.vendor = objectFactory.property(String.class);
this.version = objectFactory.property(String.class);
this.platform = objectFactory.property(String.class);
this.architecture = objectFactory.property(String.class);
this.architecture = objectFactory.property(Architecture.class);
this.distributionVersion = objectFactory.property(String.class);
}

Expand Down Expand Up @@ -98,16 +99,11 @@ public void setPlatform(String platform) {
this.platform.set(platform);
}

public String getArchitecture() {
public Architecture getArchitecture() {
return architecture.get();
}

public void setArchitecture(final String architecture) {
if (ALLOWED_ARCHITECTURES.contains(architecture) == false) {
throw new IllegalArgumentException(
"unknown architecture [" + architecture + "] for jdk [" + name + "], must be one of " + ALLOWED_ARCHITECTURES
);
}
public void setArchitecture(final Architecture architecture) {
this.architecture.set(architecture);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@

package org.elasticsearch.gradle.internal;

import org.elasticsearch.gradle.Architecture;
import org.elasticsearch.gradle.transform.SymbolicLinkPreservingUntarTransform;
import org.elasticsearch.gradle.transform.UnzipTransform;
import org.gradle.api.GradleException;
Expand Down Expand Up @@ -135,7 +136,7 @@ private void setupRepository(Project project, Jdk jdk) {
}
} else if (jdk.getVendor().equals(VENDOR_ZULU)) {
repoUrl = "https://cdn.azul.com";
if (jdk.getMajor().equals("8") && isJdkOnMacOsPlatform(jdk) && jdk.getArchitecture().equals("aarch64")) {
if (jdk.getMajor().equals("8") && isJdkOnMacOsPlatform(jdk) && jdk.getArchitecture().equals(Architecture.AARCH64)) {
artifactPattern = "zulu/bin/zulu"
+ jdk.getDistributionVersion()
+ "-ca-jdk"
Expand Down Expand Up @@ -168,7 +169,15 @@ public static NamedDomainObjectContainer<Jdk> getContainer(Project project) {
private static String dependencyNotation(Jdk jdk) {
String platformDep = isJdkOnMacOsPlatform(jdk) ? (jdk.getVendor().equals(VENDOR_ADOPTIUM) ? "mac" : "macos") : jdk.getPlatform();
String extension = jdk.getPlatform().equals("windows") ? "zip" : "tar.gz";
return groupName(jdk) + ":" + platformDep + ":" + jdk.getBaseVersion() + ":" + jdk.getArchitecture() + "@" + extension;
return groupName(jdk)
+ ":"
+ platformDep
+ ":"
+ jdk.getBaseVersion()
+ ":"
+ jdk.getArchitecture().jdkClassifier
+ "@"
+ extension;
}

private static boolean isJdkOnMacOsPlatform(Jdk jdk) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@

package org.elasticsearch.gradle.internal.distribution;

import org.elasticsearch.gradle.Architecture;
import org.elasticsearch.gradle.ElasticsearchDistribution;
import org.elasticsearch.gradle.ElasticsearchDistributionType;
import org.elasticsearch.gradle.Version;
Expand All @@ -24,7 +25,6 @@ public String getName() {

@Override
public String getClassifier(ElasticsearchDistribution.Platform platform, Version version) {
return ":amd64";
return ":" + Architecture.current().debianClassifier;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,10 @@

package org.elasticsearch.gradle.internal.distribution;

import org.elasticsearch.gradle.Architecture;
import org.elasticsearch.gradle.ElasticsearchDistribution;
import org.elasticsearch.gradle.ElasticsearchDistributionType;
import org.elasticsearch.gradle.Version;

public class RpmElasticsearchDistributionType implements ElasticsearchDistributionType {

Expand All @@ -29,4 +32,9 @@ public boolean shouldExtract() {
public boolean isDocker() {
return false;
}

@Override
public String getClassifier(ElasticsearchDistribution.Platform platform, Version version) {
return ":" + Architecture.current().bwcClassifier;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -222,11 +222,12 @@ public void execute() {
}

tags.forEach(tag -> spec.args("--tag", tag));

parameters.getBuildArgs().get().forEach((k, v) -> spec.args("--build-arg", k + "=" + v));

if (parameters.getPush().getOrElse(false)) {
spec.args("--push");
} else {
spec.args("--load");
}
});

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -256,7 +256,8 @@ private static String distroId(ElasticsearchDistributionType type, Platform plat
+ (type == ARCHIVE ? platform + "-" : "")
+ type.getName()
+ (bundledJdk ? "" : "-no-jdk")
+ (architecture == Architecture.X64 ? "" : "-" + architecture.toString().toLowerCase());
+ "-"
+ architecture.toString().toLowerCase();
}

private static String destructiveDistroTestTaskName(ElasticsearchDistribution distro) {
Expand Down
Loading