capistrano-mailgun 1.2.0 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,3 +1,9 @@
1
+ ## 2013-01-30 - v1.3.0
2
+ * added option to include list of servers deployed to in email notification
3
+ * fixed a bug where requiring `capistrano-mailgun` after you load `deploy.rb` would cause variables to be overwritten with defaults.
4
+ * don't call `mailgun.log_output` twice in html template
5
+ * fixed an issue where, depending on when `mailgun_notify` is called, it may or may not use the correct revisions when building the commit log.
6
+
1
7
  ## 2012-11-?? - v1.2.0
2
8
  * properly handle failures when running git-log
3
9
 
data/README.md CHANGED
@@ -217,6 +217,18 @@ or with the built-in `mailgun_notify` task.
217
217
 
218
218
  See above `Disabling Emails` section for examples.
219
219
 
220
+ ### mailgun_include_servers
221
+
222
+ Tnis variable is set to `false` by default. Setting to true will add the list of servers that are included in
223
+ the `deploy:update_code` task, which is any server that got code deployed to it.
224
+
225
+ This is useful for when you deploy to only a subset of servers using Capistrano's `HOSTS` or `ROLES` environment
226
+ variables in your deploy.
227
+
228
+ To enable the inclusion of the server list, you can add the following to your deployment configuration:
229
+
230
+ set :mailgun_include_servers, true
231
+
220
232
  ### github_url
221
233
 
222
234
  If your project is hosted on Github and you'd like to have links to the Github repository in the deployment
@@ -1,5 +1,6 @@
1
1
  # -*- encoding: utf-8 -*-
2
- require File.expand_path('../lib/capistrano-mailgun/version', __FILE__)
2
+ $:.unshift File.expand_path('../lib', __FILE__)
3
+ require 'capistrano-mailgun/version'
3
4
 
4
5
  Gem::Specification.new do |gem|
5
6
  gem.authors = ["Spike Grobstein"]
@@ -14,21 +14,32 @@ module Capistrano
14
14
 
15
15
  Capistrano.plugin :mailgun, Capistrano::Mailgun
16
16
 
17
- set(:mailgun_subject) do
17
+ def _cset(name, *args, &block)
18
+ unless exists?(name)
19
+ set(name, *args, &block)
20
+ end
21
+ end
22
+
23
+ _cset(:mailgun_subject) do
18
24
  [ "[Deployment]", fetch(:stage, '').to_s.capitalize, fetch(:application, '').capitalize, 'deploy completed'].join(' ').gsub(/\s+/, ' ')
19
25
  end
20
26
 
21
- set(:mailgun_api_key) { abort "Please set mailgun_api_key accordingly" }
22
- set(:mailgun_domain) { abort "Please set mailgun_domain accordingly" }
23
- set(:mailgun_from) { abort "Please set mailgun_from to your desired From field" }
24
- set(:mailgun_recipients) { abort "Please specify mailgun_recipients" }
25
- set(:mailgun_recipient_domain) { abort "Please set mailgun_recipient_domain accordingly" }
27
+ _cset(:mailgun_api_key) { abort "Please set mailgun_api_key accordingly" }
28
+ _cset(:mailgun_domain) { abort "Please set mailgun_domain accordingly" }
29
+ _cset(:mailgun_from) { abort "Please set mailgun_from to your desired From field" }
30
+ _cset(:mailgun_recipients) { abort "Please specify mailgun_recipients" }
31
+ _cset(:mailgun_recipient_domain) { abort "Please set mailgun_recipient_domain accordingly" }
32
+
33
+ # some internal variables that mailgun will use as the app runs
34
+ _cset(:mailgun_deploy_servers) { find_servers_for_task( find_task('deploy:update_code') ) }
26
35
 
27
36
  # set these to nil to not use, or set to path to your custom template
28
- set :mailgun_text_template, :deploy_text
29
- set :mailgun_html_template, :deploy_html
37
+ _cset :mailgun_text_template, :deploy_text
38
+ _cset :mailgun_html_template, :deploy_html
30
39
 
31
- set(:deployer_username) do
40
+ _cset :mailgun_include_servers, false
41
+
42
+ _cset(:deployer_username) do
32
43
  if fetch(:scm, '').to_sym == :git
33
44
  `git config user.name`.chomp
34
45
  else
@@ -36,6 +47,13 @@ module Capistrano
36
47
  end
37
48
  end
38
49
 
50
+ # before update_code, fetch the current revision
51
+ # this is needed to ensure that no matter when capistrano-mailgun fetches the commit logs that it
52
+ # has the correct starting point.
53
+ before 'deploy:update_code' do
54
+ set :mailgun_previous_revision, fetch(:current_revision, nil) # the revision that's currently deployed at this moment
55
+ end
56
+
39
57
  # default mailgun email tasks
40
58
  desc <<-DESC
41
59
  Send a mailgun deployment notification.
@@ -118,6 +136,8 @@ module Capistrano
118
136
  return @log_output unless @log_output.nil?
119
137
 
120
138
  begin
139
+ raise "Ref missing" if first_ref.nil? || last_ref.nil? # jump to resque block.
140
+
121
141
  log_output = run_locally("git log --oneline #{ first_ref }..#{ last_ref }")
122
142
 
123
143
  @log_output = log_output = log_output.split("\n").map do |line|
@@ -1,5 +1,5 @@
1
1
  module Capistrano
2
2
  module Mailgun
3
- VERSION = "1.2.0"
3
+ VERSION = "1.3.0"
4
4
  end
5
5
  end
@@ -124,13 +124,24 @@
124
124
  </div>
125
125
  <% end %>
126
126
 
