Add Deploy Artifacts Support

Fixes gh-7939
This commit is contained in:
Rob Winch 2020-02-05 20:19:02 -06:00
parent b87ea1373d
commit ba4953b057
9 changed files with 212 additions and 2 deletions

View File

@ -1,5 +1,8 @@
apply plugin: 'maven-bom'
apply from: "$rootDir/gradle/maven-deployment.gradle"
apply from: "$rootDir/gradle/artifactory.gradle"
apply from: "$rootDir/gradle/ossrh.gradle"
apply from: "$rootDir/gradle/deploy-artifacts.gradle"
generatePom.enabled = false
sonarqube.skipProject = true

View File

@ -12,6 +12,9 @@ buildscript {
classpath('org.asciidoctor:asciidoctor-gradle-plugin:1.5.1')
classpath("io.spring.gradle:docbook-reference-plugin:0.3.1")
classpath("org.springframework.boot:spring-boot-gradle-plugin:1.5.19.RELEASE")
classpath "org.jfrog.buildinfo:build-info-extractor-gradle:4.12.0"
classpath 'org.hidetake:gradle-ssh-plugin:2.10.1'
classpath 'io.codearte.gradle.nexus:gradle-nexus-staging-plugin:0.21.1'
}
}
@ -20,6 +23,7 @@ plugins {
}
apply plugin: 'base'
apply from: "$rootDir/gradle/finalize-deploy.gradle"
description = 'Spring Security'
@ -86,7 +90,6 @@ configure(allprojects - javaProjects) {
}
configure(subprojects - coreModuleProjects - project(':spring-security-samples-javaconfig-messages') - project(':spring-security-bom')) {
tasks.findByPath("artifactoryPublish")?.enabled = false
sonarqube {
skipProject = true
}
@ -102,10 +105,13 @@ configure(javaProjects) {
}
apply from: "$rootDir/gradle/ide.gradle"
apply from: "$rootDir/gradle/release-checks.gradle"
apply from: "$rootDir/gradle/maven-deployment.gradle"
}
configure(coreModuleProjects) {
apply from: "$rootDir/gradle/maven-deployment.gradle"
apply from: "$rootDir/gradle/artifactory.gradle"
apply from: "$rootDir/gradle/ossrh.gradle"
apply from: "$rootDir/gradle/deploy-artifacts.gradle"
apply plugin: 'emma'
apply plugin: 'spring-io'

View File

@ -1,5 +1,7 @@
// Docbook and Javadoc building and uploading tasks
apply plugin: 'base'
apply from: "$rootDir/gradle/deploy-docs.gradle"
apply from: "$rootDir/gradle/deploy-schema.gradle"
task docs {
dependsOn 'manual:reference', 'apidocs', 'guides:asciidoctor'
@ -152,6 +154,7 @@ task schemaZip(type: Zip) {
}
assert xsdFile != null
into (shortName) {
duplicatesStrategy 'exclude'
from xsdFile.path
}
}

33
gradle/artifactory.gradle Normal file
View File

@ -0,0 +1,33 @@
apply plugin: "com.jfrog.artifactory"
def isSnapshot = version?.matches(/^.*[.-]BUILD-SNAPSHOT$/)
artifactory {
contextUrl = 'https://repo.spring.io'
publish {
repository {
repoKey = isSnapshot ? 'libs-snapshot-local' : 'libs-release-local'
if(project.hasProperty('artifactoryUsername')) {
username = artifactoryUsername
password = artifactoryPassword
}
}
}
}
artifactoryPublish {
publishConfigs 'archives'
publishIvy false
properties = [
'bintray.package': "${project.group}:spring-security",
'bintray.version': "${project.version}"
]
}
artifactory {
publish {
defaults {
publishConfigs('archives')
}
}
}

View File

@ -0,0 +1,11 @@
def isSnapshot = version?.matches(/^.*[.-]BUILD-SNAPSHOT$/)
task deployArtifacts {
group = 'Deploy tasks'
description = "Deploys the artifacts to either Artifactory or Maven Central"
if(isSnapshot) {
dependsOn "artifactoryPublish"
} else {
dependsOn "uploadArchives"
}
}

46
gradle/deploy-docs.gradle Normal file
View File

@ -0,0 +1,46 @@
apply plugin: 'org.hidetake.ssh'
project.ssh.settings {
knownHosts = allowAnyHosts
}
project.remotes {
docs {
role 'docs'
host = 'docs.af.pivotal.io'
user = project.findProperty('deployDocsSshUsername')
if(project.hasProperty('deployDocsSshKeyPath')) {
identity = project.file(project.findProperty('deployDocsSshKeyPath'))
}
if(project.hasProperty('deployDocsSshPassphrase')) {
passphrase = project.findProperty('deployDocsSshPassphrase')
}
}
}
project.task('deployDocs') {
dependsOn 'docsZip'
doFirst {
project.ssh.run {
session(project.remotes.docs) {
def now = System.currentTimeMillis()
def name = project.rootProject.name
def version = project.rootProject.version
def tempPath = "/tmp/${name}-${now}-docs".replaceAll(' ', '_')
execute "mkdir -p $tempPath"
project.tasks.docsZip.outputs.each { o ->
put from: o.files, into: tempPath
}
execute "unzip $tempPath/*.zip -d $tempPath"
def extractPath = "/var/www/domains/springsource.org/www/htdocs/autorepo/docs/${name}/${version}/"
execute "rm -rf $extractPath"
execute "mkdir -p $extractPath"
execute "mv $tempPath/* $extractPath"
}
}
}
}

View File

@ -0,0 +1,50 @@
apply plugin: 'org.hidetake.ssh'
project.ssh.settings {
knownHosts = allowAnyHosts
}
project.remotes {
docs {
role 'docs'
host = 'docs.af.pivotal.io'
user = project.findProperty('deployDocsSshUsername')
if(project.hasProperty('deployDocsSshKeyPath')) {
identity = project.file(project.findProperty('deployDocsSshKeyPath'))
}
if(project.hasProperty('deployDocsSshPassphrase')) {
passphrase = project.findProperty('deployDocsSshPassphrase')
}
}
}
project.task('deploySchema') {
dependsOn 'schemaZip'
doFirst {
project.ssh.run {
session(project.remotes.docs) {
def now = System.currentTimeMillis()
def name = project.rootProject.name
def version = project.rootProject.version
def tempPath = "/tmp/${name}-${now}-schema".replaceAll(' ', '_')
execute "mkdir -p $tempPath"
project.tasks.schemaZip.outputs.each { o ->
println "Putting $o.files"
put from: o.files, into: tempPath
}
execute "unzip $tempPath/*.zip -d $tempPath"
def extractPath = "/var/www/domains/springsource.org/www/htdocs/autorepo/schema/${name}/${version}/"
execute "rm -rf $extractPath"
execute "mkdir -p $extractPath"
execute "rm -f $tempPath*.zip"
execute "rm -rf $extractPath*"
execute "mv $tempPath/* $extractPath"
}
}
}
}

View File

@ -0,0 +1,13 @@
def isSnapshot = version?.matches(/^.*[.-]BUILD-SNAPSHOT$/)
def isRelease = !isSnapshot
task finalizeDeployArtifacts {
}
if (isRelease && project.hasProperty("ossrhUsername")) {
project.ext.nexusUsername = project.ossrhUsername
project.ext.nexusPassword = project.ossrhPassword
project.getPluginManager().apply("io.codearte.nexus-staging")
finalizeDeployArtifacts.dependsOn project.tasks.closeAndReleaseRepository
project.nexusStaging.packageGroup = 'org.springframework'
}

45
gradle/ossrh.gradle Normal file
View File

@ -0,0 +1,45 @@
def isSnapshot = version?.matches(/^.*[.-]BUILD-SNAPSHOT$/)
def isRelease = !isSnapshot
if(project.hasProperty("signing.keyId") && isRelease) {
sign(project)
}
if(project.hasProperty('ossrhUsername')) {
uploadArchives {
repositories {
mavenDeployer {
repository(url: "https://oss.sonatype.org/service/local/staging/deploy/maven2/") {
authentication(userName: project.ossrhUsername, password: project.ossrhPassword)
}
snapshotRepository(url: "https://oss.sonatype.org/content/repositories/snapshots/") {
authentication(userName: project.ossrhUsername, password: project.ossrhPassword)
}
}
}
}
}
def sign(Project project) {
project.install {
repositories {
mavenDeployer {
beforeDeployment { MavenDeployment deployment -> project.signing.signPom(deployment) }
}
}
}
project.uploadArchives {
repositories {
mavenDeployer {
beforeDeployment { MavenDeployment deployment -> project.signing.signPom(deployment) }
}
}
}
project.signing {
required { project.gradle.taskGraph.hasTask("uploadArchives") }
sign project.configurations.archives
}
}