blob: 31ef6ffe225ce7ddc573054058af1070b9e96b09 [file] [log] [blame]
require 'rubygems'
require 'rake/clean'
require 'fileutils'
task :default => [:update_docs, :doxygen, :javadoc, :build, :clean]
CLEAN.include("**/.DS_Store")
desc "Build the website from source"
task :build do
puts "Building website from static source"
result = system("middleman build --clean")
if result
puts "Successfully generated the site, please commit your changes"
else
puts "An error was encountered when generating the site"
end
end
desc "Update the latest docs from the Apache Mesos codebase"
task :update_docs do
puts "Updating latest documentation from the Apache Mesos codebase"
docs_dir = File.join(File.dirname(__FILE__), "source/documentation")
puts "Updating docs to the latest version"
FileUtils.mkdir_p("source/documentation/latest/")
FileUtils.rm_rf(Dir.glob("source/documentation/latest/*"))
FileUtils.cp_r(FileList['../docs/**'].exclude("../docs/images"), File.expand_path("source/documentation/latest/"))
# Due to a limitation in middleman, it doesn't support .md files
# named (e.g. state.json.md). Middlman would generate an *html* file
# called state.json from this instead of generating the standard
# state.json/index.html like it does for other .md files.
puts "Migrating markdown files with paths matching **/*.json.md to **/*.json/index.md"
Dir.chdir("#{docs_dir}/latest/") {
Dir.glob('**/*.json.md').each { |doc|
docdir = doc.chomp(".md")
FileUtils.mkdir(docdir)
FileUtils.mv(doc, docdir + "/index.md")
}
}
puts "Parse documentation files to removing md extension in any links"
Dir.chdir("#{docs_dir}/latest/") {
Dir.glob('**/*.md').each { |doc|
puts "working on: #{doc}"
# TODO(klueska): we really need to get rid of this complicated
# regular expression and add in some logic that is more easily
# understood.
docdir = File.dirname(doc)
IO.write(doc, File.open(doc) { |f|
f.read
.gsub(/\((?!http)([^(]+?)(?:\/index)?\.md(\#.+?)?\)/, "(/documentation/latest/#{docdir}/" + '\1/\2)')
.gsub(/<a href=\"([^\/]+)\.md\">/, "<a href=\"/documentation/latest/#{docdir}/" + '\1/\2">')
.gsub(/\(images\/(.*)\)/, '(/assets/img/documentation/\1)')
})
}
}
puts "Moving documentation index to its own 'latest' directory"
FileUtils.mv("source/documentation/latest/home.md", "source/documentation/latest.html.md")
puts "Documentation updated"
# Copy the images from the docs
FileUtils.mkdir_p("source/assets/img/documentation/")
FileUtils.rm_f(Dir.glob("source/assets/img/documentation/*"))
FileUtils.cp_r(Dir.glob("../docs/images/*"), File.expand_path("source/assets/img/documentation/"))
end
desc "Generate javadoc from the Java source files in the codebase"
task :javadoc do
proto_java_folder = "../build/src/java/generated"
if not File.directory?(proto_java_folder)
raise "Please make sure Java proto files are generated in #{proto_java_folder} folder."
end
# TODO: add version to the path. Uses 'current' for now.
system("javadoc -d source/api/latest/java -sourcepath ../src/java/src:#{proto_java_folder} -notimestamp org.apache.mesos")
end
desc "Generate doxygen from the C++ source files in the codebase"
task :doxygen do
FileUtils.rm_rf(Dir.glob("source/api/latest/c++"))
FileUtils.mkdir_p("source/api/latest")
system("doxygen ../Doxyfile && mv doxygen/html source/api/latest/c++ && rm -rf doxygen")
end
desc "Clean up generated documents"
task :clean_docs do
FileUtils.rm_rf(Dir.glob("source/api"))
FileUtils.rm_rf(Dir.glob("source/documentation"))
FileUtils.rm_rf(Dir.glob("source/assets/img/documentation"))
end
desc "Run the site in development mode. Preview available at http://localhost:4567/"
task :dev do
system("middleman server")
end