Skip to content

Commit

Permalink
Merge pull request progit#1598 from bagasme/build-task-refactor
Browse files Browse the repository at this point in the history
Refactor book:build task
  • Loading branch information
jnavila authored Feb 11, 2021
2 parents 676b95d + e65a45c commit 9620145
Show file tree
Hide file tree
Showing 2 changed files with 127 additions and 18 deletions.
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"

0 comments on commit 9620145

Please sign in to comment.