———————————————————————— # Rakefile ———————————————————————— require ‘yaml’ require ‘uri’
namespace :mm do
desc 'Remove all files in the build directory' task :clobber do |t, args| # kill the old package dir rm_r 'build' rescue nil end desc 'Compile all files into the build directory' task :build do puts '## Compiling static pages' status = system 'bundle exec middleman build' puts status ? 'Build successful.' : 'Build failed.' end desc 'Deploy to S3 and invalidate Cloudfront after a Git commit/push' task :deploy do puts '## Deploy starting...' cd 'build' do system 'git add -u' message = "Site updated at #{Time.now}" puts "## Commiting: #{message}" system "git commit -m \"#{message}\"" end aws_env = "AWS_ACCESS_KEY=#{credentials[:access_key_id]} AWS_SECRET=#{credentials[:secret_access_key]}" puts '## Syncing to S3...' system "#{aws_env} bundle exec middleman s3_sync" puts '## Invalidating cloudfront...' system "#{aws_env} bundle exec middleman invalidate" puts '## Deploy complete.' end desc 'One step clobber, build, deploy' task :publish => [:clobber, :build, :deploy] do end desc 'Run the preview server at http://localhost:4567' task :preview do system 'middleman server' end desc 'Show config' task :show_config do |t, args| puts "\n----------------------------------------------------------------------------------" puts 'Configuration:' puts "\t:working directory: #{Rake.original_dir}" puts "\t:project: #{project}" puts "\t:aws_secrets_file: #{aws_secrets_file}" puts "\t:access_key_id: #{credentials[:access_key_id]}" puts "----------------------------------------------------------------------------------\n" end def credentials unless File.exists?(aws_secrets_file) puts "\nWarning: Config file is missing: #{aws_secrets_file}.\nFile contents should look like:\naccess_key_id: XXXX\nsecret_access_key: XXXX\n\n." end # load from a user directory i.e. ~/.aws/acme.yml credentials = File.exists?(aws_secrets_file) ? YAML::load_file(aws_secrets_file) : {} access_key_id = credentials.fetch('access_key_id') { ENV['AWS_ACCESS_KEY_ID'] } secret_access_key = credentials.fetch('secret_access_key') { ENV['AWS_SECRET_ACCESS_KEY'] } { access_key_id: access_key_id, secret_access_key: secret_access_key } end def aws_secrets_file File.expand_path("~/.aws/#{project}.yml") end def project File.basename(Rake.original_dir) end
end