Skip to content

Commit 9841168

Browse files
committed
update
1 parent 1de3d1d commit 9841168

File tree

3 files changed

+81
-89
lines changed

3 files changed

+81
-89
lines changed

build-tools/src/main/java/org/elasticsearch/gradle/plugin/BasePluginBuildPlugin.java

Lines changed: 21 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -76,48 +76,7 @@ public void apply(final Project project) {
7676
var extension = project.getExtensions()
7777
.create(BasePluginBuildPlugin.PLUGIN_EXTENSION_NAME, PluginPropertiesExtension.class, project);
7878

79-
final var buildProperties = project.getTasks().register("pluginProperties", GeneratePluginPropertiesTask.class, task -> {
80-
task.getPluginName().set(providerFactory.provider(extension::getName));
81-
task.getPluginDescription().set(providerFactory.provider(extension::getDescription));
82-
task.getPluginVersion().set(providerFactory.provider(extension::getVersion));
83-
task.getElasticsearchVersion().set(Version.fromString(VersionProperties.getElasticsearch()).toString());
84-
var javaExtension = project.getExtensions().getByType(JavaPluginExtension.class);
85-
task.getJavaVersion().set(providerFactory.provider(() -> javaExtension.getTargetCompatibility().toString()));
86-
task.getExtendedPlugins().set(providerFactory.provider(extension::getExtendedPlugins));
87-
task.getHasNativeController().set(providerFactory.provider(extension::isHasNativeController));
88-
task.getRequiresKeystore().set(providerFactory.provider(extension::isRequiresKeystore));
89-
task.getIsLicensed().set(providerFactory.provider(extension::isLicensed));
90-
91-
var mainSourceSet = project.getExtensions().getByType(SourceSetContainer.class).getByName(SourceSet.MAIN_SOURCE_SET_NAME);
92-
FileCollection moduleInfoFile = mainSourceSet.getOutput().getAsFileTree().matching(p -> p.include("module-info.class"));
93-
task.getModuleInfoFile().setFrom(moduleInfoFile);
94-
});
95-
final var testDependencies = project.getTasks()
96-
.register("generatePluginTestDependencies", GeneratePluginTestDependenciesTask.class, task -> {
97-
task.getDescriptorFile().set(buildProperties.get().getOutputFile().get().getAsFile());
98-
var policy = project.getLayout().getProjectDirectory().file("src/main/plugin-metadata/entitlement-policy.yaml");
99-
if (policy.getAsFile().exists()) {
100-
task.getPolicyFile().set(policy);
101-
}
102-
task.getJarFiles()
103-
.set(
104-
project.getConfigurations()
105-
.getByName("runtimeClasspath")
106-
.minus(
107-
project.getConfigurations().getByName(CompileOnlyResolvePlugin.RESOLVEABLE_COMPILE_ONLY_CONFIGURATION_NAME)
108-
)
109-
);
110-
task.getClassDirectories()
111-
.set(
112-
project.getExtensions()
113-
.getByType(SourceSetContainer.class)
114-
.stream()
115-
.flatMap(ss -> ss.getOutput().getClassesDirs().getFiles().stream())
116-
.map(File::getAbsolutePath)
117-
.toList()
118-
);
119-
});
120-
final var bundleTask = createBundleTasks(buildProperties, testDependencies, project, extension);
79+
final var bundleTask = createBundleTasks(project, extension);
12180
project.getConfigurations().getByName("default").extendsFrom(project.getConfigurations().getByName("runtimeClasspath"));
12281

12382
// allow running ES with this plugin in the foreground of a build
@@ -146,14 +105,26 @@ private static NamedDomainObjectContainer<ElasticsearchCluster> testClusters(Pro
146105
* Adds bundle tasks which builds the dir and zip containing the plugin jars,
147106
* metadata, properties, and packaging files
148107
*/
149-
private TaskProvider<Zip> createBundleTasks(
150-
final TaskProvider<GeneratePluginPropertiesTask> buildProperties,
151-
final TaskProvider<GeneratePluginTestDependenciesTask> testDependencies,
152-
final Project project,
153-
PluginPropertiesExtension extension
154-
) {
108+
private TaskProvider<Zip> createBundleTasks(final Project project, PluginPropertiesExtension extension) {
155109
final var pluginMetadata = project.file("src/main/plugin-metadata");
156110

111+
final var buildProperties = project.getTasks().register("pluginProperties", GeneratePluginPropertiesTask.class, task -> {
112+
task.getPluginName().set(providerFactory.provider(extension::getName));
113+
task.getPluginDescription().set(providerFactory.provider(extension::getDescription));
114+
task.getPluginVersion().set(providerFactory.provider(extension::getVersion));
115+
task.getElasticsearchVersion().set(Version.fromString(VersionProperties.getElasticsearch()).toString());
116+
var javaExtension = project.getExtensions().getByType(JavaPluginExtension.class);
117+
task.getJavaVersion().set(providerFactory.provider(() -> javaExtension.getTargetCompatibility().toString()));
118+
task.getExtendedPlugins().set(providerFactory.provider(extension::getExtendedPlugins));
119+
task.getHasNativeController().set(providerFactory.provider(extension::isHasNativeController));
120+
task.getRequiresKeystore().set(providerFactory.provider(extension::isRequiresKeystore));
121+
task.getIsLicensed().set(providerFactory.provider(extension::isLicensed));
122+
123+
var mainSourceSet = project.getExtensions().getByType(SourceSetContainer.class).getByName(SourceSet.MAIN_SOURCE_SET_NAME);
124+
FileCollection moduleInfoFile = mainSourceSet.getOutput().getAsFileTree().matching(p -> p.include("module-info.class"));
125+
task.getModuleInfoFile().setFrom(moduleInfoFile);
126+
127+
});
157128
// add the plugin properties and metadata to test resources, so unit tests can
158129
// know about the plugin (used by test security code to statically initialize the plugin in unit tests)
159130
var testSourceSet = project.getExtensions().getByType(SourceSetContainer.class).getByName("test");
@@ -179,7 +150,7 @@ private TaskProvider<Zip> createBundleTasks(
179150
});
180151
project.getArtifacts().add("pluginMetadata", pluginMetadata);
181152
// getAttributes().attribute(ArtifactTypeDefinition.ARTIFACT_TYPE_ATTRIBUTE, "plugin-metadata");
182-
var bundleSpec = createBundleSpec(project, pluginMetadata, buildProperties, testDependencies);
153+
var bundleSpec = createBundleSpec(project, pluginMetadata, buildProperties);
183154
extension.setBundleSpec(bundleSpec);
184155
// create the actual bundle task, which zips up all the files for the plugin
185156
final var bundle = project.getTasks().register("bundlePlugin", Zip.class, zip -> zip.with(bundleSpec));
@@ -208,12 +179,10 @@ private TaskProvider<Zip> createBundleTasks(
208179
private static CopySpec createBundleSpec(
209180
Project project,
210181
File pluginMetadata,
211-
TaskProvider<GeneratePluginPropertiesTask> buildProperties,
212-
TaskProvider<GeneratePluginTestDependenciesTask> testDependencies
182+
TaskProvider<GeneratePluginPropertiesTask> buildProperties
213183
) {
214184
var bundleSpec = project.copySpec();
215185
bundleSpec.from(buildProperties);
216-
bundleSpec.from(testDependencies);
217186
bundleSpec.from(pluginMetadata, copySpec -> {
218187
// metadata (eg custom security policy)
219188
// the codebases properties file is only for tests and not needed in production
Lines changed: 29 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,15 @@
1010
package org.elasticsearch.gradle.plugin;
1111

1212
import org.gradle.api.DefaultTask;
13+
import org.gradle.api.file.DirectoryProperty;
1314
import org.gradle.api.file.FileCollection;
1415
import org.gradle.api.file.RegularFileProperty;
15-
import org.gradle.api.provider.ListProperty;
1616
import org.gradle.api.provider.Property;
1717
import org.gradle.api.tasks.Input;
1818
import org.gradle.api.tasks.InputFile;
1919
import org.gradle.api.tasks.InputFiles;
2020
import org.gradle.api.tasks.Optional;
21-
import org.gradle.api.tasks.OutputFile;
21+
import org.gradle.api.tasks.OutputDirectory;
2222
import org.gradle.api.tasks.TaskAction;
2323

2424
import java.io.File;
@@ -27,36 +27,45 @@
2727
import java.nio.file.Files;
2828
import java.nio.file.Path;
2929

30-
public abstract class GeneratePluginTestDependenciesTask extends DefaultTask {
30+
// TODO: 3 sets - testBuildInfo, internalClusterTest, external (as dependency of another)
31+
32+
public abstract class GenerateTestBuildInfoTask extends DefaultTask {
3133

3234
public static final String DESCRIPTION = "generates plugin test dependencies file";
33-
public static final String PROPERTIES_FILENAME = "plugin-test-dependencies.properties";
35+
public static final String PROPERTIES_FILENAME = "test-build-info.json";
3436

35-
public GeneratePluginTestDependenciesTask() {
37+
public GenerateTestBuildInfoTask() {
3638
setDescription(DESCRIPTION);
3739
}
3840

41+
@Input
42+
public abstract Property<String> getComponentName();
43+
3944
@InputFile
45+
@Optional
4046
public abstract RegularFileProperty getDescriptorFile();
4147

4248
@InputFile
4349
@Optional
4450
public abstract RegularFileProperty getPolicyFile();
4551

4652
@InputFiles
47-
public abstract Property<FileCollection> getJarFiles();
53+
public abstract Property<FileCollection> getCodeLocations();
4854

49-
@Input
50-
public abstract ListProperty<String> getClassDirectories();
51-
52-
@OutputFile
53-
public abstract RegularFileProperty getOutputFile();
55+
@OutputDirectory
56+
public abstract DirectoryProperty getOutputDirectory();
5457

5558
@TaskAction
5659
public void generatePropertiesFile() throws IOException {
57-
Path outputFile = getOutputFile().get().getAsFile().toPath();
58-
Files.createDirectories(outputFile.getParent());
60+
Path outputDirectory = getOutputDirectory().get().getAsFile().toPath();
61+
Files.createDirectories(outputDirectory);
62+
Path outputFile = outputDirectory.resolve(PROPERTIES_FILENAME);
63+
5964
try (var writer = Files.newBufferedWriter(outputFile, StandardCharsets.UTF_8)) {
65+
writer.write("name=");
66+
writer.write(getComponentName().get());
67+
writer.write("\n");
68+
6069
writer.write("descriptor=");
6170
writer.write(getDescriptorFile().getAsFile().get().getAbsolutePath());
6271
writer.write("\n");
@@ -67,27 +76,14 @@ public void generatePropertiesFile() throws IOException {
6776
writer.write("\n");
6877
}
6978

70-
if (getJarFiles().get().isEmpty() == false) {
71-
writer.write("jars=");
72-
StringBuilder sb = new StringBuilder();
73-
for (File jar : getJarFiles().get()) {
74-
sb.append(jar.getAbsolutePath());
75-
sb.append(":");
76-
}
77-
writer.write(sb.substring(0, sb.length() - 1));
78-
writer.write("\n");
79-
}
80-
81-
if (getClassDirectories().get().isEmpty() == false) {
82-
writer.write("directories=");
83-
StringBuilder sb = new StringBuilder();
84-
for (String sd : getClassDirectories().get()) {
85-
sb.append(sd);
86-
sb.append(":");
87-
}
88-
writer.write(sb.substring(0, sb.length() - 1));
89-
writer.write("\n");
79+
writer.write("locations=");
80+
StringBuilder sb = new StringBuilder();
81+
for (File jar : getCodeLocations().get()) {
82+
sb.append(jar.getAbsolutePath());
83+
sb.append(":");
9084
}
85+
writer.write(sb.substring(0, sb.length() - 1));
86+
writer.write("\n");
9187
}
9288
}
9389
}

build-tools/src/main/java/org/elasticsearch/gradle/plugin/PluginBuildPlugin.java

Lines changed: 31 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,15 @@
1010
package org.elasticsearch.gradle.plugin;
1111

1212
import org.elasticsearch.gradle.VersionProperties;
13+
import org.elasticsearch.gradle.dependencies.CompileOnlyResolvePlugin;
1314
import org.gradle.api.Plugin;
1415
import org.gradle.api.Project;
16+
import org.gradle.api.file.Directory;
1517
import org.gradle.api.file.RegularFile;
1618
import org.gradle.api.provider.Provider;
1719
import org.gradle.api.provider.ProviderFactory;
20+
import org.gradle.api.tasks.SourceSet;
21+
import org.gradle.api.tasks.SourceSetContainer;
1822

1923
import javax.inject.Inject;
2024

@@ -51,11 +55,34 @@ public void apply(final Project project) {
5155
task.getOutputFile().set(file);
5256
});
5357

54-
project.getTasks().withType(GeneratePluginTestDependenciesTask.class).named("generatePluginTestDependencies").configure(task -> {
55-
Provider<RegularFile> file = project.getLayout()
58+
SourceSetContainer sourceSets = project.getExtensions().getByType(SourceSetContainer.class);
59+
60+
var testBuildInfoTask = project.getTasks().register("generateTestBuildInfo", GenerateTestBuildInfoTask.class, task -> {
61+
var pluginProperties = project.getTasks().getByName("pluginProperties");
62+
task.getDescriptorFile().set(pluginProperties.getOutputs().getFiles().getSingleFile());
63+
var propertiesExtension = project.getExtensions().getByType(PluginPropertiesExtension.class);
64+
task.getComponentName().set(providerFactory.provider(propertiesExtension::getName));
65+
var policy = project.getLayout().getProjectDirectory().file("src/main/plugin-metadata/entitlement-policy.yaml");
66+
if (policy.getAsFile().exists()) {
67+
task.getPolicyFile().set(policy);
68+
}
69+
task.getCodeLocations().set(
70+
project.getConfigurations()
71+
.getByName("runtimeClasspath")
72+
.minus(project.getConfigurations().getByName(CompileOnlyResolvePlugin.RESOLVEABLE_COMPILE_ONLY_CONFIGURATION_NAME))
73+
.plus(sourceSets.getByName(SourceSet.MAIN_SOURCE_SET_NAME).getOutput().getClassesDirs())
74+
.plus(sourceSets.getByName(SourceSet.TEST_SOURCE_SET_NAME).getOutput().getClassesDirs())
75+
);
76+
77+
Provider<Directory> directory = project.getLayout()
5678
.getBuildDirectory()
57-
.file("generated-test-dependencies/" + GeneratePluginTestDependenciesTask.PROPERTIES_FILENAME);
58-
task.getOutputFile().set(file);
79+
.dir("generated-build-info/test");
80+
task.getOutputDirectory().set(directory);
81+
});
82+
83+
84+
sourceSets.named(SourceSet.TEST_SOURCE_SET_NAME).configure(sourceSet -> {
85+
sourceSet.getResources().srcDir(testBuildInfoTask);
5986
});
6087
}
6188

0 commit comments

Comments
 (0)