mirror of
https://github.com/honeymoose/OpenSearch.git
synced 2025-03-03 09:29:11 +00:00
Merge pull request #14986 from rjernst/easier_plugin_install
Simplify adding plugins that are another project in the build
This commit is contained in:
commit
d89a201b5a
@ -18,6 +18,7 @@
|
|||||||
*/
|
*/
|
||||||
package org.elasticsearch.gradle.test
|
package org.elasticsearch.gradle.test
|
||||||
|
|
||||||
|
import org.gradle.api.Project
|
||||||
import org.gradle.api.file.FileCollection
|
import org.gradle.api.file.FileCollection
|
||||||
import org.gradle.api.tasks.Input
|
import org.gradle.api.tasks.Input
|
||||||
|
|
||||||
@ -64,7 +65,7 @@ class ClusterConfiguration {
|
|||||||
|
|
||||||
Map<String, String> settings = new HashMap<>()
|
Map<String, String> settings = new HashMap<>()
|
||||||
|
|
||||||
LinkedHashMap<String, FileCollection> plugins = new LinkedHashMap<>()
|
LinkedHashMap<String, Object> plugins = new LinkedHashMap<>()
|
||||||
|
|
||||||
LinkedHashMap<String, Object[]> setupCommands = new LinkedHashMap<>()
|
LinkedHashMap<String, Object[]> setupCommands = new LinkedHashMap<>()
|
||||||
|
|
||||||
@ -83,6 +84,11 @@ class ClusterConfiguration {
|
|||||||
plugins.put(name, file)
|
plugins.put(name, file)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Input
|
||||||
|
void plugin(String name, Project pluginProject) {
|
||||||
|
plugins.put(name, pluginProject)
|
||||||
|
}
|
||||||
|
|
||||||
@Input
|
@Input
|
||||||
void setupCommand(String name, Object... args) {
|
void setupCommand(String name, Object... args) {
|
||||||
setupCommands.put(name, args)
|
setupCommands.put(name, args)
|
||||||
|
@ -21,7 +21,9 @@ package org.elasticsearch.gradle.test
|
|||||||
import org.apache.tools.ant.DefaultLogger
|
import org.apache.tools.ant.DefaultLogger
|
||||||
import org.apache.tools.ant.taskdefs.condition.Os
|
import org.apache.tools.ant.taskdefs.condition.Os
|
||||||
import org.elasticsearch.gradle.VersionProperties
|
import org.elasticsearch.gradle.VersionProperties
|
||||||
|
import org.elasticsearch.gradle.plugin.PluginBuildPlugin
|
||||||
import org.gradle.api.*
|
import org.gradle.api.*
|
||||||
|
import org.gradle.api.artifacts.Configuration
|
||||||
import org.gradle.api.file.FileCollection
|
import org.gradle.api.file.FileCollection
|
||||||
import org.gradle.api.logging.Logger
|
import org.gradle.api.logging.Logger
|
||||||
import org.gradle.api.tasks.Copy
|
import org.gradle.api.tasks.Copy
|
||||||
@ -102,14 +104,11 @@ class ClusterFormationTasks {
|
|||||||
setup = configureCopyPluginsTask(taskName(task, node, 'copyPlugins'), project, setup, node)
|
setup = configureCopyPluginsTask(taskName(task, node, 'copyPlugins'), project, setup, node)
|
||||||
|
|
||||||
// install plugins
|
// install plugins
|
||||||
for (Map.Entry<String, FileCollection> plugin : node.config.plugins.entrySet()) {
|
for (Map.Entry<String, Object> plugin : node.config.plugins.entrySet()) {
|
||||||
// replace every dash followed by a character with just the uppercase character
|
// replace every dash followed by a character with just the uppercase character
|
||||||
String camelName = plugin.getKey().replaceAll(/-(\w)/) { _, c -> c.toUpperCase(Locale.ROOT) }
|
String camelName = plugin.getKey().replaceAll(/-(\w)/) { _, c -> c.toUpperCase(Locale.ROOT) }
|
||||||
String actionName = "install${camelName[0].toUpperCase(Locale.ROOT) + camelName.substring(1)}Plugin"
|
String actionName = "install${camelName[0].toUpperCase(Locale.ROOT) + camelName.substring(1)}Plugin"
|
||||||
// delay reading the file location until execution time by wrapping in a closure within a GString
|
setup = configureInstallPluginTask(taskName(task, node, actionName), project, setup, node, plugin.getValue())
|
||||||
String file = "${-> new File(node.pluginsTmpDir, plugin.getValue().singleFile.getName()).toURI().toURL().toString()}"
|
|
||||||
Object[] args = [new File(node.homeDir, 'bin/plugin'), 'install', file]
|
|
||||||
setup = configureExecTask(taskName(task, node, actionName), project, setup, node, args)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// extra setup commands
|
// extra setup commands
|
||||||
@ -183,12 +182,44 @@ class ClusterFormationTasks {
|
|||||||
return setup
|
return setup
|
||||||
}
|
}
|
||||||
|
|
||||||
|
List<FileCollection> pluginFiles = []
|
||||||
|
for (Object plugin : node.config.plugins.values()) {
|
||||||
|
if (plugin instanceof Project) {
|
||||||
|
Project pluginProject = plugin
|
||||||
|
if (pluginProject.plugins.hasPlugin(PluginBuildPlugin) == false) {
|
||||||
|
throw new GradleException("Task ${name} cannot project ${pluginProject.path} which is not an esplugin")
|
||||||
|
}
|
||||||
|
String configurationName = "_plugin_${pluginProject.path}"
|
||||||
|
Configuration configuration = project.configurations.findByName(configurationName)
|
||||||
|
if (configuration == null) {
|
||||||
|
configuration = project.configurations.create(configurationName)
|
||||||
|
}
|
||||||
|
project.dependencies.add(configurationName, pluginProject)
|
||||||
|
setup.dependsOn(pluginProject.tasks.bundlePlugin)
|
||||||
|
plugin = configuration
|
||||||
|
}
|
||||||
|
pluginFiles.add(plugin)
|
||||||
|
}
|
||||||
|
|
||||||
return project.tasks.create(name: name, type: Copy, dependsOn: setup) {
|
return project.tasks.create(name: name, type: Copy, dependsOn: setup) {
|
||||||
into node.pluginsTmpDir
|
into node.pluginsTmpDir
|
||||||
from(node.config.plugins.values())
|
from(pluginFiles)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static Task configureInstallPluginTask(String name, Project project, Task setup, NodeInfo node, Object plugin) {
|
||||||
|
FileCollection pluginZip
|
||||||
|
if (plugin instanceof Project) {
|
||||||
|
pluginZip = project.configurations.getByName("_plugin_${plugin.path}")
|
||||||
|
} else {
|
||||||
|
pluginZip = plugin
|
||||||
|
}
|
||||||
|
// delay reading the file location until execution time by wrapping in a closure within a GString
|
||||||
|
String file = "${-> new File(node.pluginsTmpDir, pluginZip.singleFile.getName()).toURI().toURL().toString()}"
|
||||||
|
Object[] args = [new File(node.homeDir, 'bin/plugin'), 'install', file]
|
||||||
|
return configureExecTask(name, project, setup, node, args)
|
||||||
|
}
|
||||||
|
|
||||||
/** Adds a task to execute a command to help setup the cluster */
|
/** Adds a task to execute a command to help setup the cluster */
|
||||||
static Task configureExecTask(String name, Project project, Task setup, NodeInfo node, Object[] execArgs) {
|
static Task configureExecTask(String name, Project project, Task setup, NodeInfo node, Object[] execArgs) {
|
||||||
return project.tasks.create(name: name, type: Exec, dependsOn: setup) {
|
return project.tasks.create(name: name, type: Exec, dependsOn: setup) {
|
||||||
|
@ -67,7 +67,9 @@ class RestIntegTestTask extends RandomizedTestingTask {
|
|||||||
}
|
}
|
||||||
|
|
||||||
RestIntegTestTask() {
|
RestIntegTestTask() {
|
||||||
project.afterEvaluate {
|
// this must run after all projects have been configured, so we know any project
|
||||||
|
// references can be accessed as a fully configured
|
||||||
|
project.gradle.projectsEvaluated {
|
||||||
Task test = project.tasks.findByName('test')
|
Task test = project.tasks.findByName('test')
|
||||||
if (test != null) {
|
if (test != null) {
|
||||||
mustRunAfter(test)
|
mustRunAfter(test)
|
||||||
|
@ -25,10 +25,9 @@ ext.pluginCount = 0
|
|||||||
for (Project subproj : project.rootProject.subprojects) {
|
for (Project subproj : project.rootProject.subprojects) {
|
||||||
if (subproj.path.startsWith(':plugins:')) {
|
if (subproj.path.startsWith(':plugins:')) {
|
||||||
integTest {
|
integTest {
|
||||||
def bundlePlugin = subproj.tasks.findByName('bundlePlugin')
|
|
||||||
dependsOn bundlePlugin
|
|
||||||
cluster {
|
cluster {
|
||||||
plugin subproj.name, bundlePlugin.outputs.files
|
// need to get a non-decorated project object, so must re-lookup the project by path
|
||||||
|
plugin subproj.name, project(subproj.path)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
pluginCount += 1
|
pluginCount += 1
|
||||||
|
Loading…
x
Reference in New Issue
Block a user