diff --git a/build.gradle b/build.gradle index b5af8f43..60d8c051 100644 --- a/build.gradle +++ b/build.gradle @@ -6,6 +6,9 @@ buildscript { classpath("org.springframework.build.gradle:propdeps-plugin:0.0.7") classpath('org.asciidoctor:asciidoctor-gradle-plugin:1.5.1') classpath("io.spring.gradle:spring-io-plugin:0.0.6.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.10.0' } } @@ -16,6 +19,7 @@ plugins { apply plugin: 'org.asciidoctor.gradle.asciidoctor' ext.GRADLE_SCRIPT_DIR = "${rootProject.projectDir}/gradle" +apply from: "${GRADLE_SCRIPT_DIR}/finalize-deploy.gradle" ext.JAVA_MODULE_SCRIPT = "${GRADLE_SCRIPT_DIR}/java-module.gradle" ext.MAVEN_DEPLOYMENT_SCRIPT = "${GRADLE_SCRIPT_DIR}/maven-deployment.gradle" ext.JAVA_SCRIPT = "${GRADLE_SCRIPT_DIR}/java.gradle" diff --git a/gradle/artifactory.gradle b/gradle/artifactory.gradle new file mode 100644 index 00000000..bb249dfe --- /dev/null +++ b/gradle/artifactory.gradle @@ -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') + } + } +} diff --git a/gradle/deploy-artifacts.gradle b/gradle/deploy-artifacts.gradle new file mode 100644 index 00000000..e07ae02b --- /dev/null +++ b/gradle/deploy-artifacts.gradle @@ -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" + } +} diff --git a/gradle/deploy-docs.gradle b/gradle/deploy-docs.gradle new file mode 100644 index 00000000..0e9c3996 --- /dev/null +++ b/gradle/deploy-docs.gradle @@ -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" + } + } + } +} diff --git a/gradle/deploy-schema.gradle b/gradle/deploy-schema.gradle new file mode 100644 index 00000000..6f18d592 --- /dev/null +++ b/gradle/deploy-schema.gradle @@ -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" + } + } + } +} diff --git a/gradle/finalize-deploy.gradle b/gradle/finalize-deploy.gradle new file mode 100644 index 00000000..cb4c2491 --- /dev/null +++ b/gradle/finalize-deploy.gradle @@ -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' +} diff --git a/gradle/java-module.gradle b/gradle/java-module.gradle index 8417d0bb..e508340c 100644 --- a/gradle/java-module.gradle +++ b/gradle/java-module.gradle @@ -3,6 +3,9 @@ apply from: MAVEN_DEPLOYMENT_SCRIPT apply from: RELEASE_CHECKS_SCRIPT apply from: SPRING_SNAPSHOT_TEST_SCRIPT apply plugin: 'spring-io' +apply from: "${GRADLE_SCRIPT_DIR}/artifactory.gradle" +apply from: "${GRADLE_SCRIPT_DIR}/ossrh.gradle" +apply from: "${GRADLE_SCRIPT_DIR}/deploy-artifacts.gradle" ext.springIoVersion = project.hasProperty('platformVersion') ? platformVersion : 'Athens-RELEASE' diff --git a/gradle/maven-deployment.gradle b/gradle/maven-deployment.gradle index 5a5f0c66..58095c12 100644 --- a/gradle/maven-deployment.gradle +++ b/gradle/maven-deployment.gradle @@ -4,6 +4,12 @@ install { customizePom(repositories.mavenInstaller.pom, project) } +uploadArchives { + repositories.mavenDeployer { + customizePom(pom, project) + } +} + def customizePom(pom, gradleProject) { def isWar = project.hasProperty('war') def projectName = gradleProject.name diff --git a/gradle/ossrh.gradle b/gradle/ossrh.gradle new file mode 100644 index 00000000..cbff4d15 --- /dev/null +++ b/gradle/ossrh.gradle @@ -0,0 +1,46 @@ +def isSnapshot = version?.matches(/^.*[.-]BUILD-SNAPSHOT$/) +def isRelease = !isSnapshot + +if(project.hasProperty("signing.keyId") && isRelease) { + apply plugin: "signing" + 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 + } +}