2010-05-26 03:23:47 -04:00
require " rubygems "
2011-05-30 00:30:16 -04:00
require " bundler/setup "
2011-08-25 10:52:43 -04:00
require " stringex "
2012-06-16 19:34:53 -04:00
require 'rake/minify'
2010-05-26 03:23:47 -04:00
2011-06-22 12:29:23 -04:00
## -- Rsync Deploy config -- ##
# Be sure your public key is listed in your server's ~/.ssh/authorized_keys file
2011-08-25 16:58:02 -04:00
ssh_user = " user@domain.com "
2011-09-25 17:13:42 -04:00
ssh_port = " 22 "
2011-08-25 16:58:02 -04:00
document_root = " ~/website.com/ "
2012-10-13 16:37:03 -04:00
rsync_delete = false
2011-06-29 14:01:06 -04:00
deploy_default = " rsync "
2012-05-26 12:52:23 -04:00
# Hidden "dot" files that should be included with the deployed site (see task copydot)
copy_dot_files = [ ]
2011-06-29 14:01:06 -04:00
# This will be configured for you when you run config_deploy
deploy_branch = " gh-pages "
2011-06-22 12:29:23 -04:00
2011-08-16 01:49:49 -04:00
## -- Misc Configs -- ##
2011-06-22 12:29:23 -04:00
2011-08-16 01:49:49 -04:00
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')
2012-06-17 12:20:05 -04:00
deploy_dir = " _deploy " # deploy directory (for GitHub pages deployment)
2011-08-16 01:49:49 -04:00
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
2012-12-17 14:14:25 -05:00
server_host = ENV [ 'OCTOPRESS_IP' ] || '0.0.0.0' # host ip address for preview server
server_port = ENV [ 'OCTOPRESS_PORT' ] || " 4000 " # port for preview server eg. localhost:4000
2009-11-01 00:17:29 -04:00
2011-07-19 09:06:54 -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] "
2011-06-07 10:45:01 -04:00
task :install , :theme do | t , args |
2011-09-04 08:25:04 -04:00
if File . directory? ( source_dir ) || File . directory? ( " sass " )
abort ( " rake aborted! " ) if ask ( " A theme is already installed, proceeding will overwrite existing files. Are you sure? " , [ 'y' , 'n' ] ) == 'n'
end
2011-06-07 10:45:01 -04:00
# copy theme into working Jekyll directories
theme = args . theme || 'classic'
2011-07-19 09:06:54 -04:00
puts " # # Copying " + theme + " theme into ./ #{ source_dir } and ./sass "
2011-07-11 11:55:56 -04:00
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
2011-06-07 10:45:01 -04:00
end
2011-06-11 07:56:04 -04:00
#######################
# Working with Jekyll #
#######################
2010-03-10 13:23:30 -05:00
2011-06-22 23:44:02 -04:00
desc " Generate jekyll site "
task :generate do
2011-08-25 10:36:57 -04:00
raise " # # # You haven't set anything up yet. First run `rake install` to set up an Octopress theme. " unless File . directory? ( source_dir )
2011-06-22 23:44:02 -04:00
puts " # # Generating Site with Jekyll "
2011-09-24 05:31:57 -04:00
system " compass compile --css-dir #{ source_dir } /stylesheets "
2012-06-16 19:34:53 -04:00
Rake :: Task [ 'minify_and_combine' ] . execute
2012-12-16 12:44:57 -05:00
system " jekyll --no-server --no-auto "
2011-06-22 23:44:02 -04:00
end
2012-06-16 19:34:53 -04:00
Rake :: Minify . new ( :minify_and_combine ) do
2012-06-17 10:36:56 -04:00
files = FileList . new ( " #{ source_dir } /javascripts/group/*.* " )
2012-06-16 19:34:53 -04:00
2012-06-17 10:36:56 -04:00
output_file = " #{ source_dir } /javascripts/octopress.min.js "
2012-06-16 19:34:53 -04:00
puts " BEGIN Minifying #{ output_file } "
group ( output_file ) do
files . each do | filename |
puts " Minifying- #{ filename } into #{ output_file } "
if filename . include? '.min.js'
add ( filename , :minify = > false )
else
add ( filename )
end
end
end
puts " END Minifying #{ output_file } "
end
2012-05-22 14:12:48 -04:00
# usage rake generate_only[my-post]
desc " Generate only the specified post (much faster) "
task :generate_only , :filename do | t , args |
if args . filename
filename = args . filename
else
filename = get_stdin ( " Enter a post file name: " )
end
puts " # # Stashing other posts "
Rake :: Task [ " isolate " ] . invoke ( filename )
Rake :: Task [ " generate " ] . execute
puts " # # Restoring stashed posts "
Rake :: Task [ " integrate " ] . execute
end
2011-06-11 07:56:04 -04:00
desc " Watch the site and regenerate when it changes "
task :watch do
2011-08-25 10:36:57 -04:00
raise " # # # You haven't set anything up yet. First run `rake install` to set up an Octopress theme. " unless File . directory? ( source_dir )
2011-08-25 10:52:43 -04:00
puts " Starting to watch source with Jekyll and Compass. "
2012-02-12 08:12:22 -05:00
system " compass compile --css-dir #{ source_dir } /stylesheets "
2012-06-16 19:34:53 -04:00
Rake :: Task [ 'minify_and_combine' ] . execute
2012-02-12 18:00:01 -05:00
jekyllPid = Process . spawn ( " jekyll --auto " )
2011-09-08 12:54:07 -04:00
compassPid = Process . spawn ( " compass watch " )
2011-08-25 10:52:43 -04:00
trap ( " INT " ) {
2011-09-12 15:36:14 -04:00
[ jekyllPid , compassPid ] . each { | pid | Process . kill ( 9 , pid ) rescue Errno :: ESRCH }
exit 0
2011-08-25 10:52:43 -04:00
}
2011-09-12 15:36:14 -04:00
[ jekyllPid , compassPid ] . each { | pid | Process . wait ( pid ) }
2009-11-25 09:34:32 -05:00
end
2011-06-11 07:56:04 -04:00
desc " preview the site in a web browser "
task :preview do
2011-08-25 10:36:57 -04:00
raise " # # # You haven't set anything up yet. First run `rake install` to set up an Octopress theme. " unless File . directory? ( source_dir )
2012-12-17 13:59:35 -05:00
puts " Starting to watch source with Jekyll and Compass. Starting Rack, serving to http:// #{ server_host } : #{ server_port } "
2012-02-12 08:12:22 -05:00
system " compass compile --css-dir #{ source_dir } /stylesheets "
2012-02-12 18:00:01 -05:00
jekyllPid = Process . spawn ( " jekyll --auto " )
2011-09-08 12:54:07 -04:00
compassPid = Process . spawn ( " compass watch " )
2012-12-17 13:51:33 -05:00
rackupPid = Process . spawn ( " rackup --host #{ server_host } --port #{ server_port } " )
2011-08-25 10:52:43 -04:00
trap ( " INT " ) {
2011-09-12 15:36:14 -04:00
[ jekyllPid , compassPid , rackupPid ] . each { | pid | Process . kill ( 9 , pid ) rescue Errno :: ESRCH }
exit 0
2011-08-25 10:52:43 -04:00
}
2011-09-12 15:36:14 -04:00
[ jekyllPid , compassPid , rackupPid ] . each { | pid | Process . wait ( pid ) }
2009-11-05 22:30:03 -05:00
end
2011-07-19 16:09:42 -04:00
# usage rake new_post[my-new-post] or rake new_post['my new post'] or rake new_post (defaults to "new-post")
2011-06-27 22:47:40 -04:00
desc " Begin a new post in #{ source_dir } / #{ posts_dir } "
2011-07-19 16:09:42 -04:00
task :new_post , :title do | t , args |
2012-05-21 09:57:49 -04:00
if args . title
title = args . title
else
title = get_stdin ( " Enter a title for your post: " )
end
2011-08-25 10:36:57 -04:00
raise " # # # You haven't set anything up yet. First run `rake install` to set up an Octopress theme. " unless File . directory? ( source_dir )
2011-08-25 10:05:22 -04:00
mkdir_p " #{ source_dir } / #{ posts_dir } "
2011-08-25 10:52:43 -04:00
filename = " #{ source_dir } / #{ posts_dir } / #{ Time . now . strftime ( '%Y-%m-%d' ) } - #{ title . to_url } . #{ new_post_ext } "
2011-09-03 09:06:36 -04:00
if File . exist? ( filename )
2011-09-04 09:47:36 -04:00
abort ( " rake aborted! " ) if ask ( " #{ filename } already exists. Do you want to overwrite? " , [ 'y' , 'n' ] ) == 'n'
2011-09-03 09:06:36 -04:00
end
2011-07-19 16:09:42 -04:00
puts " Creating new post: #{ filename } "
open ( filename , 'w' ) do | post |
2009-12-07 11:55:13 -05:00
post . puts " --- "
2011-04-17 23:49:30 -04:00
post . puts " layout: post "
2011-10-16 05:49:18 -04:00
post . puts " title: \" #{ title . gsub ( / & / , '&' ) } \" "
2011-07-19 16:09:42 -04:00
post . puts " date: #{ Time . now . strftime ( '%Y-%m-%d %H:%M' ) } "
post . puts " comments: true "
2012-02-12 08:12:22 -05:00
post . puts " external-url: "
2011-07-19 09:06:54 -04:00
post . puts " categories: "
2009-12-07 11:55:13 -05:00
post . puts " --- "
end
end
2011-07-19 16:09:42 -04:00
# usage rake new_page[my-new-page] or rake new_page[my-new-page.html] or rake new_page (defaults to "new-page.markdown")
2011-07-26 19:10:16 -04:00
desc " Create a new page in #{ source_dir } /(filename)/index. #{ new_page_ext } "
2011-07-19 16:09:42 -04:00
task :new_page , :filename do | t , args |
2011-08-25 10:36:57 -04:00
raise " # # # You haven't set anything up yet. First run `rake install` to set up an Octopress theme. " unless File . directory? ( source_dir )
2011-07-19 16:09:42 -04:00
args . with_defaults ( :filename = > 'new-page' )
2011-10-16 10:22:37 -04:00
page_dir = [ source_dir ]
2011-12-10 19:18:34 -05:00
if args . filename . downcase =~ / (^.+ \/ )?(.+) /
2011-10-16 10:22:37 -04:00
filename , dot , extension = $2 . rpartition ( '.' ) . reject ( & :empty? ) # Get filename and extension
title = filename
page_dir . concat ( $1 . downcase . sub ( / ^ \/ / , '' ) . split ( '/' ) ) unless $1 . nil? # Add path to page_dir Array
if extension . nil?
page_dir << filename
filename = " index "
end
extension || = new_page_ext
page_dir = page_dir . map! { | d | d = d . to_url } . join ( '/' ) # Sanitize path
filename = filename . downcase . to_url
2011-07-19 16:09:42 -04:00
mkdir_p page_dir
2011-10-16 10:22:37 -04:00
file = " #{ page_dir } / #{ filename } . #{ extension } "
2011-09-03 09:06:36 -04:00
if File . exist? ( file )
2011-09-04 09:47:36 -04:00
abort ( " rake aborted! " ) if ask ( " #{ file } already exists. Do you want to overwrite? " , [ 'y' , 'n' ] ) == 'n'
2011-09-03 09:06:36 -04:00
end
2011-07-19 16:09:42 -04:00
puts " Creating new page: #{ file } "
open ( file , 'w' ) do | page |
page . puts " --- "
page . puts " layout: page "
2011-10-16 10:22:37 -04:00
page . puts " title: \" #{ title } \" "
2011-07-19 16:09:42 -04:00
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
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 |
2012-05-22 14:12:48 -04:00
if args . filename
filename = args . filename
else
filename = get_stdin ( " Enter a post file name: " )
end
2012-07-22 15:14:59 -04:00
full_stash_dir = " #{ source_dir } / #{ stash_dir } "
FileUtils . mkdir ( full_stash_dir ) unless File . exist? ( full_stash_dir )
2011-06-21 16:11:07 -04:00
Dir . glob ( " #{ source_dir } / #{ posts_dir } /*.* " ) do | post |
2012-07-22 15:14:59 -04:00
FileUtils . mv post , full_stash_dir unless post . include? ( filename )
2010-01-23 15:47:43 -05:00
end
end
desc " Move all stashed posts back into the posts directory, ready for site generation. "
task :integrate do
2011-06-21 16:11:07 -04:00
FileUtils . mv Dir . glob ( " #{ source_dir } / #{ stash_dir } /*.* " ) , " #{ source_dir } / #{ posts_dir } / "
2010-01-23 15:47:43 -05:00
end
2011-09-18 07:45:25 -04:00
desc " Clean out caches: .pygments-cache, .gist-cache, .sass-cache "
2011-06-17 22:24:48 -04:00
task :clean do
2012-06-15 13:50:34 -04:00
[ " .pygments-cache/** " , " .gist-cache/** " ] . each { | dir | rm_rf Dir . glob ( dir ) }
rm " #{ source_dir } /stylesheets/screen.css " if File . exists? ( " #{ source_dir } /stylesheets/screen.css " )
system " compass clean "
2012-05-22 14:12:48 -04:00
puts " # # Cleaned Sass, Pygments and Gist caches, removed generated stylesheets # # "
end
desc " Update theme source and style "
task :update , :theme do | t , args |
theme = args . theme || 'classic'
Rake :: Task [ :update_source ] . invoke ( theme )
Rake :: Task [ :update_style ] . invoke ( theme )
2011-06-17 22:24:48 -04:00
end
2011-07-19 22:18:34 -04:00
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'
2011-07-27 18:22:57 -04:00
if File . directory? ( " sass.old " )
puts " removed existing sass.old directory "
2011-08-25 10:52:43 -04:00
rm_r " sass.old " , :secure = > true
2011-07-27 18:22:57 -04:00
end
2011-08-25 10:52:43 -04:00
mv " sass " , " sass.old "
2011-07-19 22:18:34 -04:00
puts " # # Moved styles into sass.old/ "
2011-08-25 10:52:43 -04:00
cp_r " #{ themes_dir } / " + theme + " /sass/ " , " sass "
2011-07-19 22:18:34 -04:00
cp_r " sass.old/custom/. " , " sass/custom "
puts " # # Updated Sass # # "
2012-06-03 18:21:58 -04:00
rm_r " .sass-cache " , :secure = > true if File . directory? ( " .sass-cache " )
2011-07-19 22:18:34 -04:00
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'
2011-07-27 18:22:57 -04:00
if File . directory? ( " #{ source_dir } .old " )
2011-09-02 18:24:42 -04:00
puts " # # Removed existing #{ source_dir } .old directory "
2011-08-25 10:52:43 -04:00
rm_r " #{ source_dir } .old " , :secure = > true
2011-07-27 18:22:57 -04:00
end
2011-10-02 00:36:52 -04:00
mkdir " #{ source_dir } .old "
2011-09-02 18:24:42 -04:00
cp_r " #{ source_dir } /. " , " #{ source_dir } .old "
puts " # # Copied #{ source_dir } into #{ source_dir } .old/ "
cp_r " #{ themes_dir } / " + theme + " /source/. " , source_dir , :remove_destination = > true
cp_r " #{ source_dir } .old/_includes/custom/. " , " #{ source_dir } /_includes/custom/ " , :remove_destination = > true
2011-08-25 10:52:43 -04:00
mv " #{ source_dir } /index.html " , " #{ blog_index_dir } " , :force = > true if blog_index_dir != source_dir
2011-10-02 00:36:52 -04:00
cp " #{ source_dir } .old/index.html " , source_dir if blog_index_dir != source_dir && File . exists? ( " #{ source_dir } .old/index.html " )
2012-05-20 23:23:18 -04:00
if File . exists? ( " #{ source_dir } /blog/archives/index.html " )
puts " # # Moving blog/archives to /archives (standard location as of 2.1) # # "
file = " #{ source_dir } /_includes/custom/navigation.html "
navigation = IO . read ( file )
navigation = navigation . gsub ( / (.*) \/ blog( \/ archives)(.*$) /m , '\1\2\3' )
File . open ( file , 'w' ) do | f |
f . write navigation
end
2012-02-12 14:11:23 -05:00
rm_r " #{ source_dir } /blog/archives "
rm_r " #{ source_dir } /blog " if Dir . entries ( " #{ source_dir } /blog " ) . join == " ... "
2012-02-12 13:27:17 -05:00
end
2011-07-19 22:18:34 -04:00
puts " # # Updated #{ source_dir } # # "
end
2012-05-22 14:12:48 -04:00
2011-06-11 07:56:04 -04:00
##############
# Deploying #
##############
2011-06-29 14:01:06 -04:00
desc " Default deploy task "
2011-09-12 13:49:18 -04:00
task :deploy do
2011-09-22 04:17:31 -04:00
Rake :: Task [ :copydot ] . invoke ( source_dir , public_dir )
Rake :: Task [ " #{ deploy_default } " ] . execute
2011-09-12 14:48:26 -04:00
end
desc " Generate website and deploy "
2011-09-22 04:17:31 -04:00
task :gen_deploy = > [ :integrate , :generate , :deploy ] do
2011-08-25 10:52:43 -04:00
end
desc " copy dot files for deployment "
2011-09-22 04:17:31 -04:00
task :copydot , :source , :dest do | t , args |
2012-05-26 12:52:23 -04:00
files = [ " .htaccess " ] | copy_dot_files
2012-05-22 18:13:55 -04:00
Dir [ " #{ args . source } /.* " ] . each do | file |
if ! File . directory? ( file ) && files . include? ( File . basename ( file ) )
cp ( file , file . gsub ( / #{ args . source } / , " #{ args . dest } " ) ) ;
end
2011-08-25 10:52:43 -04:00
end
2011-06-29 14:01:06 -04:00
end
2011-06-11 07:56:04 -04:00
desc " Deploy website via rsync "
2011-06-29 14:01:06 -04:00
task :rsync do
2011-12-10 19:18:34 -05:00
exclude = " "
2011-12-10 19:30:33 -05:00
if File . exists? ( './rsync-exclude' )
2011-12-10 19:18:34 -05:00
exclude = " --exclude-from ' #{ File . expand_path ( './rsync-exclude' ) } ' "
end
2011-06-07 10:45:01 -04:00
puts " # # Deploying website via Rsync "
2011-12-10 19:18:34 -05:00
ok_failed system ( " rsync -avze 'ssh -p #{ ssh_port } ' #{ exclude } #{ " --delete " unless rsync_delete == false } #{ public_dir } / #{ ssh_user } : #{ document_root } " )
2009-10-18 20:07:36 -04:00
end
2011-06-21 16:11:07 -04:00
desc " deploy public directory to github pages "
2011-08-25 10:52:43 -04:00
multitask :push do
2012-05-20 11:38:56 -04:00
if File . directory? ( deploy_dir )
2012-06-17 12:20:05 -04:00
puts " # # Deploying branch to GitHub Pages "
2012-05-20 11:38:56 -04:00
( Dir [ " #{ deploy_dir } /* " ] ) . each { | f | rm_rf ( f ) }
Rake :: Task [ :copydot ] . invoke ( public_dir , deploy_dir )
puts " Attempting pull, to sync local deployment repository "
cd " #{ deploy_dir } " do
system " git pull origin #{ deploy_branch } "
end
puts " \n # # copying #{ public_dir } to #{ deploy_dir } "
cp_r " #{ public_dir } /. " , deploy_dir
cd " #{ deploy_dir } " do
2012-05-27 01:49:35 -04:00
File . new ( " .nojekyll " , " w " ) . close
2012-05-20 11:38:56 -04:00
system " git add . "
system " git add -u "
message = " Site updated at #{ Time . now . utc } "
puts " \n # # Commiting: #{ message } "
system " git commit -m \" #{ message } \" "
puts " \n # # Pushing generated #{ deploy_dir } website "
system " git push origin #{ deploy_branch } "
2012-06-17 12:20:05 -04:00
puts " \n # # GitHub Pages deploy complete "
2012-05-20 11:38:56 -04:00
end
else
2012-06-17 12:20:05 -04:00
puts " This project isn't configured for deploying to GitHub Pages \n Please run `rake setup_github_pages[your-deployment-repo-url]`. "
2011-06-21 16:11:07 -04:00
end
2009-11-24 17:40:47 -05:00
end
2011-07-16 14:52:50 -04:00
desc " Update configurations to support publishing to root or sub directory "
task :set_root_dir , :dir do | t , args |
if args . dir
2012-05-22 14:12:48 -04:00
dir = args . dir
else
dir = get_stdin ( " Please provide a directory: " )
end
if dir
if dir == " / "
2011-07-16 14:52:50 -04:00
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 } " )
2011-07-22 00:03:11 -04:00
jekyll_config . sub! ( / ^subscribe_rss: \ s* \/ .+$ / , " subscribe_rss: #{ dir } /atom.xml " )
jekyll_config . sub! ( / ^root:.*$ / , " root: / #{ dir . sub ( / ^ \/ / , '' ) } " )
2011-07-16 14:52:50 -04:00
File . open ( '_config.yml' , 'w' ) do | f |
f . write jekyll_config
end
2011-07-22 00:03:11 -04:00
rm_rf public_dir
mkdir_p " #{ public_dir } #{ dir } "
2012-05-22 14:12:48 -04:00
puts " \n ======================================================== "
puts " Site's root directory is now '/ #{ dir . sub ( / ^ \/ / , '' ) } ' "
puts " Don't forget to update your url in _config.yml "
puts " \n ======================================================== "
2011-07-16 14:52:50 -04:00
end
end
2012-06-17 12:20:05 -04:00
desc " Set up _deploy folder and deploy branch for GitHub Pages deployment "
2011-12-18 16:38:11 -05:00
task :setup_github_pages , :repo do | t , args |
if args . repo
repo_url = args . repo
else
repo_url = get_stdin ( " Enter the read/write url for your repository: " )
end
2012-12-19 23:45:34 -05:00
user = repo_url . match ( / (:([^ \/ ]+)|(github.com \/ ([^ \/ ]+))) / ) [ 2 ] || repo_url . match ( / (:([^ \/ ]+)|(github.com \/ ([^ \/ ]+))) / ) [ 4 ]
2011-10-11 08:20:52 -04:00
branch = ( repo_url . match ( / \/ [ \ w-]+.github.com / ) . nil? ) ? 'gh-pages' : 'master'
2011-09-22 05:41:40 -04:00
project = ( branch == 'gh-pages' ) ? repo_url . match ( / \/ ([^ \ .]+) / ) [ 1 ] : ''
2012-05-20 11:38:56 -04:00
url = " http:// #{ user } .github.com "
url += " / #{ project } " unless project == ''
2011-09-22 05:41:40 -04:00
unless ` git remote -v ` . match ( / origin.+?octopress.git / ) . nil?
# If octopress is still the origin remote (from cloning) rename it to octopress
system " git remote rename origin octopress "
if branch == 'master'
# If this is a user/organization pages repository, add the correct origin remote
# and checkout the source branch for committing changes to the blog source.
system " git remote add origin #{ repo_url } "
puts " Added remote #{ repo_url } as origin "
system " git config branch.master.remote origin "
puts " Set origin as default remote "
system " git branch -m master source "
puts " Master branch renamed to 'source' for committing your blog source files "
else
unless ! public_dir . match ( " #{ project } " ) . nil?
2012-05-20 11:38:56 -04:00
Rake :: Task [ :set_root_dir ] . invoke ( project )
2011-09-22 05:41:40 -04:00
end
end
end
2012-05-20 11:38:56 -04:00
# Configure deployment repository
2011-09-22 05:41:40 -04:00
rm_rf deploy_dir
mkdir deploy_dir
2011-06-27 18:17:15 -04:00
cd " #{ deploy_dir } " do
2011-09-22 05:41:40 -04:00
system " git init "
system " git remote add origin #{ repo_url } "
2012-05-20 11:38:56 -04:00
puts " Attempting to pull from repository "
system " git pull origin #{ branch } "
unless File . exist? ( 'index.html' )
system " echo 'My Octopress Page is coming soon …' > index.html "
system " git add . "
system " git commit -m \" Octopress init \" "
system " git branch -m gh-pages " unless branch == 'master'
end
end
# Configure deployment setup in Rakefile
rakefile = IO . read ( __FILE__ )
rakefile . sub! ( / deploy_branch( \ s*)=( \ s*)(["'])[ \ w-]*["'] / , " deploy_branch \\ 1= \\ 2 \\ 3 #{ 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
# Configure published url
jekyll_config = IO . read ( '_config.yml' )
current_url = / ^url: \ s?(.*$) / . match ( jekyll_config ) [ 1 ]
has_cname = File . exists? ( " #{ source_dir } /CNAME " )
if current_url == 'http://yoursite.com'
jekyll_config . sub! ( / ^url:.*$ / , " url: #{ url } " )
File . open ( '_config.yml' , 'w' ) do | f |
f . write jekyll_config
2011-06-29 14:01:06 -04:00
end
2012-05-20 11:38:56 -04:00
current_url = url
end
puts " \n ======================================================== "
if has_cname
cname = IO . read ( " #{ source_dir } /CNAME " ) . chomp
current_short_url = / \/ {2}(.*$) / . match ( current_url ) [ 1 ]
if cname != current_short_url
puts " !! WARNING: Your CNAME points to #{ cname } but your _config.yml url is set to #{ current_short_url } !! "
puts " For help with setting up a CNAME follow the guide at http://help.github.com/pages/ # custom_domains "
else
2012-06-17 12:20:05 -04:00
puts " GitHub Pages will host your site at http:// #{ cname } "
2012-05-20 11:38:56 -04:00
end
else
2012-06-17 12:20:05 -04:00
puts " GitHub Pages will host your site at #{ url } . "
2012-05-20 11:38:56 -04:00
puts " To host at \" your-site.com \" , configure a CNAME: `echo \" your-domain.com \" > #{ source_dir } /CNAME` "
puts " Then change the url in _config.yml from #{ current_url } to http://your-domain.com "
2012-06-17 12:20:05 -04:00
puts " Finally, follow the guide at http://help.github.com/pages/ # custom_domains for help pointing your domain to GitHub Pages "
2011-06-22 23:44:02 -04:00
end
2012-05-20 11:38:56 -04:00
puts " Deploy to #{ repo_url } with `rake deploy` "
2012-05-20 18:27:18 -04:00
puts " Note: generated content is copied into _deploy/ which is not in version control. "
puts " If starting with a fresh clone of this project you should re-run setup_github_pages. "
2012-05-20 11:38:56 -04:00
puts " ======================================================== "
2011-06-22 23:44:02 -04:00
end
2009-10-18 20:07:36 -04:00
2011-06-22 23:44:02 -04:00
def ok_failed ( condition )
if ( condition )
puts " OK "
else
puts " FAILED "
end
end
2009-10-18 20:07:36 -04:00
2011-09-04 08:25:04 -04:00
def get_stdin ( message )
print message
STDIN . gets . chomp
end
def ask ( message , valid_options )
if valid_options
answer = get_stdin ( " #{ message } #{ valid_options . to_s . gsub ( / " / , '' ) . gsub ( / , / , '/' ) } " ) while ! valid_options . include? ( answer )
else
answer = get_stdin ( message )
end
answer
end
2011-06-11 07:56:04 -04:00
desc " list tasks "
task :list do
2011-08-11 08:13:30 -04:00
puts " Tasks: #{ ( Rake :: Task . tasks - [ Rake :: Task [ :list ] ] ) . join ( ', ' ) } "
2011-06-11 07:56:04 -04:00
puts " (type rake -T for more detail) \n \n "
2010-08-03 01:10:59 -04:00
end