blob: 9ef807ad9785459af82f3f58c0cc499a9e721a83 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import io.franzbecker.gradle.lombok.task.DelombokTask
buildscript {
repositories {
mavenCentral()
}
}
plugins {
id "org.jetbrains.gradle.plugin.idea-ext"
id 'java'
id "com.github.vlsi.stage-vote-release" version "1.77"
id 'checkstyle'
id 'org.nosphere.apache.rat'
id 'com.github.spotbugs'
id 'org.owasp.dependencycheck'
id 'io.franzbecker.gradle-lombok' version "5.0.0"
}
subprojects {
task allDeps(type: DependencyReportTask) {}
}
apply from: "$rootDir/version.gradle"
version = buildVersion
releaseArtifacts {
fromProject("bookkeeper-dist")
fromProject("bookkeeper-dist-all")
fromProject("bookkeeper-dist-bkctl")
fromProject("bookkeeper-dist-server")
tasks.withType(Jar) {
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
}
tasks.withType(Tar) {
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
}
tasks.withType(Zip) {
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
}
}
releaseParams { // ReleaseExtension
tlp.set("Bookkeeper")
componentName.set("Apache Bookkeeper")
releaseTag.set("release-$buildVersion")
rcTag.set(rc.map { "release-$buildVersion-rc$it" })
sitePreviewEnabled.set(false)
nexus {
packageGroup.set("org.apache.bookkeeper")
}
}
def skipDepCheck = []
allprojects {
if (it.path.startsWith(':tests')) {
skipDepCheck << it.path
}
}
allprojects {
apply from: "$rootDir/dependencies.gradle"
if (it.path != ':circe-checksum:src:main:circe'
&& it.path != ':cpu-affinity:src:main:affinity'
&& it.name != 'src'
&& it.name != 'main') {
apply plugin: 'java'
apply plugin: 'maven-publish'
apply plugin: 'signing'
apply plugin: 'org.nosphere.apache.rat'
apply plugin: "checkstyle"
apply plugin: 'com.github.spotbugs'
if (!it.path.startsWith(':tests')) {
apply plugin: 'org.owasp.dependencycheck'
dependencyCheck {
// see https://jeremylong.github.io/DependencyCheck/dependency-check-gradle/configuration.html
// for configuration properties
suppressionFile = "$rootDir/src/owasp-dependency-check-suppressions.xml"
skipProjects = skipDepCheck
skipConfigurations = ["checkstyle", "spotbugs"]
failBuildOnCVSS = 7
analyzers {
msbuildEnabled = false
rubygemsEnabled = false
pyDistributionEnabled = false
pyPackageEnabled = false
nuspecEnabled = false
nugetconfEnabled = false
assemblyEnabled = false
cmakeEnabled = false
composerEnabled = false
cpanEnabled = false
nodeEnabled = false
cocoapodsEnabled = false
swiftEnabled = false
swiftPackageResolvedEnabled = false
bundleAuditEnabled = false
golangDepEnabled = false
golangModEnabled = false
nodeAudit.enabled = false
retirejs.enabled = false
}
}
}
checkstyle {
toolVersion "${checkStyleVersion}"
configFile file("$rootDir/buildtools/src/main/resources/bookkeeper/checkstyle.xml")
configDirectory = file("$rootDir/buildtools/src/main/resources/bookkeeper")
checkstyleMain {
source ='src/main/java'
}
checkstyleTest {
source ='src/test/java'
}
}
spotbugs {
excludeFilter = file("$rootDir/buildtools/src/main/resources/bookkeeper/findbugsExclude.xml")
reportLevel = 'high'
spotbugsTest.enabled = false
}
tasks.withType(Jar) {
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
}
tasks.withType(Tar) {
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
}
tasks.withType(Zip) {
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
}
task testJar(type: Jar, dependsOn: testClasses) {
archiveClassifier = 'tests'
from sourceSets.test.output
}
// TODO- Separate rat plugins and other plugins configuration in separate files
rat {
excludes = [
'**/.*/**',
'**/*.ipr',
'**/out/**',
'**/generated/**',
'**/build/**',
'**/target/**',
'**/.idea/**',
'.git/**/*',
'.github/**/*',
'**/.gitignore',
'**/.svn/**/*',
'**/target/**/*',
'**/README.md',
'**/README.rst',
'**/apidocs/*',
'**/src/main/resources/deps/**',
'**/META-INF/**',
'**/.classpath',
'**/.project',
'**/.checkstyle',
'**/.settings/*',
'**/*.iml',
'**/*.iws',
'**/*.ipr',
'site/**',
'site3/**',
'**/*.log',
'data/**',
'dev/.vagrant/**',
'**/proto/**.py',
'**/keyStoreClientPassword.txt',
'**/keyStoreServerPassword.txt',
'**/proc_cpuinfo.txt',
'**/__pycache__/**',
'**/bookkeeper.egg-info/**',
'**/apache_bookkeeper_client.egg-info/**',
'**/pip-selfcheck.json',
'**/test_conf_2.conf'
]
}
configurations {
testArtifacts {
extendsFrom testRuntimeOnly
}
}
artifacts {
testArtifacts testJar
}
plugins.withType(DistributionPlugin) {
distTar {
dependsOn(jar)
if (it.path.contains('bookkeeper-dist-all')) {
dependsOn(':bookkeeper-benchmark:jar')
dependsOn(':bookkeeper-common:jar')
dependsOn(':bookkeeper-common-allocator:jar')
}
archiveClassifier = "bin"
compression = Compression.GZIP
archiveExtension = 'tar.gz'
}
}
compileJava {
sourceCompatibility = 1.8
targetCompatibility = 1.8
options.compilerArgs = ["-Xlint:unchecked", "-Xlint:deprecation", "-Werror"]
}
def componentName = it.name
publishing {
publications {
maven(MavenPublication) {
groupId = 'org.apache.bookkeeper'
artifactId = componentName
version = buildVersion
from components.java
artifact testJar
}
}
}
signing {
def skipSigning = project.hasProperty('skipSigning') && skipSigning.toBoolean()
def shouldSign = !skipSigning
if (shouldSign) {
if (project.hasProperty("singingKey")) {
// The following allow the secretKey and password to be specified using env var
// This is mainly for the CI system.
// * ORG_GRADLE_PROJECT_signingKey
// * ORG_GRADLE_PROJECT_signingPassword
// * ORG_GRADLE_PROJECT_signingKeyId
// See https://docs.gradle.org/current/userguide/signing_plugin.html#sec:in-memory-keys
// for details
def signingKey = findProperty("signingKey")
def signingKeyId = findProperty("signingKeyId")
def signingPassword = findProperty("signingPassword")
if (signingKeyId && signingKey && signingPassword) {
useInMemoryPgpKeys(signingKeyId, signingKey, signingPassword)
} else if (signingKey && signingPassword) {
useInMemoryPgpKeys(signingKey, signingPassword)
}
}
// Signing task is added by the release plugin
}
}
test {
filter {
String testGroup = System.properties['testGroup']
if (testGroup == 'client') {
include '**/client/*'
} else if (testGroup == 'bookie') {
include '**/bookie/*'
} else if (testGroup == 'other') {
exclude '**/client/*'
exclude '**/bookie/*'
}
if (project.hasProperty('excludeTests')) {
String excludeTests = project.property('excludeTests');
ArrayList<String> tests = excludeTests.split(',');
tests.forEach({it
String excludeStr = it.trim();
exclude excludeStr
});
}
}
systemProperty "gradle.buildDirectory", project.buildDir
systemProperty "currentVersion", project.rootProject.version
testLogging {
outputs.upToDateWhen {false}
showStandardStreams = !Boolean.getBoolean("testHideStandardOut")
}
}
dependencies {
implementation(enforcedPlatform(depLibs.nettyBom))
testImplementation depLibs.log4jSlf4jImpl
implementation(enforcedPlatform(depLibs.jacksonBom))
}
dependencies {
implementation(enforcedPlatform(depLibs.guavaBom))
}
tasks.withType(GenerateModuleMetadata).configureEach {
// The value 'enforced-platform' is provided in the validation
// error message you got
suppressedValidationErrors.add('enforced-platform')
}
apply plugin: 'io.franzbecker.gradle-lombok'
task delombok(type: DelombokTask, dependsOn: compileJava) {
ext.outputDir = file("$buildDir/delombok")
outputs.dir(outputDir)
sourceSets.main.java.srcDirs.each {
inputs.dir(it)
args(it, "-d", outputDir)
}
}
task generateJavadoc(type: Javadoc, dependsOn: delombok) {
options.addBooleanOption('Xdoclint:none', true)
source = delombok.outputDir
classpath = sourceSets.main.compileClasspath
}
}
repositories {
mavenCentral()
mavenLocal()
}
}
def javadocProjects = [
":bookkeeper-common",
":bookkeeper-server",
":bookkeeper-stats",
":bookkeeper-stats-providers:prometheus-metrics-provider",
":bookkeeper-stats-providers:codahale-metrics-provider",
]
task generateApiJavadoc(type: Javadoc) {
javadocProjects.each { dependsOn("${it}:delombok"); }
options.addBooleanOption("package", true)
options.addBooleanOption('Xdoclint:none', true)
options.addBooleanOption('-no-module-directories', true)
options.addMultilineMultiValueOption("group").setValue([
["Bookkeeper Client", "org.apache.bookkeeper.client*:org.apache.bookkeeper.common.annotation*:org.apache.bookkeeper.conf*:org.apache.bookkeeper.feature*"],
["Bookkeeper Stats API", "org.apache.bookkeeper.stats*"],
["Bookkeeper Stats Providers", "org.apache.bookkeeper.stats.codahale*:org.apache.bookkeeper.stats.prometheus*"]
])
source = javadocProjects.collect { project(it).buildDir.getAbsolutePath() + "/delombok" }
classpath = files(javadocProjects.collect { project(it).sourceSets.main.compileClasspath })
title = "BookKeeper Java API (version ${project.version})"
destinationDir = file("${buildDir}/docs/javadoc")
}
idea.project.settings {
subprojects { subproject ->
subproject.plugins.withId('com.google.protobuf') {
it.project.afterEvaluate {
taskTriggers {
// run all generateProto tasks after project import or refresh
afterSync subproject.protobuf.generateProtoTasks.all()
}
}
}
}
}