From 9e94be6b77c0cd93874d88ace538141b4c96ae0e Mon Sep 17 00:00:00 2001 From: Michael Zhang Date: Sun, 8 Jan 2017 07:15:03 -0600 Subject: [PATCH] + support deploy with sign (#4) + support deploy with sign --- .travis.yml | 13 +- build.gradle | 11 +- deploy.gradle | 140 ++++++++++++++++++++ example/grpc-client/build.gradle | 11 ++ example/grpc-lib/build.gradle | 6 + example/grpc-server/build.gradle | 11 ++ grpc-spring-boot-autoconfigure/build.gradle | 23 +--- grpc-spring-boot-starter/build.gradle | 23 +--- private.key.enc | Bin 0 -> 3600 bytes 9 files changed, 179 insertions(+), 59 deletions(-) create mode 100644 deploy.gradle create mode 100644 private.key.enc diff --git a/.travis.yml b/.travis.yml index 918101db8..70b7873a9 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,11 +1,14 @@ language: java jdk: - - oraclejdk8 +- oraclejdk8 before_cache: - - rm -f $HOME/.gradle/caches/modules-2/modules-2.lock +- rm -f $HOME/.gradle/caches/modules-2/modules-2.lock cache: directories: - - $HOME/.gradle/caches/ - - $HOME/.gradle/wrapper/ + - "$HOME/.gradle/caches/" + - "$HOME/.gradle/wrapper/" +before_install: +- openssl aes-256-cbc -K $encrypted_35d5c0204248_key -iv $encrypted_35d5c0204248_iv -in private.key.enc -out ./private.key -d +- gpg --import ./private.key after_success: - - "[[ ${TRAVIS_PULL_REQUEST} == 'false' ]] && [[ ${TRAVIS_TAG} == '' ]] && ./gradlew publish" \ No newline at end of file +- "[[ ${TRAVIS_PULL_REQUEST} == 'false' ]] && [[ ${TRAVIS_TAG} == '' ]] && ./gradlew publish" diff --git a/build.gradle b/build.gradle index acf80d0bf..46433b93e 100644 --- a/build.gradle +++ b/build.gradle @@ -7,7 +7,7 @@ buildscript { maven { url "https://plugins.gradle.org/m2/" } } ext { - projectVersion = '1.0.0.RELEASE' + projectVersion = '1.0.0.SNAPSHOT' springBootVersion = '1.4.2.RELEASE' springSleuthVersion = '1.1.0.RELEASE' springCloudVersion = 'Camden.SR3' @@ -49,14 +49,5 @@ subprojects { mavenLocal() mavenCentral() } - dependencyManagement { - imports { - mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}" - } - } - dependencies { - classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}") - classpath 'com.google.protobuf:protobuf-gradle-plugin:0.7.6' - } } } \ No newline at end of file diff --git a/deploy.gradle b/deploy.gradle new file mode 100644 index 000000000..e0decec8c --- /dev/null +++ b/deploy.gradle @@ -0,0 +1,140 @@ +apply plugin: 'maven-publish' +apply plugin: 'signing' + +gradle.taskGraph.whenReady { taskGraph -> + if (taskGraph.allTasks.any { it instanceof Sign }) { + def id = System.getenv('GPG_ID') + def file = '/home/travis/.gnupg/secring.gpg' + def password = System.getenv('GPG_PASSWORD') + + allprojects { ext."signing.keyId" = id } + allprojects { ext."signing.secretKeyRingFile" = file } + allprojects { ext."signing.password" = password } + } +} + +ext { + pomFile = file("${project.buildDir}/generated-pom.xml") + isReleaseVersion = project.version.endsWith('RELEASE') +} + +task javadocJar(type: Jar, dependsOn: javadoc) { + classifier = 'javadoc' + from javadoc.destinationDir +} + +task sourceJar(type: Jar) { + classifier = 'sources' + from sourceSets.main.allSource +} + +artifacts { + archives jar + archives sourceJar + archives javadocJar +} + + +signing { + sign configurations.archives +} + +publishing { + publications { + jar(MavenPublication) { + pom.withXml { + asNode().children().first() + { + resolveStrategy = Closure.DELEGATE_FIRST + name 'spring boot grpc' + description 'spring boot grpc' + url 'https://github.com/yidongnan/grpc-spring-boot-starter' + scm { + url 'https://github.com/yidongnan/grpc-spring-boot-starter' + connection 'scm:git:git://github.com/yidongnan/grpc-spring-boot-starter.git' + developerConnection 'scm:git:ssh@github.com:yidongnan/grpc-spring-boot-starter.git' + } + licenses { + license { + name 'MIT License' + url 'http://www.opensource.org/licenses/mit-license.php' + distribution 'repo' + } + } + developers { + developer { + id 'yidongnan' + name 'Michael Zhang' + email 'yidongnan@gmail.com' + } + } + } + } + pom.withXml { + asNode().dependencies.'*'.findAll() { + it.scope.text() == 'runtime' && project.configurations.compile.allDependencies.find { dep -> + dep.name == it.artifactId.text() + } + }.each { + if (it.groupId.text() == "net.devh" && it.artifactId.text() == "grpc-spring-boot-autoconfigure") { + it.scope*.value = 'compile' + } + } + } + from components.java + + artifact(sourceJar) { + classifier = 'sources' + } + artifact(javadocJar) { + classifier = 'javadoc' + } + + + pom.withXml { + writeTo(project.ext.pomFile) + def pomAscFile = signing.sign(project.ext.pomFile).signatureFiles[0] + artifact(pomAscFile) { + classifier = null + extension = 'pom.asc' + } + project.ext.pomFile.delete() + } + + // Sign the artifacts. + project.tasks.signArchives.signatureFiles.each { + artifact(it) { + def matcher = it.file =~ /-(sources|javadoc)\.jar\.asc$/ + if (matcher.find()) { + classifier = matcher.group(1) + } else { + classifier = null + } + extension = 'jar.asc' + } + } + } + } + repositories { + maven { + credentials { + username System.getenv('OSSRH_USER') + password System.getenv('OSSRH_PASS') + } + println(project.ext.isReleaseVersion) + if(project.version.endsWith('RELEASE')) { + url "https://oss.sonatype.org/service/local/staging/deploy/maven2" + } else { + url "https://oss.sonatype.org/content/repositories/snapshots" + } + } + } +} + +model { + tasks.publishJarPublicationToMavenLocal { + dependsOn(project.tasks.signArchives) + } + tasks.publishJarPublicationToMavenRepository { + dependsOn(project.tasks.signArchives) + } +} \ No newline at end of file diff --git a/example/grpc-client/build.gradle b/example/grpc-client/build.gradle index d97a122d4..a50c8f9a1 100644 --- a/example/grpc-client/build.gradle +++ b/example/grpc-client/build.gradle @@ -7,4 +7,15 @@ dependencies { compile project(':example:grpc-lib') compile project(':grpc-spring-boot-starter') +} + +buildscript { + dependencies { + classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}") + } + dependencyManagement { + imports { + mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}" + } + } } \ No newline at end of file diff --git a/example/grpc-lib/build.gradle b/example/grpc-lib/build.gradle index e60803858..30d19923d 100644 --- a/example/grpc-lib/build.gradle +++ b/example/grpc-lib/build.gradle @@ -34,3 +34,9 @@ idea { generatedSourceDirs += file("src/generated/main/grpc") } } + +buildscript { + dependencies { + classpath 'com.google.protobuf:protobuf-gradle-plugin:0.7.6' + } +} \ No newline at end of file diff --git a/example/grpc-server/build.gradle b/example/grpc-server/build.gradle index d3785eb96..a50c8f9a1 100644 --- a/example/grpc-server/build.gradle +++ b/example/grpc-server/build.gradle @@ -8,3 +8,14 @@ dependencies { compile project(':example:grpc-lib') compile project(':grpc-spring-boot-starter') } + +buildscript { + dependencies { + classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}") + } + dependencyManagement { + imports { + mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}" + } + } +} \ No newline at end of file diff --git a/grpc-spring-boot-autoconfigure/build.gradle b/grpc-spring-boot-autoconfigure/build.gradle index 3483259b9..96a90a43c 100644 --- a/grpc-spring-boot-autoconfigure/build.gradle +++ b/grpc-spring-boot-autoconfigure/build.gradle @@ -2,32 +2,11 @@ apply plugin: 'propdeps' apply plugin: 'propdeps-maven' apply plugin: 'propdeps-idea' apply plugin: 'propdeps-eclipse' -apply plugin: 'maven-publish' +apply from: '../deploy.gradle' group = "net.devh" version = "${projectVersion}" -publishing { - publications { - mavenJava(MavenPublication) { - from components.java - } - } - repositories { - maven { - credentials { - username System.getenv('OSSRH_USER') - password System.getenv('OSSRH_PASS') - } - if(project.version.endsWith('SNAPSHOT')) { - url "https://oss.sonatype.org/content/repositories/snapshots" - } else if(project.version.endsWith('RELEASE')) { - url "https://oss.sonatype.org/service/local/staging/deploy/maven2" - } - } - } -} - compileJava.dependsOn(processResources) dependencies { diff --git a/grpc-spring-boot-starter/build.gradle b/grpc-spring-boot-starter/build.gradle index 670d1929c..ba875884f 100644 --- a/grpc-spring-boot-starter/build.gradle +++ b/grpc-spring-boot-starter/build.gradle @@ -1,29 +1,8 @@ -apply plugin: 'maven-publish' +apply from: '../deploy.gradle' group = "net.devh" version = "${projectVersion}" -publishing { - publications { - mavenJava(MavenPublication) { - from components.java - } - } - repositories { - maven { - credentials { - username System.getenv('OSSRH_USER') - password System.getenv('OSSRH_PASS') - } - if(project.version.endsWith('SNAPSHOT')) { - url "https://oss.sonatype.org/content/repositories/snapshots" - } else if(project.version.endsWith('RELEASE')) { - url "https://oss.sonatype.org/service/local/staging/deploy/maven2" - } - } - } -} - dependencies { compile project(':grpc-spring-boot-autoconfigure') } diff --git a/private.key.enc b/private.key.enc new file mode 100644 index 0000000000000000000000000000000000000000..af7f96d605f78e4a77486e5b8051bda6d75c0ecc GIT binary patch literal 3600 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