blob: e090c30f8d3ef8e17f4ec37e402950f8febca6e5 [file] [log] [blame]
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with this
# work for additional information regarding copyright ownership. The ASF
# licenses this file to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations under
# the License.
begin
gem 'rdoc'
require 'rdoc/task'
desc 'Creates a symlink to rake' 's lib directory to support combined rdoc generation'
file 'rake/lib' do
rake_path = $LOAD_PATH.find { |p| File.exist? File.join(p, 'rake.rb') }
mkdir_p 'rake'
File.symlink(rake_path, 'rake/lib')
end
desc 'Generate RDoc documentation in rdoc/'
RDoc::Task.new :rdoc do |rdoc|
rdoc.rdoc_dir = 'rdoc'
rdoc.title = spec.name
rdoc.options = spec.rdoc_options.clone
rdoc.rdoc_files.include('lib/**/*.rb')
rdoc.rdoc_files.include spec.extra_rdoc_files
# include rake source for better inheritance rdoc
rdoc.rdoc_files.include('rake/lib/**.rb')
end
task 'rdoc' => %w(rake/lib)
require 'jekylltask'
module TocFilter
def toc(input)
output = "<ol class=\"toc\">"
input.scan(/<(h2)(?:>|\s+(.*?)>)([^<]*)<\/\1\s*>/mi).each do |entry|
id = (entry[1][/^id=(['"])(.*)\1$/, 2] rescue nil)
title = entry[2].gsub(/<(\w*).*?>(.*?)<\/\1\s*>/m, '\2').strip
if id
output << %{<li><a href="##{id}">#{title}</a></li>}
else
output << %{<li>#{title}</li>}
end
end
output << '</ol>'
output
end
end
Liquid::Template.register_filter(TocFilter)
desc 'Generate Buildr documentation in _site/'
JekyllTask.new 'jekyll' do |task|
task.source = 'doc'
task.target = '_site'
end
if 0 == system('pygmentize -V > /dev/null 2> /dev/null')
puts 'Buildr uses the Pygments python library. You can install it by running ' 'sudo easy_install Pygments' ' or ' 'sudo apt-get install python-pygments' ''
end
desc 'Generate Buildr documentation as buildr.pdf'
file 'buildr.pdf' => '_site' do |task|
pages = File.read('_site/preface.html').scan(/<li><a href=['"]([^'"]+)/).flatten.map { |f| "_site/#{f}" }
sh 'prince', '--input=html', '--no-network', '--log=prince_errors.log', "--output=#{task.name}", '_site/preface.html', *pages
end
desc 'Build a copy of the Web site in the ./_site'
task 'site' => ['_site', :rdoc, 'buildr.pdf'] do
cp_r 'rdoc', '_site'
fail 'No RDocs in site directory' unless File.exist?('_site/rdoc/Buildr.html')
cp 'CHANGELOG', '_site'
open('_site/.htaccess', 'w') do |htaccess|
htaccess << %Q{
<FilesMatch "CHANGELOG">
ForceType 'text/plain; charset=UTF-8'
</FilesMatch>
}
end
cp 'buildr.pdf', '_site'
fail 'No PDF in site directory' unless File.exist?('_site/buildr.pdf')
puts 'OK'
end
# Publish prerequisites to Web site.
desc "Publish complete web site"
task 'publish' => %w(site setup-local-site-svn) do
puts "Uploading new site ..."
sh 'rsync', '--progress', '--recursive', '--delete', '--exclude=.svn','_site/', 'site'
task('publish-site-svn').invoke
puts 'Done'
end
# Update HTML + PDF documentation (but not rdoc, changelog etc.)
desc "Publish non-release specific documentation to web site"
task 'publish-doc' => %w(buildr.pdf _site setup-local-site-svn) do
cp 'buildr.pdf', '_site'
puts 'Uploading new site ...'
sh 'rsync', '--progress', '--recursive', '_site/', 'site' # Note: no --delete
task('publish-site-svn').invoke
puts 'Done'
end
task 'publish-site-svn' do
cd 'site'
sh 'svn', 'add', '--force', '.'
cd '..'
sh 'svn', 'commit', 'site', '-m', 'Publish latest site'
end
desc 'Checkout or update site to local directory'
task 'setup-local-site-svn' do
if File.exist?('site')
sh 'svn', 'up', 'site'
sh 'svn', 'revert', '--recursive', 'site'
else
sh 'svn', 'co', 'https://svn.apache.org/repos/asf/buildr/site', 'site'
end
end
rescue Exception => e
# The doc tasks do not work on our CI infrastructure with jruby as the native libraries
# are not compatible with version of the C++ library we are running there
end
task 'clobber' do
rm_f 'rake/lib'
rm_rf 'rake'
rm_rf 'rdoc'
rm_rf 'site'
rm_rf '_site'
rm_f 'buildr.pdf'
rm_f 'prince_errors.log'
end