Skip to content
Merged
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 @@ -106,7 +106,7 @@ private void configureBwcProject(Project project, BwcVersions.UnreleasedVersionI
bwcVersion,
distributionProject.name,
distributionProject.getProjectPath(),
distributionProject.getDistFile(),
distributionProject,
buildBwcTaskProvider
);

Expand All @@ -131,14 +131,24 @@ private void registerBwcArtifacts(Project bwcProject, DistributionProject distri
}

private void registerDistributionArchiveArtifact(Project bwcProject, DistributionProject distributionProject, String buildBwcTask) {
String artifactFileName = distributionProject.getDistFile().getName();
String artifactFileName = distributionProject.getExpectedDistFile().getName();
String artifactName = "opensearch";

String suffix = artifactFileName.endsWith("tar.gz") ? "tar.gz" : artifactFileName.substring(artifactFileName.length() - 3);
int archIndex = artifactFileName.indexOf("x64");

Provider<File> artifactFileProvider = providerFactory.provider(() -> {
if (distributionProject.getExpectedDistFile().exists()) {
return distributionProject.getExpectedDistFile();
} else if (distributionProject.getFallbackDistFile().exists()) {
return distributionProject.getFallbackDistFile();
}
// File doesn't exist, validation will fail elsewhere but we must return a File here
return distributionProject.getExpectedDistFile();
});

bwcProject.getConfigurations().create(distributionProject.name);
bwcProject.getArtifacts().add(distributionProject.name, distributionProject.getDistFile(), artifact -> {
bwcProject.getArtifacts().add(distributionProject.name, artifactFileProvider, artifact -> {
artifact.setName(artifactName);
artifact.builtBy(buildBwcTask);
artifact.setType(suffix);
Expand All @@ -152,6 +162,10 @@ private void registerDistributionArchiveArtifact(Project bwcProject, Distributio
});
}

static Version nextPatchVersion(Version version) {
return new Version(version.getMajor(), version.getMinor(), version.getRevision() + 1);
}

private static List<DistributionProject> resolveArchiveProjects(File checkoutDir, Version bwcVersion) {
List<String> projects = new ArrayList<>();
// All active BWC branches publish rpm and deb packages
Expand All @@ -174,6 +188,8 @@ private static List<DistributionProject> resolveArchiveProjects(File checkoutDir
projects.addAll(asList("zip", "tar"));
}

Version fallbackVersion = nextPatchVersion(bwcVersion);

return projects.stream().map(name -> {
String baseDir = "distribution" + (name.endsWith("zip") || name.endsWith("tar") ? "/archives" : "/packages");
String classifier = "";
Expand All @@ -199,7 +215,7 @@ private static List<DistributionProject> resolveArchiveProjects(File checkoutDir
} else {
extension = name.substring(4);
}
return new DistributionProject(name, baseDir, bwcVersion, classifier, extension, checkoutDir);
return new DistributionProject(name, baseDir, bwcVersion, fallbackVersion, classifier, extension, checkoutDir);
}).collect(Collectors.toList());
}

Expand All @@ -215,15 +231,15 @@ static void createBuildBwcTask(
Provider<Version> bwcVersion,
String projectName,
String projectPath,
File projectArtifact,
DistributionProject distributionProject,
TaskProvider<Task> bwcTaskProvider
) {
String bwcTaskName = buildBwcTaskName(projectName);
bwcSetupExtension.bwcTask(bwcTaskName, new Action<LoggedExec>() {
@Override
public void execute(LoggedExec c) {
c.getInputs().file(new File(project.getBuildDir(), "refspec"));
c.getOutputs().files(projectArtifact);
c.getOutputs().files(distributionProject.getExpectedDistFile(), distributionProject.getFallbackDistFile());
c.getOutputs().cacheIf("BWC distribution caching is disabled on 'master' branch", task -> {
String gitBranch = System.getenv("GIT_BRANCH");
return BuildParams.isCi() && (gitBranch == null || gitBranch.endsWith("master") == false);
Expand All @@ -235,9 +251,24 @@ public void execute(LoggedExec c) {
c.doLast(new Action<Task>() {
@Override
public void execute(Task task) {
if (projectArtifact.exists() == false) {
if (distributionProject.getExpectedDistFile().exists() == false
&& distributionProject.getFallbackDistFile().exists()) {
project.getLogger()
.warn(
"BWC branch produced {} instead of {}. "
+ "Version.java on main may need updating to include version {}.",
distributionProject.getFallbackDistFile().getName(),
distributionProject.getExpectedDistFile().getName(),
distributionProject.getFallbackVersion()
);
} else if (distributionProject.getExpectedDistFile().exists() == false) {
throw new InvalidUserDataException(
"Building " + bwcVersion.get() + " didn't generate expected file " + projectArtifact
"Building "
+ bwcVersion.get()
+ " didn't generate expected file "
+ distributionProject.getExpectedDistFile()
+ " or fallback "
+ distributionProject.getFallbackDistFile()
);
}
}
Expand All @@ -251,20 +282,48 @@ public void execute(Task task) {
* Represents an archive project (distribution/archives/*)
* we build from a bwc Version in a cloned repository
*/
private static class DistributionProject {
private final String name;
private String projectPath;
private File distFile;
private File expandedDistDir;

DistributionProject(String name, String baseDir, Version version, String classifier, String extension, File checkoutDir) {
static class DistributionProject {
final String name;
private final String projectPath;
private final File expectedDistFile;
private final File fallbackDistFile;
private final Version fallbackVersion;
private final File expandedDistDir;

DistributionProject(
String name,
String baseDir,
Version expectedVersion,
Version fallbackVersion,
String classifier,
String extension,
File checkoutDir
) {
this.name = name;
this.projectPath = baseDir + "/" + name;
this.expectedDistFile = buildDistFile(name, baseDir, expectedVersion, classifier, extension, checkoutDir);
this.fallbackDistFile = buildDistFile(name, baseDir, fallbackVersion, classifier, extension, checkoutDir);
this.fallbackVersion = fallbackVersion;
if (name.endsWith("zip") || name.endsWith("tar")) {
this.expandedDistDir = new File(checkoutDir, baseDir + "/" + name + "/build/install");
} else {
this.expandedDistDir = null;
}
}

private static File buildDistFile(
String name,
String baseDir,
Version version,
String classifier,
String extension,
File checkoutDir
) {
if (version.onOrAfter("1.1.0")) {
// Deb uses underscores (I don't know why...):
// https://github.com/opensearch-project/OpenSearch/blob/f6d9a86f0e2e8241fd58b7e8b6cdeaf931b5108f/distribution/packages/build.gradle#L139
final String separator = name.equals("deb") ? "_" : "-";
this.distFile = new File(
return new File(
checkoutDir,
baseDir
+ "/"
Expand All @@ -278,23 +337,27 @@ private static class DistributionProject {
+ extension
);
} else {
this.distFile = new File(
return new File(
checkoutDir,
baseDir + "/" + name + "/build/distributions/opensearch-" + version + "-SNAPSHOT" + classifier + "." + extension
);
}
// we only ported this down to the 7.x branch.
if (version.onOrAfter("7.10.0") && (name.endsWith("zip") || name.endsWith("tar"))) {
this.expandedDistDir = new File(checkoutDir, baseDir + "/" + name + "/build/install");
}
}

public String getProjectPath() {
return projectPath;
}

public File getDistFile() {
return distFile;
public File getExpectedDistFile() {
return expectedDistFile;
}

public File getFallbackDistFile() {
return fallbackDistFile;
}

public Version getFallbackVersion() {
return fallbackVersion;
}

public File getExpandedDistDirectory() {
Expand Down
Loading