Created
July 16, 2022 02:46
-
-
Save sbcd90/7754153b93948a2ff52edcd5318303e8 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
* Copyright OpenSearch Contributors | |
* SPDX-License-Identifier: Apache-2.0 | |
*/ | |
import org.opensearch.gradle.test.RestIntegTestTask | |
buildscript { | |
ext { | |
opensearch_version = System.getProperty("opensearch.version", "2.1.0") | |
common_utils_version = System.getProperty("common_utils.version", "${opensearch_version}.0") | |
isSnapshot = "true" == System.getProperty("build.snapshot", "true") | |
buildVersionQualifier = System.getProperty("build.version_qualifier", "") | |
version_tokens = opensearch_version.tokenize('-') | |
opensearch_build = version_tokens[0] + '.0' | |
plugin_no_snapshot = opensearch_build | |
opensearch_no_snapshot = opensearch_version.replace("-SNAPSHOT","") | |
} | |
repositories { | |
mavenLocal() | |
mavenCentral() | |
maven { url "https://aws.oss.sonatype.org/content/repositories/snapshots" } | |
} | |
dependencies { | |
classpath "org.opensearch.gradle:build-tools:${opensearch_version}" | |
} | |
} | |
plugins { | |
id 'nebula.ospackage' version "8.3.0" | |
id 'java-library' | |
} | |
apply plugin: 'opensearch.opensearchplugin' | |
apply plugin: 'opensearch.testclusters' | |
apply plugin: 'opensearch.java-rest-test' | |
apply plugin: 'opensearch.pluginzip' | |
apply from: 'build-tools/opensearchplugin-coverage.gradle' | |
ext { | |
projectSubstitutions = [:] | |
licenseFile = rootProject.file('LICENSE') | |
noticeFile = rootProject.file('NOTICE') | |
} | |
licenseHeaders.enabled = true | |
testingConventions.enabled = false | |
forbiddenApis.ignoreFailures = false | |
dependencyLicenses.enabled = false | |
thirdPartyAudit.enabled = false | |
forbiddenApisTest.ignoreFailures = true | |
validateNebulaPom.enabled = false | |
loggerUsageCheck.enabled = false | |
opensearchplugin { | |
name 'opensearch-security-analytics' | |
description 'OpenSearch Security Analytics plugin' | |
classname 'org.opensearch.securityanalytics.SecurityAnalyticsPlugin' | |
} | |
javaRestTest { | |
// add "-Dtests.security.manager=false" to VM options if you want to run integ tests in IntelliJ | |
systemProperty 'tests.security.manager', 'false' | |
} | |
testClusters.javaRestTest { | |
testDistribution = 'INTEG_TEST' | |
} | |
allprojects { | |
group = 'org.opensearch' | |
version = opensearch_version.tokenize('-')[0] + '.0' | |
if (buildVersionQualifier) { | |
version += "-${buildVersionQualifier}" | |
} | |
if (isSnapshot) { | |
version += "-SNAPSHOT" | |
} | |
apply from: "$rootDir/build-tools/repositories.gradle" | |
plugins.withId('java') { | |
targetCompatibility = JavaVersion.VERSION_11 | |
sourceCompatibility = JavaVersion.VERSION_11 | |
} | |
} | |
publishing { | |
publications { | |
pluginZip(MavenPublication) { publication -> | |
pom { | |
name = "opensearch-security-analytics" | |
description = "OpenSearch Security Analytics plugin" | |
licenses { | |
license { | |
name = "The Apache License, Version 2.0" | |
url = "http://www.apache.org/licenses/LICENSE-2.0.txt" | |
} | |
} | |
developers { | |
developer { | |
name = "OpenSearch" | |
url = "https://github.com/opensearch-project/security-analytics" | |
} | |
} | |
} | |
} | |
} | |
} | |
repositories { | |
mavenLocal() | |
mavenCentral() | |
maven { url "https://aws.oss.sonatype.org/content/repositories/snapshots" } | |
} | |
dependencies { | |
javaRestTestImplementation project.sourceSets.main.runtimeClasspath | |
implementation group: 'org.apache.commons', name: 'commons-lang3', version: '3.12.0' | |
//implementation 'org.opensearch:notification:1.3.3.0' | |
api group: 'org.opensearch', name: 'common-utils', version: "${common_utils_version}" | |
implementation group: 'org.opensearch.client', name: 'opensearch-rest-high-level-client', version: "${opensearch_version}" | |
implementation group: 'org.json', name: 'json', version: '20220320' | |
} | |
// RPM & Debian build | |
apply plugin: 'nebula.ospackage' | |
def es_tmp_dir = rootProject.file('build/private/es_tmp').absoluteFile | |
es_tmp_dir.mkdirs() | |
File repo = file("$buildDir/testclusters/repo") | |
def _numNodes = findProperty('numNodes') as Integer ?: 1 | |
def opensearch_tmp_dir = rootProject.file('build/private/opensearch_tmp').absoluteFile | |
opensearch_tmp_dir.mkdirs() | |
task integTest(type: RestIntegTestTask) { | |
description = "Run tests against a cluster" | |
testClassesDirs = sourceSets.test.output.classesDirs | |
classpath = sourceSets.test.runtimeClasspath | |
} | |
tasks.named("check").configure { dependsOn(integTest) } | |
integTest { | |
if (project.hasProperty('excludeTests')) { | |
project.properties['excludeTests']?.replaceAll('\\s', '')?.split('[,;]')?.each { | |
exclude "${it}" | |
} | |
} | |
systemProperty 'tests.security.manager', 'false' | |
systemProperty 'java.io.tmpdir', es_tmp_dir.absolutePath | |
systemProperty "https", System.getProperty("https") | |
systemProperty "user", System.getProperty("user") | |
systemProperty "password", System.getProperty("password") | |
// Tell the test JVM if the cluster JVM is running under a debugger so that tests can use longer timeouts for | |
// requests. The 'doFirst' delays reading the debug setting on the cluster till execution time. | |
doFirst { | |
// Tell the test JVM if the cluster JVM is running under a debugger so that tests can | |
// use longer timeouts for requests. | |
def isDebuggingCluster = getDebug() || System.getProperty("test.debug") != null | |
systemProperty 'cluster.debug', isDebuggingCluster | |
// Set number of nodes system property to be used in tests | |
systemProperty 'cluster.number_of_nodes', "${_numNodes}" | |
// There seems to be an issue when running multi node run or integ tasks with unicast_hosts | |
// not being written, the waitForAllConditions ensures it's written | |
getClusters().forEach { cluster -> | |
cluster.waitForAllConditions() | |
} | |
} | |
// The -Dcluster.debug option makes the cluster debuggable; this makes the tests debuggable | |
if (System.getProperty("test.debug") != null) { | |
jvmArgs '-agentlib:jdwp=transport=dt_socket,server=n,suspend=y,address=8000' | |
} | |
} | |
Zip bundle = (Zip) project.getTasks().getByName("bundlePlugin"); | |
integTest.dependsOn(bundle) | |
integTest.getClusters().forEach{c -> { | |
c.plugin(project.getObjects().fileProperty().value(bundle.getArchiveFile())) | |
}} | |
String alertingFilePath = "src/test/resources/alerting" | |
String alertingPlugin = "opensearch-alerting-" + plugin_no_snapshot + ".zip" | |
String alertingRemoteFile = "https://ci.opensearch.org/ci/dbc/distribution-build-opensearch/" + opensearch_no_snapshot + "/latest/linux/x64/tar/builds/opensearch/plugins/" + alertingPlugin | |
testClusters.integTest { | |
testDistribution = 'ARCHIVE' | |
// Cluster shrink exception thrown if we try to set numberOfNodes to 1, so only apply if > 1 | |
if (_numNodes > 1) numberOfNodes = _numNodes | |
// When running integration tests it doesn't forward the --debug-jvm to the cluster anymore | |
// i.e. we have to use a custom property to flag when we want to debug OpenSearch JVM | |
// since we also support multi node integration tests we increase debugPort per node | |
if (System.getProperty("cluster.debug") != null) { | |
def debugPort = 5005 | |
nodes.forEach { node -> | |
node.jvmArgs("-agentlib:jdwp=transport=dt_socket,server=n,suspend=y,address=*:${debugPort}") | |
debugPort += 1 | |
} | |
} | |
setting 'path.repo', repo.absolutePath | |
plugin(provider({ | |
new RegularFile() { | |
@Override | |
File getAsFile() { | |
File dir = new File(rootDir.path + "/" + alertingFilePath) | |
if (!dir.exists()) { | |
dir.mkdirs() | |
} | |
File f = new File(dir, alertingPlugin) | |
if (!f.exists()) { | |
new URL(alertingRemoteFile).withInputStream{ ins -> f.withOutputStream{ it << ins }} | |
} | |
fileTree(alertingFilePath).getSingleFile() | |
} | |
} | |
})) | |
} | |
run { | |
doFirst { | |
// There seems to be an issue when running multi node run or integ tasks with unicast_hosts | |
// not being written, the waitForAllConditions ensures it's written | |
getClusters().forEach { cluster -> | |
cluster.waitForAllConditions() | |
} | |
} | |
useCluster testClusters.integTest | |
} | |
task integTestRemote(type: RestIntegTestTask) { | |
testClassesDirs = sourceSets.test.output.classesDirs | |
classpath = sourceSets.test.runtimeClasspath | |
systemProperty 'tests.security.manager', 'false' | |
systemProperty 'java.io.tmpdir', opensearch_tmp_dir.absolutePath | |
systemProperty "https", System.getProperty("https") | |
systemProperty "security", System.getProperty("security") | |
systemProperty "user", System.getProperty("user") | |
systemProperty "password", System.getProperty("password") | |
if (System.getProperty("tests.rest.cluster") != null) { | |
filter { | |
includeTestsMatching "org.opensearch.securityanalytics.*RestIT" | |
} | |
} | |
} | |
integTestRemote.enabled = System.getProperty("tests.rest.cluster") != null | |
// This is afterEvaluate because the bundlePlugin ZIP task is updated afterEvaluate and changes the ZIP name to match the plugin name | |
afterEvaluate { | |
ospackage { | |
packageName = "${name}" | |
release = isSnapshot ? "0.1" : '1' | |
version = "${project.version}" | |
into '/usr/share/opensearch/plugins' | |
from(zipTree(bundlePlugin.archivePath)) { | |
into opensearchplugin.name | |
} | |
user 'root' | |
permissionGroup 'root' | |
fileMode 0644 | |
dirMode 0755 | |
requires('opensearch', versions.opensearch, EQUAL) | |
packager = 'Amazon' | |
vendor = 'Amazon' | |
os = 'LINUX' | |
prefix '/usr' | |
license 'ASL-2.0' | |
maintainer 'OpenSearch Team <[email protected]>' | |
url 'https://opensearch.org/downloads.html' | |
summary ''' | |
Security Analytics plugin for OpenSearch. | |
Reference documentation can be found at https://docs-beta.opensearch.org/. | |
'''.stripIndent().replace('\n', ' ').trim() | |
} | |
buildRpm { | |
arch = 'NOARCH' | |
dependsOn 'assemble' | |
finalizedBy 'renameRpm' | |
task renameRpm(type: Copy) { | |
from("$buildDir/distributions") | |
into("$buildDir/distributions") | |
include archiveName | |
rename archiveName, "${packageName}-${version}.rpm" | |
doLast { delete file("$buildDir/distributions/$archiveName") } | |
} | |
} | |
buildDeb { | |
arch = 'all' | |
dependsOn 'assemble' | |
finalizedBy 'renameDeb' | |
task renameDeb(type: Copy) { | |
from("$buildDir/distributions") | |
into("$buildDir/distributions") | |
include archiveName | |
rename archiveName, "${packageName}-${version}.deb" | |
doLast { delete file("$buildDir/distributions/$archiveName") } | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment