091ef1c6 |
require "rubygems" |
8698a276 |
require "bundler/setup" |
5ec1f014 |
require "stringex" |
091ef1c6 |
|
a2ab1d48 |
## -- Rsync Deploy config -- ##
# Be sure your public key is listed in your server's ~/.ssh/authorized_keys file |
ea349cdf |
ssh_user = "user@domain.com"
document_root = "~/website.com/"
deploy_default = "rsync"
# This will be configured for you when you run config_deploy
deploy_branch = "gh-pages" |
a2ab1d48 |
|
59521e3d |
## -- Misc Configs -- ## |
a2ab1d48 |
|
59521e3d |
public_dir = "public" # compiled site directory
source_dir = "source" # source file directory
blog_index_dir = 'source' # directory for your blog's index page (if you put your index in source/blog/index.html, set this to 'source/blog')
deploy_dir = "_deploy" # deploy directory (for Github pages deployment)
stash_dir = "_stash" # directory to stash posts for speedy generation
posts_dir = "_posts" # directory for blog files
themes_dir = ".themes" # directory for blog files
new_post_ext = "markdown" # default new post file extension when using the new_post task
new_page_ext = "markdown" # default new page file extension when using the new_page task
server_port = "4000" # port for preview server eg. localhost:4000 |
399fe77f |
|
cc8985df |
|
17c59fb1 |
desc "Initial setup for Octopress: copies the default theme into the path of Jekyll's generator. Rake install defaults to rake install[classic] to install a different theme run rake install[some_theme_name]" |
d8b796ac |
task :install, :theme do |t, args|
# copy theme into working Jekyll directories
theme = args.theme || 'classic' |
17c59fb1 |
puts "## Copying "+theme+" theme into ./#{source_dir} and ./sass" |
9e6a9518 |
mkdir_p source_dir
cp_r "#{themes_dir}/#{theme}/source/.", source_dir
mkdir_p "sass"
cp_r "#{themes_dir}/#{theme}/sass/.", "sass"
mkdir_p "#{source_dir}/#{posts_dir}"
mkdir_p public_dir |
d8b796ac |
end
|
14ba4cfd |
#######################
# Working with Jekyll #
####################### |
eefe29e5 |
|
a128d499 |
desc "Generate jekyll site"
task :generate do
puts "## Generating Site with Jekyll"
system "jekyll"
end
|
14ba4cfd |
desc "Watch the site and regenerate when it changes"
task :watch do
system "trap 'kill $jekyllPid $compassPid' Exit; jekyll --auto & jekyllPid=$!; compass watch & compassPid=$!; wait" |
af719fb4 |
end
|
14ba4cfd |
desc "preview the site in a web browser"
task :preview do |
313c3859 |
system "trap 'kill $jekyllPid $compassPid $rackPid' Exit; jekyll --auto & jekyllPid=$!; compass watch & compassPid=$!; rackup --port #{server_port} & rackPid=$!; wait" |
145f8104 |
end
|
4a403231 |
# usage rake new_post[my-new-post] or rake new_post['my new post'] or rake new_post (defaults to "new-post") |
ce662172 |
desc "Begin a new post in #{source_dir}/#{posts_dir}" |
4a403231 |
task :new_post, :title do |t, args| |
92247251 |
require './plugins/titlecase.rb' |
4a403231 |
args.with_defaults(:title => 'new-post')
title = args.title |
5ec1f014 |
filename = "#{source_dir}/#{posts_dir}/#{Time.now.strftime('%Y-%m-%d')}-#{title.to_url}.#{new_post_ext}" |
4a403231 |
puts "Creating new post: #{filename}"
open(filename, 'w') do |post| |
b9b9eb09 |
system "mkdir -p #{source_dir}/#{posts_dir}"; |
a6262dcb |
post.puts "---" |
e4c2d579 |
post.puts "layout: post" |
98cfd74d |
post.puts "title: \"#{title.gsub(/&/,'&').titlecase}\"" |
4a403231 |
post.puts "date: #{Time.now.strftime('%Y-%m-%d %H:%M')}"
post.puts "comments: true" |
17c59fb1 |
post.puts "categories: " |
a6262dcb |
post.puts "---"
end
end
|
4a403231 |
# usage rake new_page[my-new-page] or rake new_page[my-new-page.html] or rake new_page (defaults to "new-page.markdown") |
9189548e |
desc "Create a new page in #{source_dir}/(filename)/index.#{new_page_ext}" |
4a403231 |
task :new_page, :filename do |t, args|
require './plugins/titlecase.rb'
args.with_defaults(:filename => 'new-page')
page_dir = source_dir |
cc1cfa56 |
if args.filename =~ /(^.+\/)?([\w_-]+)(\.)?(.+)?/ |
6006ac8a |
page_dir += $4 ? "/#{$1}" : "/#{$1}#{$2}/"
name = $4 ? $2 : "index"
extension = $4 || "#{new_page_ext}" |
4a403231 |
filename = "#{name}.#{extension}"
mkdir_p page_dir
file = page_dir + filename
puts "Creating new page: #{file}"
open(file, 'w') do |page|
page.puts "---"
page.puts "layout: page" |
6006ac8a |
page.puts "title: \"#{$2.gsub(/[-_]/, ' ').titlecase}\"" |
4a403231 |
page.puts "date: #{Time.now.strftime('%Y-%m-%d %H:%M')}"
page.puts "comments: true"
page.puts "sharing: true"
page.puts "footer: true"
page.puts "---"
end
else
puts "Syntax error: #{args.filename} contains unsupported characters"
end
end
|
2f415171 |
# usage rake isolate[my-post]
desc "Move all other posts than the one currently being worked on to a temporary stash location (stash) so regenerating the site happens much quicker."
task :isolate, :filename do |t, args| |
b9b9eb09 |
stash_dir = "#{source_dir}/#{stash_dir}" |
2f415171 |
FileUtils.mkdir(stash_dir) unless File.exist?(stash_dir) |
b9b9eb09 |
Dir.glob("#{source_dir}/#{posts_dir}/*.*") do |post| |
2f415171 |
FileUtils.mv post, stash_dir unless post.include?(args.filename)
end
end
desc "Move all stashed posts back into the posts directory, ready for site generation."
task :integrate do |
b9b9eb09 |
FileUtils.mv Dir.glob("#{source_dir}/#{stash_dir}/*.*"), "#{source_dir}/#{posts_dir}/" |
2f415171 |
end
|
21813059 |
desc "Clean out caches: _code_cache, _gist_cache, .sass-cache"
task :clean do |
59521e3d |
system "rm -rf _code_cache/** _gist_cache/** .sass-cache/** source/stylesheets/screen.css" |
21813059 |
end
|
19df7e84 |
desc "Move sass to sass.old, install sass theme updates, replace sass/custom with sass.old/custom"
task :update_style, :theme do |t, args|
theme = args.theme || 'classic' |
6244feae |
if File.directory?("sass.old")
puts "removed existing sass.old directory"
system "rm -r sass.old"
end |
19df7e84 |
system "mv sass sass.old"
puts "## Moved styles into sass.old/" |
9d57455e |
system "mkdir -p sass"
system "cp -R #{themes_dir}/"+theme+"/sass/ sass/" |
19df7e84 |
cp_r "sass.old/custom/.", "sass/custom"
puts "## Updated Sass ##"
end
desc "Move source to source.old, install source theme updates, replace source/_includes/navigation.html with source.old's navigation"
task :update_source, :theme do |t, args|
theme = args.theme || 'classic' |
6244feae |
if File.directory?("#{source_dir}.old")
puts "removed existing #{source_dir}.old directory"
system "rm -r #{source_dir}.old"
end |
19df7e84 |
system "mv #{source_dir} #{source_dir}.old"
puts "moved #{source_dir} into #{source_dir}.old/" |
9d57455e |
system "mkdir -p #{source_dir}"
system "cp -R #{themes_dir}/"+theme+"/source/. #{source_dir}" |
19df7e84 |
system "cp -Rn #{source_dir}.old/. #{source_dir}" |
5d24e0ba |
system "cp -Rf #{source_dir}.old/_includes/custom/. #{source_dir}/_includes/custom/" |
59521e3d |
system "mv -f #{source_dir}/index.html #{blog_index_dir}" if blog_index_dir != source_dir
system "cp -f #{source_dir}.old/index.html #{source_dir}" if blog_index_dir != source_dir |
19df7e84 |
puts "## Updated #{source_dir} ##"
end
|
14ba4cfd |
##############
# Deploying #
##############
|
ea349cdf |
desc "Default deploy task" |
9f830dd9 |
multitask :deploy => [:copydot, "#{deploy_default}"] do
end
desc "copy dot files for deployment"
task :copydot do
cd "#{source_dir}" do
exclusions = [".", "..", ".DS_Store"]
Dir[".*"].each do |file|
if !File.directory?(file) && !exclusions.include?(file)
cp(file, "../#{public_dir}");
end
end
end |
ea349cdf |
end
|
14ba4cfd |
desc "Deploy website via rsync" |
ea349cdf |
task :rsync do |
d8b796ac |
puts "## Deploying website via Rsync" |
b9b9eb09 |
ok_failed system("rsync -avz --delete #{public_dir}/ #{ssh_user}:#{document_root}") |
82d0251d |
end
|
b9b9eb09 |
desc "deploy public directory to github pages" |
9f830dd9 |
multitask :push do |
b9b9eb09 |
puts "## Deploying branch to Github Pages "
(Dir["#{deploy_dir}/*"]).each { |f| rm_rf(f) } |
a12b0b7f |
system "cp -R #{public_dir}/* #{deploy_dir}" |
b9b9eb09 |
puts "\n## copying #{public_dir} to #{deploy_dir}"
cd "#{deploy_dir}" do
system "git add ."
system "git add -u"
puts "\n## Commiting: Site updated at #{Time.now.utc}"
message = "Site updated at #{Time.now.utc}"
system "git commit -m '#{message}'"
puts "\n## Pushing generated #{deploy_dir} website" |
ea349cdf |
system "git push origin #{deploy_branch}" |
b9b9eb09 |
puts "\n## Github Pages deploy complete"
end |
54766a0c |
end
|
1f9b596b |
desc "Update configurations to support publishing to root or sub directory"
task :set_root_dir, :dir do |t, args|
puts ">>> !! Please provide a directory, eg. rake config_dir[publishing/subdirectory]" unless args.dir
if args.dir
if args.dir == "/"
dir = ""
else
dir = "/" + args.dir.sub(/(\/*)(.+)/, "\\2").sub(/\/$/, '');
end
rakefile = IO.read(__FILE__)
rakefile.sub!(/public_dir(\s*)=(\s*)(["'])[\w\-\/]*["']/, "public_dir\\1=\\2\\3public#{dir}\\3")
File.open(__FILE__, 'w') do |f|
f.write rakefile
end
compass_config = IO.read('config.rb')
compass_config.sub!(/http_path(\s*)=(\s*)(["'])[\w\-\/]*["']/, "http_path\\1=\\2\\3#{dir}/\\3")
compass_config.sub!(/http_images_path(\s*)=(\s*)(["'])[\w\-\/]*["']/, "http_images_path\\1=\\2\\3#{dir}/images\\3")
compass_config.sub!(/http_fonts_path(\s*)=(\s*)(["'])[\w\-\/]*["']/, "http_fonts_path\\1=\\2\\3#{dir}/fonts\\3")
compass_config.sub!(/css_dir(\s*)=(\s*)(["'])[\w\-\/]*["']/, "css_dir\\1=\\2\\3public#{dir}/stylesheets\\3")
File.open('config.rb', 'w') do |f|
f.write compass_config
end
jekyll_config = IO.read('_config.yml')
jekyll_config.sub!(/^destination:.+$/, "destination: public#{dir}") |
12aed03e |
jekyll_config.sub!(/^subscribe_rss:\s*\/.+$/, "subscribe_rss: #{dir}/atom.xml")
jekyll_config.sub!(/^root:.*$/, "root: /#{dir.sub(/^\//, '')}") |
1f9b596b |
File.open('_config.yml', 'w') do |f|
f.write jekyll_config
end |
12aed03e |
rm_rf public_dir
mkdir_p "#{public_dir}#{dir}"
puts "## Site's root directory is now '/#{dir.sub(/^\//, '')}' ##" |
1f9b596b |
end
end
desc "Setup _deploy folder and deploy branch" |
ea349cdf |
task :config_deploy, :branch do |t, args| |
ce662172 |
puts "!! Please provide a deploy branch, eg. rake init_deploy[gh-pages] !!" unless args.branch
puts "## Creating a clean #{args.branch} branch in ./#{deploy_dir} for Github pages deployment" |
6f4c842b |
cd "#{deploy_dir}" do |
a128d499 |
system "git symbolic-ref HEAD refs/heads/#{args.branch}"
system "rm .git/index"
system "git clean -fdx" |
ce662172 |
system "echo 'My Octopress Page is coming soon …' > index.html" |
a128d499 |
system "git add ." |
ea349cdf |
system "git commit -m 'Octopress init'"
rakefile = IO.read(__FILE__)
rakefile.sub!(/deploy_branch(\s*)=(\s*)(["'])[\w-]*["']/, "deploy_branch\\1=\\2\\3#{args.branch}\\3")
rakefile.sub!(/deploy_default(\s*)=(\s*)(["'])[\w-]*["']/, "deploy_default\\1=\\2\\3push\\3")
File.open(__FILE__, 'w') do |f|
f.write rakefile
end |
a128d499 |
end |
ee7b9dd9 |
puts "## Deployment configured. Now you can deploy to the #{args.branch} branch with `rake deploy` ##" |
a128d499 |
end |
82d0251d |
|
a128d499 |
def ok_failed(condition)
if (condition)
puts "OK"
else
puts "FAILED"
end
end |
82d0251d |
|
14ba4cfd |
desc "list tasks"
task :list do |
a817f997 |
puts "Tasks: #{(Rake::Task.tasks - [Rake::Task[:list]]).join(', ')}" |
14ba4cfd |
puts "(type rake -T for more detail)\n\n" |
9bd71339 |
end |