do website generation in pre-package step

This commit is contained in:
Leonid Shalupov
2012-12-14 19:24:47 +04:00
parent 9f0999c61e
commit fb12605185
2 changed files with 31 additions and 12 deletions
@@ -0,0 +1,96 @@
package org.jetbrains.kotlin.site
import java.io.File
class SiteGeneratorMain {
val srcDir = findTemplateDir()
val siteOutputDir = File(srcDir, "../../../target/site")
val version = System.getProperty("project.version") ?: "SNAPSHOT"
val versionDir = if (version.contains("SNAPSHOT")) "snapshot" else version
fun generateSite(): Unit {
val generator = SiteGenerator(srcDir, siteOutputDir)
generator.run()
}
fun copyApiDocs(): Unit {
val apidocDir = File(siteOutputDir, "../../../apidoc/target/site/apidocs")
assertTrue(apidocDir.exists(), "Directory does not exist ${apidocDir.getCanonicalPath()}")
val outDir = File(siteOutputDir, "versions/$versionDir/apidocs")
println("Copying API docs to $outDir")
copyDocResources(outDir)
copyRecursive(apidocDir, outDir)
// now lets assert that the API docs generated everything
assertFilesExist(outDir, "Expected generate API docs are missing - API doc generation failure",
"kotlin/package-frame.html", "kotlin/dom/package-frame.html", "kotlin/test/package-frame.html")
}
fun copyJSApiDocs(): Unit {
val apidocDir = File(siteOutputDir, "../../../jsdoc/target/site/apidocs")
//assertTrue(apidocDir.exists(), "Directory does not exist ${apidocDir.getCanonicalPath()}")
if (!apidocDir.exists()) {
println("WARNING - no JS API docs available. Though they don't work right now so are optional :)")
return
}
val outDir = File(siteOutputDir, "versions/$versionDir/jsdocs")
println("Copying JavaScript API docs to $outDir")
copyDocResources(outDir)
copyRecursive(apidocDir, outDir)
}
fun copyDocResources(outDir: File): Unit {
val sourceDir = File(srcDir, "../apidocs")
copyRecursive(sourceDir, outDir)
}
// TODO this would make a handy extension function on File :)
fun copyRecursive(sourceDir: File, outDir: File): Unit {
sourceDir.recurse {
if (it.isFile()) {
var relativePath = sourceDir.relativePath(it)
val outFile = File(outDir, relativePath)
outFile.directory.mkdirs()
it.copyTo(outFile)
}
}
}
// TODO this could make a handy test function
fun assertFilesExist(dir: File, message: String, vararg names: String): Unit {
for (name in names) {
val file = File(dir, name)
assertTrue(file.exists(), "${file.getPath()} does not exist. $message")
}
}
fun findTemplateDir(): File {
val path = "src/main/templates"
for (p in arrayList(".", "website", "library/website")) {
val sourceDir = File(".", path)
if (sourceDir.exists()) {
return sourceDir
}
}
throw IllegalArgumentException("Could not find template directory: $path")
}
fun assertTrue(condition: Boolean, message: String): Unit {
if (!condition) {
throw RuntimeException(message);
}
}
}
fun main(args : Array<String>) {
val main = SiteGeneratorMain()
main.generateSite()
main.copyApiDocs()
main.copyJSApiDocs()
}