Prior to this change, a graphical Ivy-branded authentication dialog was appearing when attepmting to scp the docs zip file to static.springframework.org. This was because the 'keyFile' property of the uploadArchives task was not being set. It is being set correctly now, based on the value of the 'sshPrivateKey' project property that must be set in gradle.properties. This value has been set on the build server's gradle.properties file, such that the INT-NIGHTLY build can succeed in pushing docs during the build.
239 lines
8.4 KiB
Groovy
239 lines
8.4 KiB
Groovy
/*
|
|
* Copyright 2002-2010 the original author or authors.
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
apply plugin: 'base'
|
|
apply from: "$rootDir/gradle/docbook.gradle"
|
|
|
|
description = "Spring Integration Documentation"
|
|
|
|
task build(dependsOn: assemble) {
|
|
group = 'Build'
|
|
description = 'Builds reference and API documentation and archives'
|
|
}
|
|
|
|
|
|
/**
|
|
* Build aggregated JavaDoc HTML for all core project classes. Result is
|
|
* suitable for packaging into a distribution zip or viewing directly with
|
|
* a browser.
|
|
*
|
|
* @author Chris Beams
|
|
* @author Luke Taylor
|
|
* @see http://gradle.org/0.9-rc-1/docs/javadoc/org/gradle/api/tasks/javadoc/Javadoc.html
|
|
*/
|
|
task api(type: Javadoc) {
|
|
group = 'Documentation'
|
|
description = "Builds aggregated JavaDoc HTML for all core project classes."
|
|
|
|
// this task is a bit ugly to configure. it was a user contribution, and
|
|
// Hans tells me it's on the roadmap to redesign it.
|
|
srcDir = file("${projectDir}/src/api")
|
|
destinationDir = file("${buildDir}/api")
|
|
tmpDir = file("${buildDir}/api-work")
|
|
optionsFile = file("${tmpDir}/apidocs/javadoc.options")
|
|
options.stylesheetFile = file("${srcDir}/spring-javadoc.css")
|
|
options.links = ["http://static.springframework.org/spring/docs/3.0.x/javadoc-api"]
|
|
options.overview = "${srcDir}/overview.html"
|
|
options.docFilesSubDirs = true
|
|
title = "Spring Integration ${version} API"
|
|
|
|
// collect all the sources that will be included in the javadoc output
|
|
source javaprojects.collect {project ->
|
|
project.sourceSets.main.allJava
|
|
}
|
|
|
|
// collect all main classpaths to be able to resolve @see refs, etc.
|
|
// this collection also determines the set of projects that this
|
|
// task dependsOn, thus the runtimeClasspath is used to ensure all
|
|
// projects are included, not just *dependencies* of all classes.
|
|
// this is awkward and took me a while to figure out.
|
|
classpath = files(javaprojects.collect {project ->
|
|
project.sourceSets.main.runtimeClasspath
|
|
})
|
|
|
|
// copy the images from the doc-files dir over to the target
|
|
doLast { task ->
|
|
copy {
|
|
from file("${task.srcDir}/doc-files")
|
|
into file("${task.destinationDir}/doc-files")
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Expand ${...} variables within docbook sources. This is a workaround
|
|
* accomodating the fact that the current docbook plugin has no way of
|
|
* parameterizing and replacing normal XML entities.
|
|
*
|
|
* Note that this task represents an implementation detail and it is
|
|
* unfortunate that it pollutes the listing of available tasks, e.g.
|
|
* during `gradle -t`. It's a good example of the need for 'task visibility' -
|
|
* a feature not yet implemented, but on the Gradle roadmap.
|
|
*
|
|
* @author Chris Beams
|
|
* @see http://jira.codehaus.org/browse/GRADLE-1026
|
|
*/
|
|
task preprocessDocbookSources {
|
|
description = 'Expands ${...} variables within docbook sources.'
|
|
|
|
doLast {
|
|
docbookSrcDir = file('src/reference/docbook')
|
|
docbookResourceDir = file('src/reference/resources/')
|
|
docbookWorkDir = file('build/reference-work')
|
|
|
|
// copy everything but index.xml
|
|
copy {
|
|
into(docbookWorkDir)
|
|
from(docbookSrcDir) { exclude '**/index.xml' }
|
|
}
|
|
copy {
|
|
into(docbookWorkDir)
|
|
from(docbookResourceDir)
|
|
}
|
|
// copy index.xml and expand ${...} variables along the way
|
|
// e.g.: ${version} needs to be replaced in the header
|
|
copy {
|
|
into(docbookWorkDir)
|
|
from(docbookSrcDir) { include '**/index.xml' }
|
|
expand(version: "$version")
|
|
}
|
|
}
|
|
}
|
|
|
|
// -----------------------------------------------------------------------------
|
|
// Configure the three docbook* tasks that are added to the project by the
|
|
// 'docbook' plugin.
|
|
// -----------------------------------------------------------------------------
|
|
task reference(dependsOn: [docbookHtml, docbookHtmlSingle, docbookPdf]) {
|
|
group = 'Documentation'
|
|
description = 'Generates all HTML and PDF reference documentation.'
|
|
|
|
doLast {
|
|
// copy images and css into respective html dirs
|
|
['html', 'htmlsingle'].each { dir ->
|
|
copy {
|
|
into "${buildDir}/reference/${dir}/images"
|
|
from "src/reference/resources/images"
|
|
}
|
|
copy {
|
|
into "${buildDir}/reference/${dir}/css"
|
|
from "src/reference/resources/css"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
[docbookHtml, docbookPdf, docbookHtmlSingle]*.sourceFileName = 'index.xml';
|
|
[docbookHtml, docbookHtmlSingle, docbookPdf]*.dependsOn preprocessDocbookSources
|
|
|
|
docbookHtml.stylesheet = file('src/reference/resources/xsl/html-custom.xsl')
|
|
docbookHtmlSingle.stylesheet = file('src/reference/resources/xsl/html-single-custom.xsl')
|
|
docbookPdf.stylesheet = file('src/reference/resources/xsl/pdf-custom.xsl')
|
|
def imagesDir = file('src/reference/resources/images');
|
|
docbookPdf.admonGraphicsPath = "${imagesDir}/"
|
|
|
|
|
|
/**
|
|
*
|
|
* @see http://www.gradle.org/0.9-preview-3/docs/userguide/userguide_single.html#sec:copying_files
|
|
* @see http://www.gradle.org/0.9-preview-3/docs/javadoc/org/gradle/api/file/CopySpec.html
|
|
*/
|
|
docsSpec = copySpec {
|
|
into("${version}") {
|
|
from('src/info/changelog.txt')
|
|
}
|
|
|
|
into("${version}/api") {
|
|
from(api.destinationDir)
|
|
}
|
|
|
|
into("${version}/reference") {
|
|
from("${buildDir}/reference")
|
|
}
|
|
}
|
|
|
|
task archive(type: Zip, dependsOn: [api, reference]) {
|
|
group = "Documentation"
|
|
description = "Create a zip archive of reference and API documentation."
|
|
|
|
baseName = rootProject.name + '-docs'
|
|
|
|
// drop it right in the root of the build dir for simplicity
|
|
destinationDir = buildDir
|
|
|
|
// use the copy spec above to specify the contents of the zip
|
|
with docsSpec
|
|
}
|
|
|
|
configurations { archives }
|
|
artifacts { archives archive }
|
|
|
|
configurations { scpAntTask }
|
|
dependencies {
|
|
scpAntTask("org.apache.ant:ant-jsch:1.8.1")
|
|
}
|
|
|
|
checkForProps(taskPath: project.path + ':uploadArchives', requiredProps: ['sshHost', 'sshUsername', 'sshPrivateKey'])
|
|
|
|
uploadArchives {
|
|
def sshHost = project.properties.sshHost
|
|
def sshUsername = project.properties.sshUsername
|
|
def remoteSiteDir = '/var/www/domains/springframework.org/static/htdocs/' + rootProject.name
|
|
def docUrl = "http://${sshHost}/${rootProject.name}/docs/${version}"
|
|
def remoteDocsDir = "${remoteSiteDir}/docs/"
|
|
def fqRemoteDir = "${sshUsername}@${sshHost}:${remoteDocsDir}"
|
|
|
|
group = 'Buildmaster'
|
|
description = "Uploads and unpacks documentation archive" + (sshHost ? " to ${docUrl}" : ": Host is not specified")
|
|
|
|
uploadDescriptor = false
|
|
|
|
repositories {
|
|
add(new org.apache.ivy.plugins.resolver.SshResolver()) {
|
|
name = 'sshHost: ' + sshHost // used for debugging
|
|
host = sshHost
|
|
user = sshUsername
|
|
keyFile = sshPrivateKey as File
|
|
addArtifactPattern "${remoteDocsDir}/${archive.archiveName}"
|
|
}
|
|
}
|
|
|
|
configurations { scpAntTask }
|
|
dependencies { scpAntTask 'org.apache.ant:ant-jsch:1.8.1' }
|
|
|
|
doFirst {
|
|
println "Uploading: ${archive.archivePath} to ${fqRemoteDir}"
|
|
}
|
|
|
|
doLast {
|
|
project.ant {
|
|
taskdef(name: 'sshexec',
|
|
classname: 'org.apache.tools.ant.taskdefs.optional.ssh.SSHExec',
|
|
classpath: configurations.scpAntTask.asPath)
|
|
|
|
// copy the archive, unpack it, then delete it
|
|
def unpackCommand = "cd ${remoteDocsDir} && unzip -o ${archive.archiveName}"
|
|
def deleteCommand = "rm ${remoteDocsDir}/${archive.archiveName}"
|
|
|
|
println "sshexec ${unpackCommand}"
|
|
sshexec(host: sshHost, username: sshUsername, keyfile: sshPrivateKey, command: unpackCommand)
|
|
println "sshexec ${deleteCommand}"
|
|
sshexec(host: sshHost, username: sshUsername, keyfile: sshPrivateKey, command: deleteCommand)
|
|
println "UPLOAD SUCCESSFUL - validate by visiting ${docUrl}"
|
|
}
|
|
}
|
|
}
|