[BUG] SymbolicLinkPreservingUntarTransform fails on Windows (#1433)
Signed-off-by: Andriy Redko <andriy.redko@aiven.io>
This commit is contained in:
parent
8394f541bc
commit
f469d53cff
|
@ -34,18 +34,22 @@ package org.opensearch.gradle.internal;
|
||||||
|
|
||||||
import org.opensearch.gradle.EmptyDirTask;
|
import org.opensearch.gradle.EmptyDirTask;
|
||||||
import org.opensearch.gradle.tar.SymbolicLinkPreservingTar;
|
import org.opensearch.gradle.tar.SymbolicLinkPreservingTar;
|
||||||
|
import org.gradle.api.Action;
|
||||||
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.Task;
|
||||||
import org.gradle.api.artifacts.type.ArtifactTypeDefinition;
|
import org.gradle.api.artifacts.type.ArtifactTypeDefinition;
|
||||||
import org.gradle.api.plugins.BasePlugin;
|
import org.gradle.api.plugins.BasePlugin;
|
||||||
|
import org.gradle.api.logging.Logger;
|
||||||
|
import org.gradle.api.logging.Logging;
|
||||||
import org.gradle.api.tasks.AbstractCopyTask;
|
import org.gradle.api.tasks.AbstractCopyTask;
|
||||||
import org.gradle.api.tasks.Sync;
|
import org.gradle.api.tasks.Sync;
|
||||||
import org.gradle.api.tasks.TaskContainer;
|
import org.gradle.api.tasks.TaskContainer;
|
||||||
import org.gradle.api.tasks.bundling.AbstractArchiveTask;
|
import org.gradle.api.tasks.bundling.AbstractArchiveTask;
|
||||||
import org.gradle.api.tasks.bundling.Compression;
|
import org.gradle.api.tasks.bundling.Compression;
|
||||||
import org.gradle.api.tasks.bundling.Zip;
|
import org.gradle.api.tasks.bundling.Zip;
|
||||||
|
import org.gradle.internal.os.OperatingSystem;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
|
||||||
import static org.opensearch.gradle.util.Util.capitalize;
|
import static org.opensearch.gradle.util.Util.capitalize;
|
||||||
|
@ -66,6 +70,7 @@ import static org.gradle.api.internal.artifacts.ArtifactAttributes.ARTIFACT_FORM
|
||||||
* 4. Having per-distribution sub-projects means we can build them in parallel.
|
* 4. Having per-distribution sub-projects means we can build them in parallel.
|
||||||
*/
|
*/
|
||||||
public class InternalDistributionArchiveSetupPlugin implements Plugin<Project> {
|
public class InternalDistributionArchiveSetupPlugin implements Plugin<Project> {
|
||||||
|
private static final Logger LOGGER = Logging.getLogger(InternalDistributionArchiveSetupPlugin.class);
|
||||||
|
|
||||||
public static final String DEFAULT_CONFIGURATION_NAME = "default";
|
public static final String DEFAULT_CONFIGURATION_NAME = "default";
|
||||||
public static final String EXTRACTED_CONFIGURATION_NAME = "extracted";
|
public static final String EXTRACTED_CONFIGURATION_NAME = "extracted";
|
||||||
|
@ -80,16 +85,39 @@ public class InternalDistributionArchiveSetupPlugin implements Plugin<Project> {
|
||||||
configureTarDefaults(project);
|
configureTarDefaults(project);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private Action<Task> configure(String name) {
|
||||||
|
return (Task task) -> task.onlyIf(s -> {
|
||||||
|
if (OperatingSystem.current().isWindows()) {
|
||||||
|
// On Windows, include only Windows distributions and integTestZip
|
||||||
|
final String nameLowerCased = name.toLowerCase();
|
||||||
|
final boolean skip = !(nameLowerCased.contains("windows") || nameLowerCased.contains("integtest"));
|
||||||
|
|
||||||
|
if (skip) {
|
||||||
|
LOGGER.info("Skipping task " + name + " since it does not match current OS platform");
|
||||||
|
}
|
||||||
|
|
||||||
|
return !skip;
|
||||||
|
} else {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
private void registerAndConfigureDistributionArchivesExtension(Project project) {
|
private void registerAndConfigureDistributionArchivesExtension(Project project) {
|
||||||
container = project.container(DistributionArchive.class, name -> {
|
container = project.container(DistributionArchive.class, name -> {
|
||||||
var subProjectDir = archiveToSubprojectName(name);
|
var subProjectDir = archiveToSubprojectName(name);
|
||||||
var copyDistributionTaskName = "build" + capitalize(name.substring(0, name.length() - 3));
|
var copyDistributionTaskName = "build" + capitalize(name.substring(0, name.length() - 3));
|
||||||
TaskContainer tasks = project.getTasks();
|
TaskContainer tasks = project.getTasks();
|
||||||
var explodedDist = tasks.register(copyDistributionTaskName, Sync.class, sync -> sync.into(subProjectDir + "/build/install/"));
|
var explodedDist = tasks.register(copyDistributionTaskName, Sync.class, sync -> sync.into(subProjectDir + "/build/install/"));
|
||||||
|
explodedDist.configure(configure(name));
|
||||||
var archiveTaskName = "build" + capitalize(name);
|
var archiveTaskName = "build" + capitalize(name);
|
||||||
return name.endsWith("Tar")
|
|
||||||
? new DistributionArchive(tasks.register(archiveTaskName, SymbolicLinkPreservingTar.class), explodedDist, name)
|
var archiveTask = name.endsWith("Tar")
|
||||||
: new DistributionArchive(tasks.register(archiveTaskName, Zip.class), explodedDist, name);
|
? tasks.register(archiveTaskName, SymbolicLinkPreservingTar.class)
|
||||||
|
: tasks.register(archiveTaskName, Zip.class);
|
||||||
|
archiveTask.configure(configure(name));
|
||||||
|
|
||||||
|
return new DistributionArchive(archiveTask, explodedDist, name);
|
||||||
});
|
});
|
||||||
// Each defined distribution archive is linked to a subproject.
|
// Each defined distribution archive is linked to a subproject.
|
||||||
// A distribution archive definition not matching a sub project will result in build failure.
|
// A distribution archive definition not matching a sub project will result in build failure.
|
||||||
|
|
|
@ -16,6 +16,8 @@ import org.opensearch.gradle.VersionProperties
|
||||||
import org.opensearch.gradle.docker.DockerBuildTask
|
import org.opensearch.gradle.docker.DockerBuildTask
|
||||||
import org.opensearch.gradle.info.BuildParams
|
import org.opensearch.gradle.info.BuildParams
|
||||||
import org.opensearch.gradle.testfixtures.TestFixturesPlugin
|
import org.opensearch.gradle.testfixtures.TestFixturesPlugin
|
||||||
|
import org.gradle.internal.os.OperatingSystem
|
||||||
|
|
||||||
apply plugin: 'opensearch.standalone-rest-test'
|
apply plugin: 'opensearch.standalone-rest-test'
|
||||||
apply plugin: 'opensearch.test.fixtures'
|
apply plugin: 'opensearch.test.fixtures'
|
||||||
apply plugin: 'opensearch.internal-distribution-download'
|
apply plugin: 'opensearch.internal-distribution-download'
|
||||||
|
@ -183,7 +185,7 @@ void addBuildDockerImage(Architecture architecture, DockerBase base) {
|
||||||
|
|
||||||
final TaskProvider<DockerBuildTask> buildDockerImageTask =
|
final TaskProvider<DockerBuildTask> buildDockerImageTask =
|
||||||
tasks.register(taskName("build", architecture, base, "DockerImage"), DockerBuildTask) {
|
tasks.register(taskName("build", architecture, base, "DockerImage"), DockerBuildTask) {
|
||||||
onlyIf { Architecture.current() == architecture }
|
onlyIf { Architecture.current() == architecture && !OperatingSystem.current().isWindows() }
|
||||||
TaskProvider<Sync> copyContextTask = tasks.named(taskName("copy", architecture, base, "DockerContext"))
|
TaskProvider<Sync> copyContextTask = tasks.named(taskName("copy", architecture, base, "DockerContext"))
|
||||||
dependsOn(copyContextTask)
|
dependsOn(copyContextTask)
|
||||||
dockerContext.fileProvider(copyContextTask.map { it.destinationDir })
|
dockerContext.fileProvider(copyContextTask.map { it.destinationDir })
|
||||||
|
@ -246,7 +248,7 @@ subprojects { Project subProject ->
|
||||||
"opensearch:test"
|
"opensearch:test"
|
||||||
|
|
||||||
dependsOn(parent.path + ":" + buildTaskName)
|
dependsOn(parent.path + ":" + buildTaskName)
|
||||||
onlyIf { Architecture.current() == architecture }
|
onlyIf { Architecture.current() == architecture && !OperatingSystem.current().isWindows()}
|
||||||
}
|
}
|
||||||
|
|
||||||
artifacts.add('default', file(tarFile)) {
|
artifacts.add('default', file(tarFile)) {
|
||||||
|
|
Loading…
Reference in New Issue