blob: 551fdf91631dd81b01e3abb984424a72fd806143 [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.
*/
plugins {
id "org.nosphere.apache.rat" version "0.6.0"
id "com.diffplug.gradle.spotless" version "3.0.0"
id "de.undercouch.download" version "3.1.2"
}
allprojects {
repositories {
if (!gradle.usingGeodeCompositeBuild) {
maven {
url project.findProperty('geodeRepositoryUrl') ?: 'https://maven.apachegeode-ci.info/snapshots'
content {
includeGroup 'org.apache.geode'
}
}
}
mavenCentral()
}
}
def installDir = "$buildDir/apache-geode"
configurations {
geodeDistribution
}
dependencies {
geodeDistribution("org.apache.geode:apache-geode:$geodeVersion@tgz") {
if (gradle.usingGeodeCompositeBuild) {
targetConfiguration = 'compositeTarget'
}
}
}
task installGeode(type: Copy) {
if (gradle.usingGeodeCompositeBuild) {
dependsOn(gradle.includedBuild('geode').task(':geode-assembly:distTar'))
}
from {
tarTree(configurations.geodeDistribution.singleFile)
}
eachFile { fcp ->
fcp.path = fcp.path.replaceFirst("^apache-geode-[a-zA-Z0-9\\.\\-]+\\/", "apache-geode/")
}
into buildDir
includeEmptyDirs false
}
subprojects {
apply plugin: 'java-library'
dependencies {
// All callouts to org.apache.geode here, need to be specified in settings.gradle
// for composite build to work
api(platform("org.apache.geode:geode-all-bom:$geodeVersion"))
implementation("org.apache.geode:geode-core")
implementation("org.apache.geode:geode-cq")
implementation("org.apache.geode:geode-logging")
implementation('com.google.guava:guava')
implementation('org.apache.commons:commons-lang3')
implementation("org.apache.logging.log4j:log4j-core")
testImplementation("org.awaitility:awaitility")
testImplementation("junit:junit")
testImplementation("org.mockito:mockito-core")
testImplementation("com.github.stefanbirkner:system-rules")
testImplementation("org.assertj:assertj-core")
testImplementation('org.apache.httpcomponents:httpcore')
testImplementation('org.apache.httpcomponents:httpclient')
runtimeOnly "org.apache.logging.log4j:log4j-slf4j-impl"
}
jar {
archiveName "${baseName}.${extension}"
}
task cleanServer {
doLast {
delete 'locator'
delete 'locator-ln'
delete 'locator-ny'
delete 'server1'
delete 'server2'
delete 'server-ln-1'
delete 'server-ln-2'
delete 'server-ny-1'
delete 'server-ny-2'
}
}
clean.finalizedBy cleanServer
def geodePath = "${System.env.PATH}${System.getProperty('path.separator')}${installDir}/bin"
task start(type: Exec, dependsOn: [installGeode, build, cleanServer]) {
workingDir projectDir
environment 'GEODE_HOME', installDir
environment 'PATH', geodePath
commandLine 'sh', '-c', "gfsh run --file=${projectDir}/scripts/start.gfsh"
}
task stop(type: Exec, dependsOn: installGeode) {
workingDir projectDir
environment 'GEODE_HOME', installDir
environment 'PATH', geodePath
commandLine 'sh', '-c', "gfsh run --file=${projectDir}/scripts/stop.gfsh"
}
task run(type: JavaExec, dependsOn: build) {
description = 'Run example'
classpath = sourceSets.main.runtimeClasspath
main = "org.apache.geode_examples.${project.name}.Example"
}
task waitForExitingMembers(type: Exec) {
workingDir projectDir
environment 'GEODE_HOME', installDir
environment 'PATH', geodePath
ignoreExitValue true
commandLine 'sh', '-c', "" +
"TIMEOUT=120 ;" +
"echo \"Waiting at most \$TIMEOUT seconds for all members to shut down...\" ;" +
"while pgrep -f \"(Server|Locator)Launcher\" > /dev/null ; do" +
" printf \".\" ; " +
" sleep 1 ;" +
" TIMEOUT=\$((\$TIMEOUT - 1)) ;" +
" if [ \$TIMEOUT -eq 0 ] ; then" +
" echo \"\" ;" +
" exit 10 ;" +
" fi ;" +
"done ;" +
"echo \"\""
doLast {
// We use exit code 10 to avoid conflict with pgrep exit codes.
if (execResult.exitValue == 10) {
throw new GradleException("A member process persisted beyond permitted timeout. Aborting.")
} else if (execResult.exitValue != 0) {
throw new GradleException("waitForExistingMembers failed with exit code: " + execResult.exitValue)
}
}
}
task verifyNoMembersRunning(type: Exec) {
workingDir projectDir
environment 'GEODE_HOME', installDir
environment 'PATH', geodePath
ignoreExitValue true
commandLine 'sh', '-c', "echo \"Looking for existing member processes...\" ; " +
"pgrep -f \"(Server|Locator)Launcher\" ; "
doLast {
if (execResult.exitValue == 0) {
throw new GradleException("Existing members detected. Examples expect a clean environment in which to run.")
}
}
}
if (gradle.usingGeodeCompositeBuild) {
tasks.withType(JavaCompile) {
options.fork = true
options.forkOptions.jvmArgs += ['-Xmx3g']
}
}
task runAll(dependsOn: [verifyNoMembersRunning, start, run, stop, waitForExitingMembers])
start.mustRunAfter verifyNoMembersRunning
run.mustRunAfter start
stop.mustRunAfter run
waitForExitingMembers.mustRunAfter stop
}
apply from: "gradle/spotless.gradle"
apply from: "gradle/ide.gradle"
apply from: "gradle/rat.gradle"
apply from: "gradle/release.gradle"