/** * To make this script work, you have to set the website_gradleCorePath property in your gradle.properties file */ import groovy.text.SimpleTemplateEngine // to get a clean usePlugin(BasePlugin) repositories { mavenCentral() } configurations { ftpAntTask } dependencies { ftpAntTask module("org.apache.ant:ant-commons-net:1.7.0") { module("commons-net:commons-net:1.4.1") { dependencies("oro:oro:2.0.8@jar") } } } task check << { println(configurations.ftpAntTask.asPath) } webSrcDir = file('src') gradleCoreProperties = GUtil.loadProperties(new File(website_gradleCorePath, Project.GRADLE_PROPERTIES)) String revision = gradleCoreProperties.previousRevision == '0' ? '' : ".$gradleCoreProperties.previousRevision" version = [gradleCoreProperties.previousMajor, gradleCoreProperties.previousMinor].join('.') + revision buildWebsiteDir = new File(buildDir, 'website') task build << { buildWebsiteDir.mkdirs() File webContentSrcDir = new File(webSrcDir, 'content') File webPhpSrcDir = new File(webSrcDir, 'php') def engine = new SimpleTemplateEngine() def binding = [ currentRelease: version, sidebar: engine.createTemplate(new File(webSrcDir, 'sidebar.html')).make(currentRelease: version).toString() ] def skeletonTemplate = engine.createTemplate(new File(webSrcDir, 'skeleton.html')) Closure transformClosure = {File contentFile, String contentAppendix = "" -> logger.info "Processing $contentFile" def contentTemplate = engine.createTemplate(contentFile) String content = contentTemplate.make(binding).toString() content += contentAppendix new File(buildWebsiteDir, contentFile.name).text = skeletonTemplate.make(binding + [content: content, title: extractTitle(contentFile)]).toString() } webContentSrcDir.eachFileMatch(~/^.+?\.html$/, transformClosure) transformClosure("$website_gradleCorePath/build/docs/getting-started.html" as File) transformClosure("$webContentSrcDir/index.php" as File, new File(webPhpSrcDir, "indexPhpNews.php").text) File indexPhp = new File(buildWebsiteDir, "index.php") indexPhp.write(new File(webPhpSrcDir, 'indexPhpHeader.php').text + indexPhp.text) ant { copy(todir: new File(buildWebsiteDir, 'css')) { fileset(dir: new File(webSrcDir, 'css')) } copy(todir: new File(buildWebsiteDir, 'img')) { fileset(dir: new File(webSrcDir, 'img')) } } } String extractTitle(File contentFile) { if (contentFile.name == 'index.php') { return 'Home' } String content = '' + contentFile.text + '' def doc = new XmlParser().parseText(content) title = doc.'**'.h1[0].text().trim() title } createTask('uploadWebsite', dependsOn: 'build') { ftp(action: 'delete') { fileset() { include(name: '*.html') } } ftp(action: 'send') { fileset(dir: buildWebsiteDir) } } void ftp(Map args, Closure antFileset = {}) { ant { taskdef(name: 'ftp', classname: 'org.apache.tools.ant.taskdefs.optional.net.FTP', classpath: configurations.ftpAntTask.asPath) Map ftpArgs = args + [ server: 'ftp.gradle.org', userid: websiteFtpUserName, password: websiteFtpUserPassword ] delegate.ftp(ftpArgs) { antFileset.delegate = delegate antFileset() } } }