Build now uses in-memory pgp keys (it's easier than setting up gpg on box).

This commit is contained in:
nathan 2020-05-08 12:27:58 +02:00
parent 15be442cb2
commit f01c565392
1 changed files with 395 additions and 392 deletions

View File

@ -1,392 +1,395 @@
/* /*
* Copyright 2018 dorkbox, llc * Copyright 2018 dorkbox, llc
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
* You may obtain a copy of the License at * You may obtain a copy of the License at
* *
* http://www.apache.org/licenses/LICENSE-2.0 * http://www.apache.org/licenses/LICENSE-2.0
* *
* Unless required by applicable law or agreed to in writing, software * Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, * distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
import Build_gradle.Extras.bcVersion import Build_gradle.Extras.bcVersion
import java.time.Instant import java.time.Instant
import kotlin.collections.set import kotlin.collections.set
/////////////////////////////// ///////////////////////////////
////// PUBLISH TO SONATYPE / MAVEN CENTRAL ////// PUBLISH TO SONATYPE / MAVEN CENTRAL
////// //////
////// TESTING (local maven repo) -> PUBLISHING -> publishToMavenLocal ////// TESTING (local maven repo) -> PUBLISHING -> publishToMavenLocal
////// //////
////// RELEASE (sonatype / maven central) -> "PUBLISH AND RELEASE" -> publishAndRelease ////// RELEASE (sonatype / maven central) -> "PUBLISH AND RELEASE" -> publishAndRelease
/////////////////////////////// ///////////////////////////////
println("\tGradle ${project.gradle.gradleVersion} on Java ${JavaVersion.current()}") println("\tGradle ${project.gradle.gradleVersion} on Java ${JavaVersion.current()}")
plugins { plugins {
java java
signing signing
`maven-publish` `maven-publish`
// publish on sonatype // publish on sonatype
id("de.marcphilipp.nexus-publish") version "0.4.0" id("de.marcphilipp.nexus-publish") version "0.4.0"
// close and release on sonatype // close and release on sonatype
id("io.codearte.nexus-staging") version "0.21.2" id("io.codearte.nexus-staging") version "0.21.2"
id("com.dorkbox.CrossCompile") version "1.1" id("com.dorkbox.CrossCompile") version "1.1"
id("com.dorkbox.Licensing") version "1.4.2" id("com.dorkbox.Licensing") version "1.4.2"
id("com.dorkbox.VersionUpdate") version "1.6.1" id("com.dorkbox.VersionUpdate") version "1.6.1"
id("com.dorkbox.GradleUtils") version "1.4" id("com.dorkbox.GradleUtils") version "1.4"
kotlin("jvm") version "1.3.72" kotlin("jvm") version "1.3.72"
} }
object Extras { object Extras {
// set for the project // set for the project
const val description = "Encrypted, high-performance, and event-driven/reactive network stack for Java 11+" const val description = "Encrypted, high-performance, and event-driven/reactive network stack for Java 11+"
const val group = "com.dorkbox" const val group = "com.dorkbox"
const val version = "4.1" const val version = "4.1"
// set as project.ext // set as project.ext
const val name = "Network" const val name = "Network"
const val id = "Network" const val id = "Network"
const val vendor = "Dorkbox LLC" const val vendor = "Dorkbox LLC"
const val url = "https://git.dorkbox.com/dorkbox/Network" const val url = "https://git.dorkbox.com/dorkbox/Network"
val buildDate = Instant.now().toString() val buildDate = Instant.now().toString()
val JAVA_VERSION = JavaVersion.VERSION_11 val JAVA_VERSION = JavaVersion.VERSION_11
const val bcVersion = "1.60" const val bcVersion = "1.60"
var sonatypeUserName = "" var sonatypeUserName = ""
var sonatypePassword = "" var sonatypePassword = ""
} var sonatypePrivateKeyFile = ""
var sonatypePrivateKeyPassword = ""
/////////////////////////////// }
///// assign 'Extras'
/////////////////////////////// ///////////////////////////////
GradleUtils.load("$projectDir/../../gradle.properties", Extras) ///// assign 'Extras'
description = Extras.description ///////////////////////////////
group = Extras.group GradleUtils.load("$projectDir/../../gradle.properties", Extras)
version = Extras.version description = Extras.description
group = Extras.group
version = Extras.version
licensing {
license(License.APACHE_2) {
author(Extras.vendor) licensing {
url(Extras.url) license(License.APACHE_2) {
note(Extras.description) author(Extras.vendor)
} url(Extras.url)
note(Extras.description)
license("Dorkbox Utils", License.APACHE_2) { }
author(Extras.vendor)
url("https://git.dorkbox.com/dorkbox/Utilities") license("Dorkbox Utils", License.APACHE_2) {
} author(Extras.vendor)
url("https://git.dorkbox.com/dorkbox/Utilities")
license("Bennidi Iterator", License.MIT) { }
copyright(2012)
author("Benjamin Diedrichsen") license("Bennidi Iterator", License.MIT) {
url("https://github.com/bennidi/mbassador") copyright(2012)
note("Fast iterators from the MBassador project") author("Benjamin Diedrichsen")
} url("https://github.com/bennidi/mbassador")
note("Fast iterators from the MBassador project")
license("BouncyCastle", License.MIT) { }
copyright(2009)
author("The Legion Of The Bouncy Castle") license("BouncyCastle", License.MIT) {
url("http://www.bouncycastle.org") copyright(2009)
} author("The Legion Of The Bouncy Castle")
url("http://www.bouncycastle.org")
license("ObjectPool", License.APACHE_2) { }
author("dorkbox, llc")
url("https://git.dorkbox.com/dorkbox/ObjectPool") license("ObjectPool", License.APACHE_2) {
} author("dorkbox, llc")
url("https://git.dorkbox.com/dorkbox/ObjectPool")
license("FastThreadLocal", License.BSD_3) { }
copyright(2014)
author("Lightweight Java Game Library Project") license("FastThreadLocal", License.BSD_3) {
author("Riven") copyright(2014)
url("https://github.com/LWJGL/lwjgl3/blob/5819c9123222f6ce51f208e022cb907091dd8023/modules/core/src/main/java/org/lwjgl/system/FastThreadLocal.java") author("Lightweight Java Game Library Project")
} author("Riven")
url("https://github.com/LWJGL/lwjgl3/blob/5819c9123222f6ce51f208e022cb907091dd8023/modules/core/src/main/java/org/lwjgl/system/FastThreadLocal.java")
license("Javassist", License.BSD_3) { }
copyright(1999)
author("Shigeru Chiba") license("Javassist", License.BSD_3) {
author("Bill Burke") copyright(1999)
author("Jason T. Greene") author("Shigeru Chiba")
url("http://www.csg.is.titech.ac.jp/~chiba/java") author("Bill Burke")
note("Licensed under the MPL/LGPL/Apache triple license") author("Jason T. Greene")
} url("http://www.csg.is.titech.ac.jp/~chiba/java")
note("Licensed under the MPL/LGPL/Apache triple license")
license("Kryo", License.BSD_3) { }
copyright(2008)
author("Nathan Sweet") license("Kryo", License.BSD_3) {
url("https://github.com/EsotericSoftware/kryo") copyright(2008)
} author("Nathan Sweet")
url("https://github.com/EsotericSoftware/kryo")
license("kryo-serializers", License.APACHE_2) { }
copyright(2010)
author("Martin Grotzke") license("kryo-serializers", License.APACHE_2) {
author("Rafael Winterhalter") copyright(2010)
url("https://github.com/magro/kryo-serializers") author("Martin Grotzke")
} author("Rafael Winterhalter")
url("https://github.com/magro/kryo-serializers")
license("KryoNet RMI", License.BSD_3) { }
copyright(2008)
author("Nathan Sweet") license("KryoNet RMI", License.BSD_3) {
url("https://github.com/EsotericSoftware/kryonet") copyright(2008)
} author("Nathan Sweet")
url("https://github.com/EsotericSoftware/kryonet")
license("LAN HostDiscovery from Apache Commons JCS", License.APACHE_2) { }
copyright(2014)
author("The Apache Software Foundation") license("LAN HostDiscovery from Apache Commons JCS", License.APACHE_2) {
url("https://issues.apache.org/jira/browse/JCS-40") copyright(2014)
} author("The Apache Software Foundation")
url("https://issues.apache.org/jira/browse/JCS-40")
license("LZ4 and XXhash", License.APACHE_2) { }
copyright(2011)
copyright(2012) license("LZ4 and XXhash", License.APACHE_2) {
author("Yann Collet") copyright(2011)
author("Adrien Grand") copyright(2012)
url("https://github.com/jpountz/lz4-java") author("Yann Collet")
} author("Adrien Grand")
url("https://github.com/jpountz/lz4-java")
license("MathUtils, IntArray, IntMap", License.APACHE_2) { }
copyright(2013)
author("Mario Zechner <badlogicgames@gmail.com>") license("MathUtils, IntArray, IntMap", License.APACHE_2) {
author("Nathan Sweet <nathan.sweet@gmail.com>") copyright(2013)
url("http://github.com/libgdx/libgdx/") author("Mario Zechner <badlogicgames@gmail.com>")
} author("Nathan Sweet <nathan.sweet@gmail.com>")
url("http://github.com/libgdx/libgdx/")
license("MinLog-SLF4J", License.APACHE_2) { }
copyright(2008)
author("dorkbox, llc") license("MinLog-SLF4J", License.APACHE_2) {
author("Nathan Sweet") copyright(2008)
author("Dan Brown") author("dorkbox, llc")
url("https://git.dorkbox.com/dorkbox/MinLog-SLF4J") author("Nathan Sweet")
url("https://github.com/EsotericSoftware/minlog") author("Dan Brown")
note("Drop-in replacement for MinLog to log through SLF4j.") url("https://git.dorkbox.com/dorkbox/MinLog-SLF4J")
} url("https://github.com/EsotericSoftware/minlog")
note("Drop-in replacement for MinLog to log through SLF4j.")
license("ReflectASM", License.BSD_3) { }
copyright(2008)
author("Nathan Sweet") license("ReflectASM", License.BSD_3) {
url("https://github.com/EsotericSoftware/reflectasm") copyright(2008)
} author("Nathan Sweet")
url("https://github.com/EsotericSoftware/reflectasm")
license("SLF4J", License.MIT) { }
copyright(2008)
author("QOS.ch") license("SLF4J", License.MIT) {
url("http://www.slf4j.org") copyright(2008)
} author("QOS.ch")
url("http://www.slf4j.org")
license("TypeTools", License.APACHE_2) { }
copyright(2017)
author("Jonathan Halterman") license("TypeTools", License.APACHE_2) {
url("https://github.com/jhalterman/typetools/") copyright(2017)
note("Tools for resolving generic types") author("Jonathan Halterman")
} url("https://github.com/jhalterman/typetools/")
} note("Tools for resolving generic types")
}
sourceSets { }
main {
java { sourceSets {
setSrcDirs(listOf("src")) main {
java {
// want to include java files for the source. 'setSrcDirs' resets includes... setSrcDirs(listOf("src"))
include("**/*.java")
} // want to include java files for the source. 'setSrcDirs' resets includes...
} include("**/*.java")
}
test { }
java {
setSrcDirs(listOf("test")) test {
java {
// want to include java files for the source. 'setSrcDirs' resets includes... setSrcDirs(listOf("test"))
include("**/*.java")
} // want to include java files for the source. 'setSrcDirs' resets includes...
} include("**/*.java")
} }
}
repositories { }
mavenLocal() // this must be first!
jcenter() repositories {
} mavenLocal() // this must be first!
jcenter()
/////////////////////////////// }
////// Task defaults
/////////////////////////////// ///////////////////////////////
java { ////// Task defaults
sourceCompatibility = Extras.JAVA_VERSION ///////////////////////////////
targetCompatibility = Extras.JAVA_VERSION java {
} sourceCompatibility = Extras.JAVA_VERSION
targetCompatibility = Extras.JAVA_VERSION
tasks.compileJava.get().apply { }
println("\tCompiling classes to Java $sourceCompatibility")
} tasks.compileJava.get().apply {
println("\tCompiling classes to Java $sourceCompatibility")
tasks.withType<JavaCompile> { }
options.encoding = "UTF-8"
sourceCompatibility = Extras.JAVA_VERSION.toString() tasks.withType<JavaCompile> {
targetCompatibility = Extras.JAVA_VERSION.toString() options.encoding = "UTF-8"
} sourceCompatibility = Extras.JAVA_VERSION.toString()
targetCompatibility = Extras.JAVA_VERSION.toString()
tasks.withType<Jar> { }
duplicatesStrategy = DuplicatesStrategy.FAIL
} tasks.withType<Jar> {
duplicatesStrategy = DuplicatesStrategy.FAIL
tasks.jar.get().apply { }
manifest {
// https://docs.oracle.com/javase/tutorial/deployment/jar/packageman.html tasks.jar.get().apply {
attributes["Name"] = Extras.name manifest {
// https://docs.oracle.com/javase/tutorial/deployment/jar/packageman.html
attributes["Specification-Title"] = Extras.name attributes["Name"] = Extras.name
attributes["Specification-Version"] = Extras.version
attributes["Specification-Vendor"] = Extras.vendor attributes["Specification-Title"] = Extras.name
attributes["Specification-Version"] = Extras.version
attributes["Implementation-Title"] = "${Extras.group}.${Extras.id}" attributes["Specification-Vendor"] = Extras.vendor
attributes["Implementation-Version"] = Extras.buildDate
attributes["Implementation-Vendor"] = Extras.vendor attributes["Implementation-Title"] = "${Extras.group}.${Extras.id}"
attributes["Implementation-Version"] = Extras.buildDate
attributes["Automatic-Module-Name"] = Extras.id attributes["Implementation-Vendor"] = Extras.vendor
}
} attributes["Automatic-Module-Name"] = Extras.id
}
dependencies { }
implementation("io.netty:netty-all:4.1.49.Final")
implementation("com.esotericsoftware:kryo:5.0.0-RC2") dependencies {
implementation("net.jpountz.lz4:lz4:1.3.0") implementation("io.netty:netty-all:4.1.49.Final")
implementation("com.esotericsoftware:kryo:5.0.0-RC2")
implementation("org.bouncycastle:bcprov-jdk15on:$bcVersion") implementation("net.jpountz.lz4:lz4:1.3.0")
implementation("org.bouncycastle:bcpg-jdk15on:$bcVersion")
implementation("org.bouncycastle:bcmail-jdk15on:$bcVersion") implementation("org.bouncycastle:bcprov-jdk15on:$bcVersion")
implementation("org.bouncycastle:bctls-jdk15on:$bcVersion") implementation("org.bouncycastle:bcpg-jdk15on:$bcVersion")
implementation("org.bouncycastle:bcmail-jdk15on:$bcVersion")
implementation("net.jodah:typetools:0.6.2") implementation("org.bouncycastle:bctls-jdk15on:$bcVersion")
implementation("de.javakaffee:kryo-serializers:0.45")
implementation("net.jodah:typetools:0.6.2")
implementation("com.dorkbox:ObjectPool:2.12") implementation("de.javakaffee:kryo-serializers:0.45")
implementation("com.dorkbox:Utilities:1.2")
implementation("com.dorkbox:ObjectPool:2.12")
implementation("org.slf4j:slf4j-api:1.7.30") implementation("com.dorkbox:Utilities:1.2")
testImplementation("junit:junit:4.13") implementation("org.slf4j:slf4j-api:1.7.30")
testImplementation("ch.qos.logback:logback-classic:1.2.3")
} testImplementation("junit:junit:4.13")
testImplementation("ch.qos.logback:logback-classic:1.2.3")
/////////////////////////////// }
////// PUBLISH TO SONATYPE / MAVEN CENTRAL
////// ///////////////////////////////
////// TESTING (local maven repo) -> PUBLISHING -> publishToMavenLocal ////// PUBLISH TO SONATYPE / MAVEN CENTRAL
////// //////
////// RELEASE (sonatype / maven central) -> "PUBLISH AND RELEASE" -> publishAndRelease ////// TESTING (local maven repo) -> "PUBLISHING" -> publishToMavenLocal
/////////////////////////////// //////
publishing { ////// RELEASE (sonatype / maven central) -> "PUBLISHING" -> publishToSonaytypeAndRelease
publications { ///////////////////////////////
create<MavenPublication>("maven") { publishing {
groupId = Extras.group publications {
artifactId = Extras.id create<MavenPublication>("maven") {
version = Extras.version groupId = Extras.group
artifactId = Extras.id
from(components["java"]) version = Extras.version
artifact(task<Jar>("sourceJar") { from(components["java"])
description = "Creates a JAR that contains the source code."
artifact(task<Jar>("sourceJar") {
from(sourceSets["main"].java) description = "Creates a JAR that contains the source code."
archiveClassifier.set("sources")
}) from(sourceSets["main"].java)
archiveClassifier.set("sources")
artifact(task<Jar>("javaDocJar") { })
description = "Creates a JAR that contains the javadocs."
artifact(task<Jar>("javaDocJar") {
archiveClassifier.set("javadoc") description = "Creates a JAR that contains the javadocs."
})
archiveClassifier.set("javadoc")
pom { })
name.set(Extras.name)
description.set(Extras.description) pom {
url.set(Extras.url) name.set(Extras.name)
description.set(Extras.description)
issueManagement { url.set(Extras.url)
url.set("${Extras.url}/issues")
system.set("Gitea Issues") issueManagement {
} url.set("${Extras.url}/issues")
organization { system.set("Gitea Issues")
name.set(Extras.vendor) }
url.set("https://dorkbox.com") organization {
} name.set(Extras.vendor)
developers { url.set("https://dorkbox.com")
developer { }
id.set("dorkbox") developers {
name.set(Extras.vendor) developer {
email.set("email@dorkbox.com") id.set("dorkbox")
} name.set(Extras.vendor)
} email.set("email@dorkbox.com")
scm { }
url.set(Extras.url) }
connection.set("scm:${Extras.url}.git") scm {
} url.set(Extras.url)
} connection.set("scm:${Extras.url}.git")
}
} }
}
}
tasks.withType<PublishToMavenRepository> { }
doFirst {
println("\tPublishing '${publication.groupId}:${publication.artifactId}:${publication.version}' to ${repository.url}") tasks.withType<PublishToMavenRepository> {
} doFirst {
println("\tPublishing '${publication.groupId}:${publication.artifactId}:${publication.version}' to ${repository.url}")
onlyIf { }
publication == publishing.publications["maven"] && repository == publishing.repositories["maven"]
} onlyIf {
} publication == publishing.publications["maven"] && repository == publishing.repositories["sonatype"]
}
tasks.withType<PublishToMavenLocal> { }
onlyIf {
publication == publishing.publications["maven"] tasks.withType<PublishToMavenLocal> {
} onlyIf {
} publication == publishing.publications["maven"]
}
// output the release URL in the console }
tasks["releaseRepository"].doLast {
val url = "https://oss.sonatype.org/content/repositories/releases/" // output the release URL in the console
val projectName = Extras.group.replace('.', '/') tasks["releaseRepository"].doLast {
val name = Extras.name val url = "https://oss.sonatype.org/content/repositories/releases/"
val version = Extras.version val projectName = Extras.group.replace('.', '/')
val name = Extras.name
println("Maven URL: $url$projectName/$name/$version/") val version = Extras.version
}
println("Maven URL: $url$projectName/$name/$version/")
nexusStaging { }
username = Extras.sonatypeUserName
password = Extras.sonatypePassword nexusStaging {
} username = Extras.sonatypeUserName
password = Extras.sonatypePassword
nexusPublishing { }
packageGroup.set(Extras.group)
nexusPublishing {
repositories { packageGroup.set(Extras.group)
sonatype() {
username.set(Extras.sonatypeUserName) repositories {
password.set(Extras.sonatypePassword) sonatype() {
} username.set(Extras.sonatypeUserName)
} password.set(Extras.sonatypePassword)
} }
}
signing { }
sign(publishing.publications["maven"])
} signing {
useInMemoryPgpKeys(File(Extras.sonatypePrivateKeyFile).readText(), Extras.sonatypePrivateKeyPassword)
task<Task>("publishAndRelease") { sign(publishing.publications["maven"])
group = "publish and release" }
// required to make sure the tasks run in the correct order task<Task>("publishToSonatypeAndRelease") {
tasks["closeAndReleaseRepository"].mustRunAfter(tasks["publishToSonatype"]) group = "publishing"
dependsOn("publishToNexus", "closeAndReleaseRepository")
} // required to make sure the tasks run in the correct order
} tasks["closeAndReleaseRepository"].mustRunAfter(tasks["publishToSonatype"])
dependsOn("publishToSonatype", "closeAndReleaseRepository")
}
}