Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 21 additions & 0 deletions README.asc
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,27 @@ Converting to PDF...
-- PDF output at progit.pdf
----

You can generate just one of the supported formats (HTML, EPUB, or PDF).
Use one of the following commands:

To generate the HTML book:

----
$ bundle exec rake book:build_html
----

To generate the EPUB book:

----
$ bundle exec rake book:build_epub
----

To generate the PDF book:

----
$ bundle exec rake book:build_pdf
----

== Signaling an Issue

Before signaling an issue, please check that there isn't already a similar one in the bug tracking system.
Expand Down
124 changes: 106 additions & 18 deletions Rakefile
Original file line number Diff line number Diff line change
Expand Up @@ -6,31 +6,84 @@ namespace :book do
end
end

desc 'build basic book formats'
task :build do
# Variables referenced for build
version_string = ENV['TRAVIS_TAG'] || `git describe --tags`.chomp
if version_string.empty?
version_string = '0'
end
date_string = Time.now.strftime('%Y-%m-%d')
params = "--attribute revnumber='#{version_string}' --attribute revdate='#{date_string}'"
header_hash = `git rev-parse --short HEAD`.strip

begin
version_string = ENV['TRAVIS_TAG'] || `git describe --tags`.chomp
if version_string.empty?
version_string = '0'
# Check contributors list
# This checks commit hash stored in the header of list against current HEAD
def check_contrib
if File.exist?('book/contributors.txt')
current_head_hash = `git rev-parse --short HEAD`.strip
header = `head -n 1 book/contributors.txt`.strip
# Match regex, then coerce resulting array to string by join
header_hash = header.scan(/[a-f0-9]{7,}/).join

if header_hash == current_head_hash
puts "Hash on header of contributors list (#{header_hash}) matches the current HEAD (#{current_head_hash})"
else
puts "Hash on header of contributors list (#{header_hash}) does not match the current HEAD (#{current_head_hash}), refreshing"
`rm book/contributors.txt`
# Reenable and invoke task again
Rake::Task['book/contributors.txt'].reenable
Rake::Task['book/contributors.txt'].invoke
end
date_string = Time.now.strftime("%Y-%m-%d")
params = "--attribute revnumber='#{version_string}' --attribute revdate='#{date_string}'"
puts "Generating contributors list"
`git shortlog -s | grep -v -E "(Straub|Chacon|dependabot)" | cut -f 2- | column -c 120 > book/contributors.txt`
end
end

desc 'build basic book formats'
task :build => [:build_html, :build_epub, :build_pdf] do
begin
# Run check
Rake::Task['book:check'].invoke

puts "Converting to HTML..."
# Rescue to ignore checking errors
rescue => e
puts e.message
puts 'Error when checking books (ignored)'
end
end

desc 'build basic book formats (for ci)'
task :ci => [:build_html, :build_epub, :build_pdf] do
# Run check, but don't ignore any errors
Rake::Task['book:check'].invoke
end

desc 'generate contributors list'
file 'book/contributors.txt' do
puts 'Generating contributors list'
`echo "Contributors as of #{header_hash}:\n" > book/contributors.txt`
`git shortlog -s | grep -v -E "(Straub|Chacon|dependabot)" | cut -f 2- | column -c 120 >> book/contributors.txt`
end

desc 'build HTML format'
task :build_html => 'book/contributors.txt' do
check_contrib()

puts 'Converting to HTML...'
`bundle exec asciidoctor #{params} -a data-uri progit.asc`
puts " -- HTML output at progit.html"
puts ' -- HTML output at progit.html'

exec_or_raise('htmlproofer --check-html progit.html')
end

desc 'build Epub format'
task :build_epub => 'book/contributors.txt' do
check_contrib()

puts "Converting to EPub..."
puts 'Converting to EPub...'
`bundle exec asciidoctor-epub3 #{params} progit.asc`
puts " -- Epub output at progit.epub"
puts ' -- Epub output at progit.epub'

exec_or_raise('epubcheck progit.epub')
end

desc 'build Mobi format'
task :build_mobi => 'book/contributors.txt' do
# Commented out the .mobi file creation because the kindlegen dependency is not available.
# For more information on this see: #1496.
# This is a (hopefully) temporary fix until upstream asciidoctor-epub3 is fixed and we can offer .mobi files again.
Expand All @@ -39,12 +92,47 @@ namespace :book do
# `bundle exec asciidoctor-epub3 #{params} -a ebook-format=kf8 progit.asc`
# puts " -- Mobi output at progit.mobi"

puts "Converting to PDF... (this one takes a while)"
# FIXME: If asciidoctor-epub3 supports Mobi again, uncomment these lines below
puts "Converting to Mobi isn't supported yet."
puts "For more information see issue #1496 at https://github.com/progit/progit2/issues/1496."
exit(127)
end

desc 'build PDF format'
task :build_pdf => 'book/contributors.txt' do
check_contrib()

puts 'Converting to PDF... (this one takes a while)'
`bundle exec asciidoctor-pdf #{params} progit.asc 2>/dev/null`
puts " -- PDF output at progit.pdf"
puts ' -- PDF output at progit.pdf'
end

desc 'Check generated books'
task :check => [:build_html, :build_epub] do
puts 'Checking generated books'

exec_or_raise('htmlproofer --check-html progit.html')
exec_or_raise('epubcheck progit.epub')
end

desc 'Clean all generated files'
task :clean do
begin
puts 'Removing generated files'

FileList['book/contributors.txt', 'progit.html', 'progit.epub', 'progit.pdf'].each do |file|
rm file

# Rescue if file not found
rescue Errno::ENOENT => e
begin
puts e.message
puts 'Error removing files (ignored)'
end
end
end
end

end

task :default => "book:build"