0
+require 'active_support'
0
+require 'action_mailer'
0
+require File.join(File.dirname(__FILE__), *%w[.. vendor action_mailer_tls lib smtp_tls])
0
+# Tell everyone about your releases!
0
+# You must set up your mail settings in config/capinator_config.yml. We include
0
+# the ActionMailer hack to play nice with gmail, so thats a super easy way
0
+# to do this without setting up your own MTA.
0
+# Want to just shoot everyone an email about the latest status?
0
+# cap -s comment="hi mom" capinator:email
0
+# Enable emails after every deploy by adding this to your deploy.rb:
0
+# after "deploy", "capinator:email"
0
+# Then when you deploy, you can optionally include comments:
0
+# cap -s comment="fix for bug #303" deploy
0
+ def load_mailer_config
0
+ mailer_config = File.open("#{rails_root}/config/capinator_config.yml")
0
+ mailer_options = YAML.load(mailer_config)
0
+ ActionMailer::Base.smtp_settings = mailer_options
0
+ # Capistrano doesn't set this for some reason
0
+ Object.const_set("RAILS_ROOT", File.expand_path(File.join(File.dirname(__FILE__), *%w[.. .. .. ..]))) unless Object.const_defined?("RAILS_ROOT")
0
+ def time_from_release(path, timezone)
0
+ timestamp = path[(path.rindex("/") + 1)..-1]
0
+ datetime = DateTime.parse(timestamp)
0
+ datetime.strftime("%B #{datetime.day.ordinalize}, %Y %l:%M %p #{timezone}").gsub(/\s+/, ' ').strip
0
+ class Mailer < ActionMailer::Base
0
+ include Capinator::Helper
0
+ DEFAULT_SENDER = %("Capinator" <capinator@example.com>)
0
+ @@email_prefix = "[DEPLOY] "
0
+ cattr_accessor :email_prefix
0
+ def deployment_notification(capistrano)
0
+ options = capistrano[:capinator_options]
0
+ content_type "text/plain"
0
+ subject "#{email_prefix} #{capistrano[:application]} deployed to #{capistrano[:rails_env]}"
0
+ recipients options[:recipients]
0
+ from options[:sender_address] || DEFAULT_SENDER
0
+#{capistrano[:application]} was deployed to #{capistrano[:rails_env]} by #{current_user} at #{time_from_release(capistrano[:current_release], capistrano[:timezone])}.
0
+Comment: #{capistrano[:comment] || "[none given]"}
0
+Release: #{capistrano[:current_release]}
0
+Release Time: #{time_from_release(capistrano[:current_release], capistrano[:timezone])}
0
+Release Revision: #{capistrano[:current_revision]}
0
+Previous Release: #{capistrano[:previous_release]}
0
+Previous Release Time: #{time_from_release(capistrano[:previous_release], capistrano[:timezone])}
0
+Previous Release Revision: #{capistrano[:previous_revision]}
0
+Repository: #{capistrano[:repository]}
0
+Deploy path: #{capistrano[:deploy_to]}
0
+if Object.const_defined?("Capistrano")
0
+ Capistrano::Configuration.instance(:must_exist).load do
0
+ namespace :capinator do
0
+ desc "Get the time zone from the server"
0
+ task :get_timezone, :roles => :app do
0
+ set "timezone", capture('date "+%Z"').strip
0
+ desc "Send notification via email"
0
+ Capinator::Helper.load_mailer_config
0
+ Capinator::Mailer.deliver_deployment_notification(self)
0
+ before "capinator:email", "capinator:get_timezone"
0
\ No newline at end of file
Comments
No one has commented yet.