| 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 |