2010-05-26 03:23:47 -04:00
require " rubygems "
2011-05-30 00:30:16 -04:00
require " bundler/setup "
2010-05-26 03:23:47 -04:00
2010-03-10 13:23:30 -05:00
port = " 4000 " # preview project port eg. http://localhost:4000
2011-04-17 23:49:30 -04:00
site = " public " # compiled site directory
2010-03-10 13:23:30 -05:00
source = " source " # source file directory
stash = " _stash " # directory to stash posts for speedy generation
posts = " _posts " # directory for blog files
post_format = " markdown " # file format for new posts when using the post rake task
2009-11-24 17:53:24 -05:00
## -- Rsync Deploy config -- ##
2009-11-01 00:17:29 -04:00
ssh_user = " user@host.com " # for rsync deployment
document_root = " ~/document_root/ " # for rsync deployment
## ---- ##
2009-11-24 17:53:24 -05:00
## -- Github Pages deploy config -- ##
2009-11-24 17:40:47 -05:00
# Read http://pages.github.com for guidance
2011-04-17 23:49:30 -04:00
# You can deploy to github pages with `rake push_github` or change the default push task below to :push_github
2009-11-24 17:53:24 -05:00
# If you're not using this, you can remove it
source_branch = " source " # this compiles to your deploy branch
2009-12-13 11:36:59 -05:00
deploy_branch = " master " # For user pages, use "master" for project pages use "gh-pages"
2009-11-24 17:53:24 -05:00
## ---- ##
2009-11-24 17:40:47 -05:00
2009-10-18 20:07:36 -04:00
def ok_failed ( condition )
if ( condition )
puts " OK "
else
puts " FAILED "
end
end
2011-06-07 10:45:01 -04:00
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] "
task :install , :theme do | t , args |
# copy theme into working Jekyll directories
theme = args . theme || 'classic'
puts " # # Copying " + theme + " theme to Jekyll paths "
system " cp -R themes/ " + theme + " /source source "
system " cp -R themes/ " + theme + " /sass sass "
system " cp -R themes/ " + theme + " /_plugins/ _plugins/ "
# The directories source and sass are ignored for development, but when Octopress is installed
# Users must be able to commit these directories, so this removes those lines from the gitignore
puts " # # Cleaning up... "
new_content = " "
File . read ( '.gitignore' ) . each_line do | e |
new_content << e unless e . strip == 'source' || e . strip == 'sass'
end
File . open ( '.gitignore' , 'w' ) do | io |
io << new_content
end
end
2011-04-17 23:49:30 -04:00
## if you're deploying with github, change the default deploy to push_github
desc " default push task "
task :push = > [ :push_rsync ] do
2010-03-10 13:23:30 -05:00
end
desc " Generate and deploy task "
2011-06-07 10:45:01 -04:00
task :deploy = > [ :integrate , :generate , :push ] do
2009-11-25 09:34:32 -05:00
end
2011-06-07 10:45:01 -04:00
desc " Generate jekyll site "
task :generate do
puts " # # Generating Site with Jekyll "
system " jekyll "
2009-11-05 22:30:03 -05:00
end
2009-12-07 11:55:13 -05:00
# usage rake post[my-new-post] or rake post['my new post'] or rake post (defaults to "new-post")
desc " Begin a new post in #{ source } /_posts "
task :post , :filename do | t , args |
2011-04-17 23:49:30 -04:00
require './_plugins/titlecase.rb'
2009-12-07 11:55:13 -05:00
args . with_defaults ( :filename = > 'new-post' )
2011-04-17 23:49:30 -04:00
open ( " #{ source } /_posts/ #{ Time . now . strftime ( '%Y-%m-%d' ) } - #{ args . filename . downcase . gsub ( / [ _] / , '-' ) } . #{ post_format } " , 'w' ) do | post |
2009-12-07 11:55:13 -05:00
post . puts " --- "
post . puts " title: \" #{ args . filename . gsub ( / [-_] / , ' ' ) . titlecase } \" "
2011-04-17 23:49:30 -04:00
post . puts " date: #{ Time . now . strftime ( '%Y-%m-%d %H:%M' ) } "
post . puts " layout: post "
2009-12-07 11:55:13 -05:00
post . puts " --- "
end
end
2010-01-23 15:47:43 -05:00
# 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 |
stash_dir = " #{ source } / #{ stash } "
FileUtils . mkdir ( stash_dir ) unless File . exist? ( stash_dir )
Dir . glob ( " #{ source } / #{ posts } /*.* " ) do | post |
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
FileUtils . mv Dir . glob ( " #{ source } / #{ stash } /*.* " ) , " #{ source } / #{ posts } / "
end
2009-10-18 20:07:36 -04:00
desc " list tasks "
2009-11-05 22:30:03 -05:00
task :list do
2009-11-05 22:58:04 -05:00
puts " Tasks: #{ ( Rake :: Task . tasks - [ Rake :: Task [ :list ] ] ) . to_sentence } "
2009-10-18 20:07:36 -04:00
puts " (type rake -T for more detail) \n \n "
end
2009-10-31 13:52:56 -04:00
desc " Watch the site and regenerate when it changes "
task :watch do
2011-05-30 00:30:16 -04:00
system " trap 'kill $jekyllPid $guardPid $compassPid' Exit; jekyll --auto & jekyllPid=$!; compass watch & compassPid=$!; guard & guardPid=$!; wait "
2009-10-31 13:52:56 -04:00
end
2009-11-24 17:53:24 -05:00
desc " generate and deploy website via rsync "
2011-04-17 23:49:30 -04:00
multitask :push_rsync do
2011-06-07 10:45:01 -04:00
puts " # # Deploying website via Rsync "
2009-10-20 09:50:16 -04:00
ok_failed system ( " rsync -avz --delete #{ site } / #{ ssh_user } : #{ document_root } " )
2009-10-18 20:07:36 -04:00
end
2011-04-17 23:49:30 -04:00
desc " deploy website to github user pages "
multitask :push_github do
2011-06-07 10:45:01 -04:00
puts " # # Deploying #{ deploy_branch } branch to Github Pages "
2009-11-24 17:40:47 -05:00
require 'git'
repo = Git . open ( '.' )
2011-06-07 10:45:01 -04:00
puts " \n # # Checking out #{ deploy_branch } branch \n "
2009-11-24 18:01:32 -05:00
repo . branch ( " #{ deploy_branch } " ) . checkout
2011-04-17 23:49:30 -04:00
( Dir [ " * " ] - [ " #{ site } " ] ) . each { | f | rm_rf ( f ) }
2009-11-24 17:40:47 -05:00
Dir [ " #{ site } /* " ] . each { | f | mv ( f , " . " ) }
2011-04-17 23:49:30 -04:00
rm_rf ( " #{ site } " )
2011-06-07 10:45:01 -04:00
puts " \n # # Moving generated / #{ site } files \n "
2009-11-24 17:40:47 -05:00
Dir [ " **/* " ] . each { | f | repo . add ( f ) }
repo . status . deleted . each { | f , s | repo . remove ( f ) }
2011-06-07 10:45:01 -04:00
puts " \n # # Commiting: Site updated at #{ Time . now . utc } \n "
2009-11-24 17:40:47 -05:00
message = ENV [ " MESSAGE " ] || " Site updated at #{ Time . now . utc } "
repo . commit ( message )
2011-06-07 10:45:01 -04:00
puts " \n # # Pushing generated / #{ site } files to #{ deploy_branch } branch \n "
2009-11-24 18:21:04 -05:00
repo . push
2011-06-07 10:45:01 -04:00
puts " \n # # Github Pages deploy complete \n "
2009-11-24 17:53:24 -05:00
repo . branch ( " #{ source_branch } " ) . checkout
2009-11-24 17:40:47 -05:00
end
2011-04-17 23:49:30 -04:00
desc " start up a web server on the output files "
task :start_server = > :stop_server do
2011-06-07 10:45:01 -04:00
print " # # Starting serve... "
2011-04-17 23:49:30 -04:00
system ( " serve #{ site } #{ port } > /dev/null 2>&1 & " )
sleep 1
pid = ` ps auxw | awk '/bin \\ /serve #{ site } #{ port } / { print $2 }' ` . strip
ok_failed ! pid . empty?
system " open http://localhost: #{ port } " unless pid . empty?
2009-10-18 20:07:36 -04:00
end
2011-04-17 23:49:30 -04:00
desc " stop the web server "
task :stop_server do
pid = ` ps auxw | awk '/bin \\ /serve #{ site } #{ port } / { print $2 }' ` . strip
2009-10-18 20:07:36 -04:00
if pid . empty?
2011-06-07 10:45:01 -04:00
puts " # # Adsf is not running "
2009-10-18 20:07:36 -04:00
else
2011-06-07 10:45:01 -04:00
print " # # Stoping adsf... "
2009-10-18 20:07:36 -04:00
ok_failed system ( " kill -9 #{ pid } " )
end
end
desc " preview the site in a web browser "
2011-04-17 23:49:30 -04:00
task :preview do
system " trap 'kill $servePid $jekyllPid $guardPid' Exit; serve #{ site } #{ port } > /dev/null 2>&1 & servePid=$!; jekyll --auto & jekyllPid=$!; guard & guardPid=$!; compass compile; open http://localhost: #{ port } ; wait "
2010-08-03 01:10:59 -04:00
end