Class: CapistranoPayload::CapistranoIntegration

Inherits:
Object
  • Object
show all
Defined in:
lib/capistrano-payload/capistrano_integration.rb

Class Method Summary collapse

Class Method Details

.load_into(capistrano_config) ⇒ Object



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# File 'lib/capistrano-payload/capistrano_integration.rb', line 7

def self.load_into(capistrano_config)
  capistrano_config.load do  
    _cset(:payload_url) {
      abort 'Payload URL required! set :payload_url'
    }
    
    _cset(:payload_prompt)  { true }
    _cset(:payload_format)  { :json }
    _cset(:payload_params)  { Hash.new }
    
    _cset(:payload_data) {
      {
        :version         => Capistrano::Version.to_s.strip,
        :application     => fetch(:application),
        :deployer        => {
          :user          => ENV['USER'] || ENV['USERNAME'] || 'n/a',
          :hostname      => ENV['HOSTNAME'] || Socket.gethostname
        },
        :timestamp       => Time.now,
        :source          => {
          :branch        => fetch(:branch),
          :revision      => fetch(:real_revision),
          :repository    => fetch(:repository)
        }
      }
    }
  
    namespace :payload do
      task :deploy, :roles => :app do
        logger.debug("Sending deployment notification to #{fetch(:payload_url)}")
        message = payload_prompt == true ? Capistrano::CLI.ui.ask("Deployment message (none): ", nil) : ''
        begin
          CapistranoPayload::Payload.new('deploy', message, payload_data, payload_format, payload_params).deliver(payload_url)
        rescue DeliveryError => err
          logger.debug("Payload delivery error: #{err.message}")
        rescue ConfigurationError => err
          logger.debug("Payload configuration error: #{err.message}")
        end
      end
      
      task :rollback, :roles => :app do
        logger.debug("Sending rollback notification to #{fetch(:payload_url)}")
        message = payload_prompt == true ? Capistrano::CLI.ui.ask("Rollback message (none): ", nil) : ''
        begin
          CapistranoPayload::Payload.new('rollback', message, payload_data, payload_format, payload_params).deliver(payload_url)
        rescue DeliveryError => err
          logger.debug("Payload delivery error: #{err.message}")
        rescue ConfigurationError => err
          logger.debug("Payload configuration error: #{err.message}")
        end
      end
    end
    
    after :deploy,   'payload:deploy'
    after :rollback, 'payload:rollback'
  end
end