import java.text.SimpleDateFormat import com.bmuschko.gradle.docker.tasks.container.* import com.bmuschko.gradle.docker.tasks.image.* plugins { id "java" id "groovy" id "jacoco" id "osgi" id "maven-publish" id 'pl.allegro.tech.build.axion-release' version '1.9.2' id "com.bmuschko.docker-remote-api" version "3.2.1" id "com.github.hierynomus.license" version "0.12.1" id "com.jfrog.bintray" version "1.7" id 'ru.vyarus.java-lib' version '1.0.5' // id 'ru.vyarus.pom' version '1.0.3' id 'ru.vyarus.github-info' version '1.1.0' id 'ru.vyarus.animalsniffer' version '1.4.2' } group = "com.hierynomus" scmVersion { tag { prefix = 'v' versionSeparator = '' } hooks { pre 'fileUpdate', [file: 'README.adoc', pattern: { v, c -> /:sshj_version: .*/}, replacement: { v, c -> ":sshj_version: $v" }] pre 'commit' } } project.version = scmVersion.version defaultTasks "build" repositories { mavenCentral() maven { url "https://dl.bintray.com/mockito/maven/" } } sourceCompatibility = 1.6 targetCompatibility = 1.6 configurations.compile.transitive = false def bouncycastleVersion = "1.60" def sshdVersion = "2.1.0" dependencies { signature 'org.codehaus.mojo.signature:java16:1.1@signature' compile "org.slf4j:slf4j-api:1.7.7" compile "org.bouncycastle:bcprov-jdk15on:$bouncycastleVersion" compile "org.bouncycastle:bcpkix-jdk15on:$bouncycastleVersion" compile "com.jcraft:jzlib:1.1.3" compile "net.i2p.crypto:eddsa:0.2.0" testCompile "junit:junit:4.11" testCompile 'org.spockframework:spock-core:1.0-groovy-2.4' testCompile "org.mockito:mockito-core:2.9.2" testCompile "org.apache.sshd:sshd-core:$sshdVersion" testCompile "org.apache.sshd:sshd-sftp:$sshdVersion" testCompile "org.apache.sshd:sshd-scp:$sshdVersion" testRuntime "ch.qos.logback:logback-classic:1.1.2" testCompile 'org.glassfish.grizzly:grizzly-http-server:2.3.17' testCompile 'org.apache.httpcomponents:httpclient:4.5.2' } license { header rootProject.file('LICENSE_HEADER') strictCheck true mapping { java = 'SLASHSTAR_STYLE' } excludes(['**/djb/Curve25519.java', '**/sshj/common/Base64.java', '**/org/mindrot/jbcrypt/*.java']) } // This disables the pedantic doclint feature of JDK8 if (JavaVersion.current().isJava8Compatible()) { tasks.withType(Javadoc) { options.addStringOption('Xdoclint:none', '-quiet') } } task writeSshjVersionProperties { doLast { project.file("${project.buildDir}/resources/main").mkdirs() project.file("${project.buildDir}/resources/main/sshj.properties").withWriter { w -> w.append("sshj.version=${version}") } } } jar.dependsOn writeSshjVersionProperties jar { manifest { // please see http://bnd.bndtools.org/chapters/390-wrapping.html instruction "Bundle-Description", "SSHv2 library for Java" instruction "Bundle-License", "http://www.apache.org/licenses/LICENSE-2.0.txt" instruction "Import-Package", "!net.schmizz.*" instruction "Import-Package", "!com.hierynomus.sshj.*" instruction "Import-Package", "javax.crypto*" instruction "Import-Package", "!net.i2p.crypto.eddsa.math" instruction "Import-Package", "net.i2p*" instruction "Import-Package", "com.jcraft.jzlib*;version=\"[1.1,2)\";resolution:=optional" instruction "Import-Package", "org.slf4j*;version=\"[1.7,5)\"" instruction "Import-Package", "org.bouncycastle*;resolution:=optional" instruction "Import-Package", "org.bouncycastle.jce.provider;resolution:=optional" instruction "Import-Package", "*" instruction "Export-Package", "com.hierynomus.sshj.*;version=\"${project.jar.manifest.version}\"" instruction "Export-Package", "net.schmizz.*;version=\"${project.jar.manifest.version}\"" } } sourcesJar { manifest { attributes( // Add the needed OSGI attributes "Bundle-ManifestVersion": "2", "Bundle-Name": "${project.jar.manifest.name} Source", "Bundle-Version": project.jar.manifest.version, "Eclipse-SourceBundle": "${project.jar.manifest.symbolicName};version=\"${project.jar.manifest.version}\";roots:=\".\"", "Bundle-SymbolicName": "${project.jar.manifest.symbolicName}.source" ) } } configurations { integrationTestCompile.extendsFrom testCompile integrationTestRuntime.extendsFrom testRuntime } sourceSets { integrationTest { groovy { compileClasspath += sourceSets.main.output + sourceSets.test.output runtimeClasspath += sourceSets.main.output + sourceSets.test.output srcDir file('src/itest/groovy') } resources.srcDir file('src/itest/resources') } } task integrationTest(type: Test) { testClassesDirs = sourceSets.integrationTest.output.classesDirs classpath = sourceSets.integrationTest.runtimeClasspath } tasks.withType(Test) { testLogging { exceptionFormat = 'full' } include "**/*Test.*" include "**/*Spec.*" if (!project.hasProperty("allTests")) { useJUnit { excludeCategories 'com.hierynomus.sshj.test.SlowTests' excludeCategories 'com.hierynomus.sshj.test.KnownFailingTests' } } afterSuite { descriptor, result -> if (descriptor.className != null) { def indicator = "\u001B[32m✓\u001b[0m" if (result.failedTestCount > 0) { indicator = "\u001B[31m✘\u001b[0m" } logger.lifecycle("$indicator Test ${descriptor.name}; Executed: ${result.testCount}/\u001B[32m${result.successfulTestCount}\u001B[0m/\u001B[31m${result.failedTestCount}\u001B[0m") } } } project.tasks.compileGroovy.onlyIf { false } github { user 'hierynomus' license 'Apache' } pom { description "SSHv2 library for Java" url "https://github.com/hierynomus/sshj" inceptionYear "2009" developers { developer { id "hierynomus" name "Jeroen van Erp" email "jeroen@javadude.nl" roles { role "Lead developer" } } developer { id "shikhar" name "Shikhar Bhushan" email "shikhar@schmizz.net" url "http://schmizz.net" roles { role "Previous lead developer" } } developer { id "iterate" name "David Kocher" email "dkocher@iterate.ch" organization "iterage GmbH" organizationUrl "https://iterate.ch" roles { role "Developer" } } } } if (project.hasProperty("bintrayUsername") && project.hasProperty("bintrayApiKey")) { bintray { user = project.property("bintrayUsername") key = project.property("bintrayApiKey") publish = true publications = ["maven"] pkg { repo = "maven" name = project.name licenses = ["Apache-2.0"] vcsUrl = "https://github.com/hierynomus/sshj.git" labels = ["ssh", "sftp", "secure-shell", "network", "file-transfer"] githubRepo = "hierynomus/sshj" version { name = "${project.version}" vcsTag = "v${project.version}" released = new SimpleDateFormat('yyyy-MM-dd\'T\'HH:mm:ss.SSSZZ').format(new Date()) gpg { sign = true passphrase = project.property("signing.password") } mavenCentralSync { sync = true user = project.property("sonatypeUsername") password = project.property("sonatypePassword") close = 1 } } } } } jacocoTestReport { reports { xml.enabled true html.enabled true } } task buildItestImage(type: DockerBuildImage) { inputDir = file('src/itest/docker-image') tag = 'sshj/sshd-itest' } task createItestContainer(type: DockerCreateContainer) { dependsOn buildItestImage targetImageId { buildItestImage.getImageId() } portBindings = ['2222:22'] } task startItestContainer(type: DockerStartContainer) { dependsOn createItestContainer targetContainerId { createItestContainer.getContainerId() } } task stopItestContainer(type: DockerStopContainer) { targetContainerId { createItestContainer.getContainerId() } } task forkedUploadRelease(type: GradleBuild) { buildFile = project.buildFile tasks = ["bintrayUpload"] } project.tasks.integrationTest.dependsOn(startItestContainer) project.tasks.integrationTest.finalizedBy(stopItestContainer) project.tasks.release.dependsOn([project.tasks.integrationTest, project.tasks.build]) project.tasks.release.finalizedBy(project.tasks.forkedUploadRelease) project.tasks.jacocoTestReport.dependsOn(project.tasks.test) project.tasks.check.dependsOn(project.tasks.jacocoTestReport)