Skip to content

Commit ba4953b

Browse files
committed
Add Deploy Artifacts Support
Fixes gh-7939
1 parent b87ea13 commit ba4953b

9 files changed

+212
-2
lines changed

bom/build.gradle

+3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
apply plugin: 'maven-bom'
22
apply from: "$rootDir/gradle/maven-deployment.gradle"
3+
apply from: "$rootDir/gradle/artifactory.gradle"
4+
apply from: "$rootDir/gradle/ossrh.gradle"
5+
apply from: "$rootDir/gradle/deploy-artifacts.gradle"
36

47
generatePom.enabled = false
58
sonarqube.skipProject = true

build.gradle

+8-2
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@ buildscript {
1212
classpath('org.asciidoctor:asciidoctor-gradle-plugin:1.5.1')
1313
classpath("io.spring.gradle:docbook-reference-plugin:0.3.1")
1414
classpath("org.springframework.boot:spring-boot-gradle-plugin:1.5.19.RELEASE")
15+
classpath "org.jfrog.buildinfo:build-info-extractor-gradle:4.12.0"
16+
classpath 'org.hidetake:gradle-ssh-plugin:2.10.1'
17+
classpath 'io.codearte.gradle.nexus:gradle-nexus-staging-plugin:0.21.1'
1518
}
1619
}
1720

@@ -20,6 +23,7 @@ plugins {
2023
}
2124

2225
apply plugin: 'base'
26+
apply from: "$rootDir/gradle/finalize-deploy.gradle"
2327

2428
description = 'Spring Security'
2529

@@ -86,7 +90,6 @@ configure(allprojects - javaProjects) {
8690
}
8791

8892
configure(subprojects - coreModuleProjects - project(':spring-security-samples-javaconfig-messages') - project(':spring-security-bom')) {
89-
tasks.findByPath("artifactoryPublish")?.enabled = false
9093
sonarqube {
9194
skipProject = true
9295
}
@@ -102,10 +105,13 @@ configure(javaProjects) {
102105
}
103106
apply from: "$rootDir/gradle/ide.gradle"
104107
apply from: "$rootDir/gradle/release-checks.gradle"
105-
apply from: "$rootDir/gradle/maven-deployment.gradle"
106108
}
107109