127
- <% log_output = mailgun.log_output(latest_revision, real_revision) %>
127
+ <% if fetch(:mailgun_include_servers, false) %>
128
+ <div id="mailgun_servers" class="section">
129
+ <h2>Deployed to:</h2>
130
+ <ul>
131
+ <% fetch(:mailgun_deploy_servers).each do |server| %>
132
+ <li><%= server.host %></l>
133
+ <% end %>
134
+ </ul>
135
+ </div>
136
+ <% end %>
137
+
138
+ <% log_output = mailgun.log_output(fetch(:mailgun_previous_revision, nil), fetch(:real_revision, nil)) %>
128
139
  <% unless log_output.count == 0 %>
129
140
  <div class="log">
130
141
  <h2>Log:</h2>
131
142
 
132
143
  <ul>
133
- <% mailgun.log_output(latest_revision, real_revision).each do |line| %>
144
+ <% log_output.each do |line| %>
134
145
  <li>
135
146
  <% if fetch(:github_url, nil) && line[0] != 'n/a' %>
136
147
  <a href="<%= github_url %>/commit/<%= line[0] %>"><%= line[0] %></a>
@@ -16,7 +16,12 @@ Release: <%= fetch(:release_name, 'N/A') %>
16
16
  <% end %>
17
17
 
18
18
  <% if fetch(:url, nil) %>WWW: <%= fetch(:url) %><% end %>
19
- <% log_output = mailgun.log_output(latest_revision, real_revision) %>
19
+ <% if fetch(:mailgun_include_servers, false) %>
20
+ Deployed to the following servers:
21
+ <% fetch(:mailgun_deploy_servers).each do |server| %> - <%= server.host %>
22
+ <% end %>
23
+ <% end %>
24
+ <% log_output = mailgun.log_output(fetch(:mailgun_previous_revision, nil), fetch(:real_revision, nil)) %>
20
25
  <% unless log_output.count == 0 %>
21
26
  Log:
22
27
  ---------------------------------------------------------------------------------
@@ -263,6 +263,85 @@ describe Capistrano::Mailgun do
263
263
 
264
264
  end
265
265
 
266
+ context "collecting deployment servers" do
267
+ let(:server_hostnames) { config.fetch(:mailgun_deploy_servers).map(&:host) }
268
+
269
+ before do
270
+ config.load do
271
+ load 'deploy'
272
+
273
+ set :application, 'rspec-app'
274
+ set :repository, 'foo'
275
+
276
+ set :current_revision, nil
277
+ set :latest_revision, ''
278
+ set :release_name, ''
279
+ set :real_revision, ''
280
+
281
+ role :web, 'server-a'
282
+ role :app, 'server-b'
283
+
284
+ role :web, 'server-c', :no_release => true
285
+ end
286
+ end
287
+
288
+ context "#mailgun_deploy_servers" do
289
+
290
+ it "should find servers that are included in 'deploy'" do
291
+ server_hostnames.count.should == 2
292
+ server_hostnames.should include('server-a')
293
+ server_hostnames.should include('server-b')
294
+ end
295
+
296
+ it "should not find servers that are not included in 'deploy'" do
297
+ server_hostnames.should_not include('server-c')
298
+ end
299
+ end
300
+
301
+ context "templates" do
302
+ let(:result) { mailgun.send(:process_send_email_options, { :text_template => :deploy_text, :html_template => :deploy_html }) }
303
+
304
+ before do
305
+ require 'capistrano/recipes/deploy/scm/git'
306
+ Capistrano::Deploy::SCM::Git.any_instance.stub(:query_revision => '')
307
+ mailgun.stub!(:log_output => [])
308
+ end
309
+
310
+ context "when mailgun_include_servers is set to true" do
311
+ before do
312
+ config.load { set :mailgun_include_servers, true }
313
+ end
314
+
315
+ it "should include the servers in the text template" do
316
+ result[:text].should match('server-a')
317
+ end
318
+
319
+ it "should include the servers in the html template" do
320
+ result[:html].should match('server-a')
321
+ result[:html].should match('mailgun_servers')
322
+ end
323
+
324
+ end
325
+
326
+ context "when mailgun_include_servers is set to false" do
327
+ before do
328
+ config.load { set :mailgun_include_servers, false }
329
+ end
330
+
331
+ it "should not include the servers in the text template" do
332
+ result[:text].should_not match('server-a')
333
+ end
334
+
335
+ it "should not include the servers in the html template" do
336
+ result[:html].should_not match('server-a')
337
+ result[:html].should_not match('mailgun_servers')
338
+ end
339
+ end
340
+
341
+ end
342
+
343
+ end
344
+
266
345
  context "#process_send_email_options" do
267
346
  let(:test_mailgun_domain) { 'example.com' }
268
347
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: capistrano-mailgun
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.0
4
+ version: 1.3.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-11-19 00:00:00.000000000 Z
12
+ date: 2013-02-03 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: capistrano
@@ -81,18 +81,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
81
81
  - - ! '>='
82
82
  - !ruby/object:Gem::Version
83
83
  version: '0'
84
- segments:
85
- - 0
86
- hash: -2899719465359232847
87
84
  required_rubygems_version: !ruby/object:Gem::Requirement
88
85
  none: false
89
86
  requirements:
90
87
  - - ! '>='
91
88
  - !ruby/object:Gem::Version
92
89
  version: '0'
93
- segments:
94
- - 0
95
- hash: -2899719465359232847
96
90
  requirements: []
97
91
  rubyforge_project:
98
92
  rubygems_version: 1.8.24
@@ -105,3 +99,4 @@ test_files:
105
99
  - spec/fixtures/text_body.erb
106
100
  - spec/integration_spec.rb
107
101
  - spec/spec_helper.rb
102
+ has_rdoc: