From b05b174b875193021ebd31a49bfdc71da5949118 Mon Sep 17 00:00:00 2001 From: leethomas Date: Fri, 25 Dec 2015 22:50:23 -0800 Subject: [PATCH] moved namespaced rake tasks to separate .rake files under lib/tasks --- Rakefile | 241 +---------------------------------------- lib/tasks/docs.rake | 60 ++++++++++ lib/tasks/release.rake | 25 +++++ lib/tasks/site.rake | 151 ++++++++++++++++++++++++++ 4 files changed, 238 insertions(+), 239 deletions(-) create mode 100644 lib/tasks/docs.rake create mode 100644 lib/tasks/release.rake create mode 100644 lib/tasks/site.rake diff --git a/Rakefile b/Rakefile index 02e105d5..00c93db5 100644 --- a/Rakefile +++ b/Rakefile @@ -7,6 +7,8 @@ require 'yaml' $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), *%w[lib])) require 'jekyll/version' +Dir.glob('lib/tasks/**.rake').each { |f| import f } + ############################################################################# # # Helper functions @@ -128,242 +130,3 @@ desc "Open an irb session preloaded with this library" task :console do sh "irb -rubygems -r ./lib/#{name}.rb" end - -############################################################################# -# -# Site tasks - http://jekyllrb.com -# -############################################################################# - -namespace :site do - desc "Generate and view the site locally" - task :preview => [:history, :version_file] do - require "launchy" - require "jekyll" - - # Yep, it's a hack! Wait a few seconds for the Jekyll site to generate and - # then open it in a browser. Someday we can do better than this, I hope. - Thread.new do - sleep 4 - puts "Opening in browser..." - Launchy.open("http://localhost:4000") - end - - # Generate the site in server mode. - puts "Running Jekyll..." - options = { - "source" => File.expand_path("site"), - "destination" => File.expand_path("site/_site"), - "watch" => true, - "serving" => true - } - Jekyll::Commands::Build.process(options) - Jekyll::Commands::Serve.process(options) - end - - desc "Generate the site" - task :generate => [:history, :version_file] do - require "jekyll" - Jekyll::Commands::Build.process({ - "source" => File.expand_path("site"), - "destination" => File.expand_path("site/_site") - }) - end - task :build => :generate - - desc "Update normalize.css library to the latest version and minify" - task :update_normalize_css do - Dir.chdir("site/_sass") do - sh 'curl "http://necolas.github.io/normalize.css/latest/normalize.css" -o "normalize.scss"' - sh 'sass "normalize.scss":"_normalize.scss" --style compressed' - rm ['normalize.scss', Dir.glob('*.map')].flatten - end - end - - desc "Commit the local site to the gh-pages branch and publish to GitHub Pages" - task :publish => [:history, :version_file] do - # Ensure the gh-pages dir exists so we can generate into it. - puts "Checking for gh-pages dir..." - unless File.exist?("./gh-pages") - puts "Creating gh-pages dir..." - sh "git clone git@github.com:jekyll/jekyll gh-pages" - end - - # Ensure latest gh-pages branch history. - Dir.chdir('gh-pages') do - sh "git checkout gh-pages" - sh "git pull origin gh-pages" - end - - # Proceed to purge all files in case we removed a file in this release. - puts "Cleaning gh-pages directory..." - purge_exclude = %w[ - gh-pages/. - gh-pages/.. - gh-pages/.git - gh-pages/.gitignore - ] - FileList["gh-pages/{*,.*}"].exclude(*purge_exclude).each do |path| - sh "rm -rf #{path}" - end - - # Copy site to gh-pages dir. - puts "Building site into gh-pages branch..." - ENV['JEKYLL_ENV'] = 'production' - require "jekyll" - Jekyll::Commands::Build.process({ - "source" => File.expand_path("site"), - "destination" => File.expand_path("gh-pages"), - "sass" => { "style" => "compressed" } - }) - - File.open('gh-pages/.nojekyll', 'wb') { |f| f.puts(":dog: food.") } - - # Commit and push. - puts "Committing and pushing to GitHub Pages..." - sha = `git rev-parse HEAD`.strip - Dir.chdir('gh-pages') do - sh "git add ." - sh "git commit --allow-empty -m 'Updating to #{sha}.'" - sh "git push origin gh-pages" - end - puts 'Done.' - end - - desc "Create a nicely formatted history page for the jekyll site based on the repo history." - task :history do - if File.exist?("History.markdown") - history_file = File.read("History.markdown") - front_matter = { - "layout" => "docs", - "title" => "History", - "permalink" => "/docs/history/" - } - Dir.chdir('site/_docs/') do - File.open("history.md", "w") do |file| - file.write("#{front_matter.to_yaml}---\n\n") - file.write(converted_history(history_file)) - end - end - else - abort "You seem to have misplaced your History.markdown file. I can haz?" - end - end - - desc "Write the site latest_version.txt file" - task :version_file do - File.open('site/latest_version.txt', 'wb') { |f| f.puts(version) } unless version =~ /(beta|rc|alpha)/i - end - - namespace :releases do - desc "Create new release post" - task :new, :version do |t, args| - raise "Specify a version: rake site:releases:new['1.2.3']" unless args.version - today = Time.new.strftime('%Y-%m-%d') - release = args.version.to_s - filename = "site/_posts/#{today}-jekyll-#{release.split('.').join('-')}-released.markdown" - - File.open(filename, "wb") do |post| - post.puts("---") - post.puts("layout: news_item") - post.puts("title: 'Jekyll #{release} Released'") - post.puts("date: #{Time.new.strftime('%Y-%m-%d %H:%M:%S %z')}") - post.puts("author: ") - post.puts("version: #{release}") - post.puts("categories: [release]") - post.puts("---") - post.puts - post.puts - end - - puts "Created #{filename}" - end - end -end - -############################################################################# -# -# Packaging tasks -# -############################################################################# - -desc "Release #{name} v#{version}" -task :release => :build do - unless `git branch` =~ /^\* master$/ - puts "You must be on the master branch to release!" - exit! - end - sh "git commit --allow-empty -m 'Release :gem: #{version}'" - sh "git tag v#{version}" - sh "git push origin master" - sh "git push origin v#{version}" - sh "gem push pkg/#{name}-#{version}.gem" -end - -desc "Build #{name} v#{version} into pkg/" -task :build do - mkdir_p "pkg" - sh "gem build #{gemspec_file}" - sh "mv #{gem_file} pkg" -end - -############################################################################# -# -# Packaging tasks for jekyll-docs -# -############################################################################# - -namespace :docs do - desc "Release #{docs_name} v#{version}" - task :release => :build do - unless `git branch` =~ /^\* master$/ - puts "You must be on the master branch to release!" - exit! - end - sh "gem push pkg/#{docs_name}-#{version}.gem" - end - - desc "Build #{docs_name} v#{version} into pkg/" - task :build do - mkdir_p "pkg" - sh "gem build #{docs_name}.gemspec" - sh "mv #{docs_name}-#{version}.gem pkg" - end -end - -task :analysis do - require "jekyll/utils/ansi" - require "open3" - - cmd = [ - "docker", "run", "--rm", "--env=CODE_PATH=#{Dir.pwd}", \ - "--volume='#{Dir.pwd}:/code'", "--volume=/var/run/docker.sock:/var/run/docker.sock", \ - "--volume=/tmp/cc:/tmp/cc", "-i", "codeclimate/codeclimate", "analyze" - ] - - ansi = Jekyll::Utils::Ansi - file = File.open(".analysis", "w+") - Open3.popen3(cmd.shelljoin) do |_, out, err, _| - while data = out.gets - file.write data - if data =~ /\A==/ - $stdout.print ansi.yellow(data) - - elsif data !~ %r!\A[0-9\-]+! - $stdout.puts data - - else - h, d = data.split(":", 2) - $stdout.print ansi.cyan(h) - $stdout.print ":", d - end - end - - while data = err.gets - file.write data - $stderr.print ansi.red(data) - end - end - - file.close -end diff --git a/lib/tasks/docs.rake b/lib/tasks/docs.rake new file mode 100644 index 00000000..c04520e5 --- /dev/null +++ b/lib/tasks/docs.rake @@ -0,0 +1,60 @@ +############################################################################# +# +# Packaging tasks for jekyll-docs +# +############################################################################# + +namespace :docs do + desc "Release #{docs_name} v#{version}" + task :release => :build do + unless `git branch` =~ /^\* master$/ + puts "You must be on the master branch to release!" + exit! + end + sh "gem push pkg/#{docs_name}-#{version}.gem" + end + + desc "Build #{docs_name} v#{version} into pkg/" + task :build do + mkdir_p "pkg" + sh "gem build #{docs_name}.gemspec" + sh "mv #{docs_name}-#{version}.gem pkg" + end +end + +task :analysis do + require "jekyll/utils/ansi" + require "open3" + + cmd = [ + "docker", "run", "--rm", "--env=CODE_PATH=#{Dir.pwd}", \ + "--volume='#{Dir.pwd}:/code'", "--volume=/var/run/docker.sock:/var/run/docker.sock", \ + "--volume=/tmp/cc:/tmp/cc", "-i", "codeclimate/codeclimate", "analyze" + ] + + ansi = Jekyll::Utils::Ansi + file = File.open(".analysis", "w+") + Open3.popen3(cmd.shelljoin) do |_, out, err, _| + while data = out.gets + file.write data + if data =~ /\A==/ + $stdout.print ansi.yellow(data) + + elsif data !~ %r!\A[0-9\-]+! + $stdout.puts data + + else + h, d = data.split(":", 2) + $stdout.print ansi.cyan(h) + $stdout.print ":", d + end + end + + while data = err.gets + file.write data + $stderr.print ansi.red(data) + end + end + + file.close +end diff --git a/lib/tasks/release.rake b/lib/tasks/release.rake new file mode 100644 index 00000000..a78690d8 --- /dev/null +++ b/lib/tasks/release.rake @@ -0,0 +1,25 @@ +############################################################################# +# +# Packaging tasks +# +############################################################################# + +desc "Release #{name} v#{version}" +task :release => :build do + unless `git branch` =~ /^\* master$/ + puts "You must be on the master branch to release!" + exit! + end + sh "git commit --allow-empty -m 'Release :gem: #{version}'" + sh "git tag v#{version}" + sh "git push origin master" + sh "git push origin v#{version}" + sh "gem push pkg/#{name}-#{version}.gem" +end + +desc "Build #{name} v#{version} into pkg/" +task :build do + mkdir_p "pkg" + sh "gem build #{gemspec_file}" + sh "mv #{gem_file} pkg" +end diff --git a/lib/tasks/site.rake b/lib/tasks/site.rake new file mode 100644 index 00000000..eb5b263b --- /dev/null +++ b/lib/tasks/site.rake @@ -0,0 +1,151 @@ +############################################################################# +# +# Site tasks - http://jekyllrb.com +# +############################################################################# + +namespace :site do + desc "Generate and view the site locally" + task :preview => [:history, :version_file] do + require "launchy" + require "jekyll" + + # Yep, it's a hack! Wait a few seconds for the Jekyll site to generate and + # then open it in a browser. Someday we can do better than this, I hope. + Thread.new do + sleep 4 + puts "Opening in browser..." + Launchy.open("http://localhost:4000") + end + + # Generate the site in server mode. + puts "Running Jekyll..." + options = { + "source" => File.expand_path("site"), + "destination" => File.expand_path("site/_site"), + "watch" => true, + "serving" => true + } + Jekyll::Commands::Build.process(options) + Jekyll::Commands::Serve.process(options) + end + + desc "Generate the site" + task :generate => [:history, :version_file] do + require "jekyll" + Jekyll::Commands::Build.process({ + "source" => File.expand_path("site"), + "destination" => File.expand_path("site/_site") + }) + end + task :build => :generate + + desc "Update normalize.css library to the latest version and minify" + task :update_normalize_css do + Dir.chdir("site/_sass") do + sh 'curl "http://necolas.github.io/normalize.css/latest/normalize.css" -o "normalize.scss"' + sh 'sass "normalize.scss":"_normalize.scss" --style compressed' + rm ['normalize.scss', Dir.glob('*.map')].flatten + end + end + + desc "Commit the local site to the gh-pages branch and publish to GitHub Pages" + task :publish => [:history, :version_file] do + # Ensure the gh-pages dir exists so we can generate into it. + puts "Checking for gh-pages dir..." + unless File.exist?("./gh-pages") + puts "Creating gh-pages dir..." + sh "git clone git@github.com:jekyll/jekyll gh-pages" + end + + # Ensure latest gh-pages branch history. + Dir.chdir('gh-pages') do + sh "git checkout gh-pages" + sh "git pull origin gh-pages" + end + + # Proceed to purge all files in case we removed a file in this release. + puts "Cleaning gh-pages directory..." + purge_exclude = %w[ + gh-pages/. + gh-pages/.. + gh-pages/.git + gh-pages/.gitignore + ] + FileList["gh-pages/{*,.*}"].exclude(*purge_exclude).each do |path| + sh "rm -rf #{path}" + end + + # Copy site to gh-pages dir. + puts "Building site into gh-pages branch..." + ENV['JEKYLL_ENV'] = 'production' + require "jekyll" + Jekyll::Commands::Build.process({ + "source" => File.expand_path("site"), + "destination" => File.expand_path("gh-pages"), + "sass" => { "style" => "compressed" } + }) + + File.open('gh-pages/.nojekyll', 'wb') { |f| f.puts(":dog: food.") } + + # Commit and push. + puts "Committing and pushing to GitHub Pages..." + sha = `git rev-parse HEAD`.strip + Dir.chdir('gh-pages') do + sh "git add ." + sh "git commit --allow-empty -m 'Updating to #{sha}.'" + sh "git push origin gh-pages" + end + puts 'Done.' + end + + desc "Create a nicely formatted history page for the jekyll site based on the repo history." + task :history do + if File.exist?("History.markdown") + history_file = File.read("History.markdown") + front_matter = { + "layout" => "docs", + "title" => "History", + "permalink" => "/docs/history/" + } + Dir.chdir('site/_docs/') do + File.open("history.md", "w") do |file| + file.write("#{front_matter.to_yaml}---\n\n") + file.write(converted_history(history_file)) + end + end + else + abort "You seem to have misplaced your History.markdown file. I can haz?" + end + end + + desc "Write the site latest_version.txt file" + task :version_file do + File.open('site/latest_version.txt', 'wb') { |f| f.puts(version) } unless version =~ /(beta|rc|alpha)/i + end + + namespace :releases do + desc "Create new release post" + task :new, :version do |t, args| + raise "Specify a version: rake site:releases:new['1.2.3']" unless args.version + today = Time.new.strftime('%Y-%m-%d') + release = args.version.to_s + filename = "site/_posts/#{today}-jekyll-#{release.split('.').join('-')}-released.markdown" + + File.open(filename, "wb") do |post| + post.puts("---") + post.puts("layout: news_item") + post.puts("title: 'Jekyll #{release} Released'") + post.puts("date: #{Time.new.strftime('%Y-%m-%d %H:%M:%S %z')}") + post.puts("author: ") + post.puts("version: #{release}") + post.puts("categories: [release]") + post.puts("---") + post.puts + post.puts + end + + puts "Created #{filename}" + end + end +end