108110
configure(coreModuleProjects) {
111+
apply from: "$rootDir/gradle/maven-deployment.gradle"
112+
apply from: "$rootDir/gradle/artifactory.gradle"
113+
apply from: "$rootDir/gradle/ossrh.gradle"
114+
apply from: "$rootDir/gradle/deploy-artifacts.gradle"
109115
apply plugin: 'emma'
110116
apply plugin: 'spring-io'
111117

docs/docs.gradle

+3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
// Docbook and Javadoc building and uploading tasks
22
apply plugin: 'base'
3+
apply from: "$rootDir/gradle/deploy-docs.gradle"
4+
apply from: "$rootDir/gradle/deploy-schema.gradle"
35

46
task docs {
57
dependsOn 'manual:reference', 'apidocs', 'guides:asciidoctor'
@@ -152,6 +154,7 @@ task schemaZip(type: Zip) {
152154
}
153155
assert xsdFile != null
154156
into (shortName) {
157+
duplicatesStrategy 'exclude'
155158
from xsdFile.path
156159
}
157160
}

gradle/artifactory.gradle

+33
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
apply plugin: "com.jfrog.artifactory"
2+
3+
def isSnapshot = version?.matches(/^.*[.-]BUILD-SNAPSHOT$/)
4+
5+
artifactory {
6+
contextUrl = 'https://repo.spring.io'
7+
publish {
8+
repository {
9+
repoKey = isSnapshot ? 'libs-snapshot-local' : 'libs-release-local'
10+
if(project.hasProperty('artifactoryUsername')) {
11+
username = artifactoryUsername
12+
password = artifactoryPassword
13+
}
14+
}
15+
}
16+
}
17+
18+
artifactoryPublish {
19+
publishConfigs 'archives'
20+
publishIvy false
21+
properties = [
22+
'bintray.package': "${project.group}:spring-security",
23+
'bintray.version': "${project.version}"
24+
]
25+
}
26+
27+
artifactory {
28+
publish {
29+
defaults {
30+
publishConfigs('archives')
31+
}
32+
}
33+
}

gradle/deploy-artifacts.gradle

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
def isSnapshot = version?.matches(/^.*[.-]BUILD-SNAPSHOT$/)
2+
3+
task deployArtifacts {
4+
group = 'Deploy tasks'
5+
description = "Deploys the artifacts to either Artifactory or Maven Central"
6+
if(isSnapshot) {
7+
dependsOn "artifactoryPublish"
8+
} else {
9+
dependsOn "uploadArchives"
10+
}
11+
}

gradle/deploy-docs.gradle

+46
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
apply plugin: 'org.hidetake.ssh'
2+
3+
project.ssh.settings {
4+
knownHosts = allowAnyHosts
5+
}
6+
7+
project.remotes {
8+
docs {
9+
role 'docs'
10+
host = 'docs.af.pivotal.io'
11+
user = project.findProperty('deployDocsSshUsername')
12+
if(project.hasProperty('deployDocsSshKeyPath')) {
13+
identity = project.file(project.findProperty('deployDocsSshKeyPath'))
14+
}
15+
if(project.hasProperty('deployDocsSshPassphrase')) {
16+
passphrase = project.findProperty('deployDocsSshPassphrase')
17+
}
18+
}
19+
}
20+
21+
project.task('deployDocs') {
22+
dependsOn 'docsZip'
23+
doFirst {
24+
project.ssh.run {
25+
session(project.remotes.docs) {
26+
def now = System.currentTimeMillis()
27+
def name = project.rootProject.name
28+
def version = project.rootProject.version
29+
def tempPath = "/tmp/${name}-${now}-docs".replaceAll(' ', '_')
30+
execute "mkdir -p $tempPath"
31+
32+
project.tasks.docsZip.outputs.each { o ->
33+
put from: o.files, into: tempPath
34+
}
35+
36+
execute "unzip $tempPath/*.zip -d $tempPath"
37+
38+
def extractPath = "/var/www/domains/springsource.org/www/htdocs/autorepo/docs/${name}/${version}/"
39+
40+
execute "rm -rf $extractPath"
41+
execute "mkdir -p $extractPath"
42+
execute "mv $tempPath/* $extractPath"
43+
}
44+
}
45+
}
46+
}

gradle/deploy-schema.gradle

+50
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
apply plugin: 'org.hidetake.ssh'
2+
3+
project.ssh.settings {
4+
knownHosts = allowAnyHosts
5+
}
6+
7+
project.remotes {
8+
docs {
9+
role 'docs'
10+
host = 'docs.af.pivotal.io'
11+
user = project.findProperty('deployDocsSshUsername')
12+
if(project.hasProperty('deployDocsSshKeyPath')) {
13+
identity = project.file(project.findProperty('deployDocsSshKeyPath'))
14+
}
15+
if(project.hasProperty('deployDocsSshPassphrase')) {
16+
passphrase = project.findProperty('deployDocsSshPassphrase')
17+
}
18+
}
19+
}
20+
21+
project.task('deploySchema') {
22+
dependsOn 'schemaZip'
23+
doFirst {
24+
project.ssh.run {
25+
session(project.remotes.docs) {
26+
def now = System.currentTimeMillis()
27+
def name = project.rootProject.name
28+
def version = project.rootProject.version
29+
def tempPath = "/tmp/${name}-${now}-schema".replaceAll(' ', '_')
30+
31+
execute "mkdir -p $tempPath"
32+
33+
project.tasks.schemaZip.outputs.each { o ->
34+
println "Putting $o.files"
35+
put from: o.files, into: tempPath
36+
}
37+
38+
execute "unzip $tempPath/*.zip -d $tempPath"
39+
40+
def extractPath = "/var/www/domains/springsource.org/www/htdocs/autorepo/schema/${name}/${version}/"
41+
42+
execute "rm -rf $extractPath"
43+
execute "mkdir -p $extractPath"
44+
execute "rm -f $tempPath*.zip"
45+
execute "rm -rf $extractPath*"
46+
execute "mv $tempPath/* $extractPath"
47+
}
48+
}
49+
}
50+
}

gradle/finalize-deploy.gradle

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
def isSnapshot = version?.matches(/^.*[.-]BUILD-SNAPSHOT$/)
2+
def isRelease = !isSnapshot
3+
4+
task finalizeDeployArtifacts {
5+
}
6+
7+
if (isRelease && project.hasProperty("ossrhUsername")) {
8+
project.ext.nexusUsername = project.ossrhUsername
9+
project.ext.nexusPassword = project.ossrhPassword
10+
project.getPluginManager().apply("io.codearte.nexus-staging")
11+
finalizeDeployArtifacts.dependsOn project.tasks.closeAndReleaseRepository
12+
project.nexusStaging.packageGroup = 'org.springframework'
13+
}

gradle/ossrh.gradle

+45
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
def isSnapshot = version?.matches(/^.*[.-]BUILD-SNAPSHOT$/)
2+
def isRelease = !isSnapshot
3+
4+
if(project.hasProperty("signing.keyId") && isRelease) {
5+
sign(project)
6+
}
7+
8+
if(project.hasProperty('ossrhUsername')) {
9+
uploadArchives {
10+
repositories {
11+
mavenDeployer {
12+
repository(url: "https://oss.sonatype.org/service/local/staging/deploy/maven2/") {
13+
authentication(userName: project.ossrhUsername, password: project.ossrhPassword)
14+
}
15+
16+
snapshotRepository(url: "https://oss.sonatype.org/content/repositories/snapshots/") {
17+
authentication(userName: project.ossrhUsername, password: project.ossrhPassword)
18+
}
19+
}
20+
}
21+
}
22+
}
23+
24+
def sign(Project project) {
25+
project.install {
26+
repositories {
27+
mavenDeployer {
28+
beforeDeployment { MavenDeployment deployment -> project.signing.signPom(deployment) }
29+
}
30+
}
31+
}
32+
33+
project.uploadArchives {
34+
repositories {
35+
mavenDeployer {
36+
beforeDeployment { MavenDeployment deployment -> project.signing.signPom(deployment) }
37+
}
38+
}
39+
}
40+
41+
project.signing {
42+
required { project.gradle.taskGraph.hasTask("uploadArchives") }
43+
sign project.configurations.archives
44+
}
45+
}

0 commit comments

Comments
 (0)