import java.text.SimpleDateFormat plugins { id 'java' id 'java-library' id 'jvm-test-suite' id 'maven-publish' id 'signing' id 'groovy' id 'biz.aQute.bnd.builder' version '6.2.0' id 'io.github.gradle-nexus.publish-plugin' version '1.0.0' id 'com.github.ben-manes.versions' version '0.51.0' } java { toolchain { languageVersion = JavaLanguageVersion.of(11) } } def getDevelopmentVersion() { def output = new StringBuilder() def error = new StringBuilder() def gitShortHash = ["git", "-C", projectDir.toString(), "rev-parse", "--short", "HEAD"].execute() gitShortHash.waitForProcessOutput(output, error) def gitHash = output.toString().trim() if (gitHash.isEmpty()) { println "git hash is empty: error: ${error.toString()}" throw new IllegalStateException("git hash could not be determined") } def version = "0.0.0-" + new SimpleDateFormat('yyyy-MM-dd\'T\'HH-mm-ss').format(new Date()) + "-" + gitHash println "created development version: $version" version } def releaseVersion = System.env.RELEASE_VERSION version = releaseVersion ? releaseVersion : getDevelopmentVersion() group = 'com.graphql-java' description = 'A pure Java 11 port of Facebook Dataloader' gradle.buildFinished { buildResult -> println "*******************************" println "*" if (buildResult.failure != null) { println "* FAILURE - ${buildResult.failure}" } else { println "* SUCCESS" } println "* Version: $version" println "*" println "*******************************" } repositories { mavenCentral() mavenLocal() } jar { manifest { attributes('Automatic-Module-Name': 'org.dataloader', '-exportcontents': 'org.dataloader.*', '-removeheaders': 'Private-Package') } } dependencies { api "org.reactivestreams:reactive-streams:$reactive_streams_version" } task sourcesJar(type: Jar) { dependsOn classes archiveClassifier.set('sources') from sourceSets.main.allSource } javadoc { options.encoding = 'UTF-8' } task javadocJar(type: Jar, dependsOn: javadoc) { archiveClassifier.set('javadoc') from javadoc.destinationDir } artifacts { archives sourcesJar archives javadocJar } testing { suites { test { useJUnitJupiter(junit_version) dependencies { // Testing dependencies implementation platform("org.junit:junit-bom:$junit_version") implementation 'org.junit.jupiter:junit-jupiter-api' implementation 'org.junit.jupiter:junit-jupiter-params' implementation 'org.junit.jupiter:junit-jupiter-engine' implementation "org.awaitility:awaitility:$awaitility_version" implementation "org.hamcrest:hamcrest:$hamcrest_version" implementation "io.projectreactor:reactor-core:$reactor_core_version" implementation "com.github.ben-manes.caffeine:caffeine:$caffeine_version" } targets.configureEach { testTask.configure { testLogging { exceptionFormat = 'full' } } } } } } publishing { publications { graphqlJava(MavenPublication) { from components.java groupId 'com.graphql-java' artifactId 'java-dataloader' version project.version artifact sourcesJar artifact javadocJar pom.withXml { asNode().children().last() + { resolveStrategy = Closure.DELEGATE_FIRST name 'java-dataloader' description 'A pure Java 11 port of Facebook Dataloader' url 'https://github.com/graphql-java/java-dataloader' inceptionYear '2017' scm { url 'https://github.com/graphql-java/java-dataloader' connection 'scm:git@github.com:graphql-java/java-dataloader.git' developerConnection 'scm:git@github.com:graphql-java/java-dataloader.git' } licenses { license { name 'The Apache Software License, Version 2.0' url 'https://www.apache.org/licenses/LICENSE-2.0.txt' distribution 'repo' } } developers { developer { id 'bbakerman' name 'Brad Baker' email 'bbakerman@gmail.com' } developer { id 'aschrijver' name 'Arnold Schrijver' } } } } } } } nexusPublishing { repositories { sonatype { username = System.env.MAVEN_CENTRAL_USER password = System.env.MAVEN_CENTRAL_PASSWORD } } } signing { def signingKey = System.env.MAVEN_CENTRAL_PGP_KEY useInMemoryPgpKeys(signingKey, "") sign publishing.publications } // all publish tasks depend on the build task tasks.withType(PublishToMavenRepository) { dependsOn build } def isNonStable = { String version -> def stableKeyword = ['RELEASE', 'FINAL', 'GA'].any { it -> version.toUpperCase().contains(it) } def regex = /^[0-9,.v-]+(-r)?$/ return !stableKeyword && !(version ==~ regex) } // https://github.com/ben-manes/gradle-versions-plugin tasks.named("dependencyUpdates").configure { rejectVersionIf { isNonStable(it.candidate.version) } }