require "time" desc "Build the manual" task :man do ENV['RONN_MANUAL'] = "Foreman Manual" ENV['RONN_ORGANIZATION'] = "Foreman #{Foreman::VERSION}" sh "ronn -w -s toc -r5 --markdown man/*.ronn" end desc "Commit the manual to git" task "man:commit" => :man do sh "git add README.md" sh "git commit -am 'update docs' || echo 'nothing to commit'" end desc "Generate the Github docs" task :pages => "man:commit" do sh %{ cp man/foreman.1.html /tmp/foreman.1.html git checkout gh-pages rm ./index.html cp /tmp/foreman.1.html ./index.html git add -u index.html git commit -m "saving man page to github docs" git push origin -f gh-pages git checkout master } end desc "Generate an authors list" task :authors do authors = %x{ git log --pretty=format:"%an" | sort -u }.split("\n") readme = File.read("README.md") readme.gsub!(/#### Patches contributed by\n([^\n]*)\n/m, "#### Patches contributed by\n#{authors.join(", ")}\n") File.open("README.md", "w") { |f| f.print readme } end def latest_release latest = File.read("Changelog.md").split("\n").first.split(" ")[1] end def newer_release tags = %x{ git tag --contains v#{latest_release} }.split("\n").sort_by do |tag| Gem::Version.new(tag[1..-1]) end tags.reject { |tag| Gem::Version.new(tag[1..-1]).prerelease? }[1] end desc "Generate a Changelog" task :changelog do while release = newer_release entry = %x{ git show --format="%cd" #{release} | head -n 1 } date = Time.parse(entry.chomp).strftime("%Y-%m-%d") message = "## #{release[1..-1]} (#{date})\n\n" message += %x{ git log --format="* %s [%an]" v#{latest_release}..#{release} } changelog = File.read("Changelog.md") changelog = message + "\n" + changelog puts release File.open("Changelog.md", "w") do |file| file.print changelog end end end desc "Cut a release" task :release do Rake::Task["authors"].invoke Rake::Task["changelog"].invoke Rake::Task["pages"].invoke end