248 lines
9.1 KiB
Groovy
248 lines
9.1 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
|
|
if (project.hasProperty('sshPrivateKey')) {
|
|
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} && rm -rf ${version} && unzip -qKo ${archive.archiveName} && rm ${archive.archiveName}"
|
|
def wildcardSymlinkCommand = "cd ${remoteDocsDir} && rm -f ${version.wildcardValue} && ln -s ${version} ${version.wildcardValue}"
|
|
def latestGASymlinkCommand = "cd ${remoteDocsDir} && rm -f latest-ga && ln -s ${version} latest-ga"
|
|
|
|
println "Unpacking docs archive: (${unpackCommand})"
|
|
sshexec(host: sshHost, username: sshUsername, keyfile: sshPrivateKey, command: unpackCommand)
|
|
if (version.releaseType != 'SNAPSHOT') {
|
|
println "Creating wildcard symlink: (${wildcardSymlinkCommand})"
|
|
sshexec(host: sshHost, username: sshUsername, keyfile: sshPrivateKey, command: wildcardSymlinkCommand)
|
|
}
|
|
if (version.releaseType == 'RELEASE') {
|
|
println "Creating latest-ga symlink: (${latestGASymlinkCommand})"
|
|
sshexec(host: sshHost, username: sshUsername, keyfile: sshPrivateKey, command: latestGASymlinkCommand)
|
|
}
|
|
println "UPLOAD SUCCESSFUL - validate by visiting ${docUrl}"
|
|
}
|
|
}
|
|
}
|