/* * Copyright OpenSearch Contributors * SPDX-License-Identifier: Apache-2.0 */ buildscript { ext { opensearch_version = System.getProperty("opensearch.version", "3.0.0-SNAPSHOT") isSnapshot = "true" == System.getProperty("build.snapshot", "true") buildVersionQualifier = System.getProperty("build.version_qualifier", "") version_tokens = opensearch_version.tokenize('-') opensearch_build = version_tokens[0] + '.0' prometheus_binary_version = "2.37.2" common_utils_version = System.getProperty("common_utils.version", opensearch_build) if (buildVersionQualifier) { opensearch_build += "-${buildVersionQualifier}" } if (isSnapshot) { // 2.0.0-rc1-SNAPSHOT -> 2.0.0.0-rc1-SNAPSHOT (opensearch_build) opensearch_build += "-SNAPSHOT" } getArchType = { if (System.getProperty("os.arch").startsWith("x") || System.getProperty("os.arch").startsWith("amd")) { return "amd64" } else { return "arm64" } } getOSFamilyType = { def os = org.gradle.internal.os.OperatingSystem.current(); if (os.isMacOsX()) { return "darwin" } else if(os.isLinux()){ return "linux" } else if(os.isWindows()) { return "windows" } else { return os.getFamilyName().toString() } } getPrometheusBinaryLocation = { -> return "https://github.com/prometheus/prometheus/releases/download/v${prometheus_binary_version}/prometheus-${prometheus_binary_version}."+ getOSFamilyType() + "-" + getArchType() + ".tar.gz" } } repositories { mavenLocal() maven { url "https://aws.oss.sonatype.org/content/repositories/snapshots" } mavenCentral() } dependencies { classpath "org.opensearch.gradle:build-tools:${opensearch_version}" } } plugins { id 'nebula.ospackage' version "8.3.0" id 'java-library' id 'checkstyle' id "io.freefair.lombok" version "6.4.0" id 'jacoco' id 'com.diffplug.spotless' version '6.19.0' } // import versions defined in https://github.com/opensearch-project/OpenSearch/blob/main/buildSrc/src/main/java/org/opensearch/gradle/OpenSearchJavaPlugin.java#L94 // versions https://github.com/opensearch-project/OpenSearch/blob/main/buildSrc/version.properties apply plugin: 'opensearch.java' // Repository on root level is for dependencies that project code depends on. And this block must be placed after plugins{} repositories { mavenLocal() maven { url "https://aws.oss.sonatype.org/content/repositories/snapshots" } mavenCentral() // For Elastic Libs that you can use to get started coding until open OpenSearch libs are available maven { url 'https://jitpack.io' } } // Spotless checks will be added as PRs are applied to resolve each style issue is approved. spotless { java { target fileTree('.') { include '**/*.java' exclude '**/build/**', '**/build-*/**' } importOrder() // licenseHeader("/*\n" + // " * Copyright OpenSearch Contributors\n" + // " * SPDX-License-Identifier: Apache-2.0\n" + // " */\n\n") removeUnusedImports() trimTrailingWhitespace() endWithNewline() // googleJavaFormat('1.17.0').reflowLongStrings().groupArtifact('com.google.googlejavaformat:google-java-format') } } allprojects { version = opensearch_version.tokenize('-')[0] + '.0' if (buildVersionQualifier) { version += "-${buildVersionQualifier}" } if (isSnapshot) { version += "-SNAPSHOT" } plugins.withId('java') { sourceCompatibility = targetCompatibility = "11" } configurations.all { resolutionStrategy.force "org.jetbrains.kotlin:kotlin-stdlib:1.6.0" resolutionStrategy.force "org.jetbrains.kotlin:kotlin-stdlib-common:1.6.0" } } subprojects { repositories { mavenLocal() maven { url "https://aws.oss.sonatype.org/content/repositories/snapshots" } mavenCentral() maven { url "https://d1nvenhzbhpy0q.cloudfront.net/snapshots/lucene/" } maven { url 'https://jitpack.io' } } } // TODO: fix compiler warnings compileJava.options.warnings = false compileJava { options.compilerArgs.addAll(["-processor", 'lombok.launch.AnnotationProcessorHider$AnnotationProcessor']) doFirst { // TODO: do not fail build on warnings, need to fix all compiler warnings options.compilerArgs.remove('-Werror') // TODO: need to fix all java doc format options.compilerArgs.remove('-Xdoclint:all') } } // TODO: Similarly, need to fix compiling errors in test source code compileTestJava.options.warnings = false compileTestJava { options.compilerArgs.addAll(["-processor", 'lombok.launch.AnnotationProcessorHider$AnnotationProcessor']) doFirst { options.compilerArgs.remove('-Werror') options.compilerArgs.remove('-Xdoclint:all') } } jacoco { toolVersion = "0.8.7" } jacocoTestReport { reports { xml.enabled false csv.enabled false } afterEvaluate { classDirectories.setFrom(files(classDirectories.files.collect { fileTree(dir: it, exclude: ['**/antlr/parser/**']) })) } } test.finalizedBy(project.tasks.jacocoTestReport) jacocoTestCoverageVerification { violationRules { rule { limit { minimum = 0.5 } } } afterEvaluate { classDirectories.setFrom(files(classDirectories.files.collect { fileTree(dir: it, exclude: ['**/antlr/parser/**']) })) } } check.dependsOn jacocoTestCoverageVerification // TODO: fix code style in main and test source code allprojects { apply plugin: 'checkstyle' checkstyle { configFile rootProject.file("config/checkstyle/google_checks.xml") toolVersion "10.3.2" configProperties = [ "org.checkstyle.google.suppressionfilter.config": rootProject.file("config/checkstyle/suppressions.xml")] ignoreFailures = false } } checkstyle { configFile file("config/checkstyle/checkstyle.xml") } checkstyleMain.ignoreFailures = false checkstyleTest.ignoreFailures = true configurations.all { resolutionStrategy.force 'junit:junit:4.13.2' exclude group: "commons-logging", module: "commons-logging" // enforce 1.1.3, https://www.whitesourcesoftware.com/vulnerability-database/WS-2019-0379 resolutionStrategy.force 'commons-codec:commons-codec:1.13' resolutionStrategy.force 'com.google.guava:guava:32.0.1-jre' } // updateVersion: Task to auto increment to the next development iteration task updateVersion { onlyIf { System.getProperty('newVersion') } doLast { ext.newVersion = System.getProperty('newVersion') println "Setting version to ${newVersion}." // String tokenization to support -SNAPSHOT ant.replaceregexp(file:'build.gradle', match: '"opensearch.version", "\\d.*"', replace: '"opensearch.version", "' + newVersion.tokenize('-')[0] + '-SNAPSHOT"', flags:'g', byline:true) ant.replaceregexp(match:'"version": "\\d+.\\d+.\\d+.\\d+', replace:'"version": ' + '"' + newVersion.tokenize('-')[0] + '.0', flags:'g', byline:true) { fileset(dir: projectDir) { include(name: "workbench/package.json") include(name: "workbench/opensearch_dashboards.json") } } ant.replaceregexp(file:'workbench/opensearch_dashboards.json', match:'"opensearchDashboardsVersion": "\\d+.\\d+.\\d+', replace:'"opensearchDashboardsVersion": ' + '"' + newVersion.tokenize('-')[0], flags:'g', byline:true) } }