capfire 0.2.1 → 0.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.
- data/Rakefile +2 -2
- data/VERSION +1 -1
- data/generators/capfire_generator.rb +2 -1
- data/lib/capfire.rb +108 -0
- data/lib/capfire/capistrano.rb +50 -35
- metadata +8 -8
- data/lib/Capfire.rb +0 -6
data/Rakefile
CHANGED
@@ -7,8 +7,8 @@ begin
|
|
7
7
|
gem.name = "capfire"
|
8
8
|
gem.summary = %Q{Send a notification to Campfire after a cap deploy}
|
9
9
|
gem.description = %Q{Inspired by http://github.com/blog/609-tracking-deploys-with-compare-view}
|
10
|
-
gem.email = "
|
11
|
-
gem.homepage = "http://github.com/pjaspers/
|
10
|
+
gem.email = "piet@10to1.be"
|
11
|
+
gem.homepage = "http://github.com/pjaspers/capfire"
|
12
12
|
gem.authors = ["pjaspers", "atog"]
|
13
13
|
gem.files = FileList['[A-Z]*',
|
14
14
|
'generators/**/*.*',
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.3.0
|
@@ -27,7 +27,8 @@ campfire:
|
|
27
27
|
ssl: false
|
28
28
|
room: #{options[:chat_room]}
|
29
29
|
message: "I (#deployer#) deployed #application# with `cap #args#` (#compare_url#)"
|
30
|
-
|
30
|
+
idiot_message: "LATFH: #deployer# wanted to deploy #application#, but forgot to push first."
|
31
|
+
cowsay: false
|
31
32
|
cow: random
|
32
33
|
CONF
|
33
34
|
unless campfire_file_exists?
|
data/lib/capfire.rb
ADDED
@@ -0,0 +1,108 @@
|
|
1
|
+
# Gem for applications to automatically post to Campfire after an deploy.
|
2
|
+
|
3
|
+
class Capfire
|
4
|
+
# To see how it actually works take a gander at the generator
|
5
|
+
# or in the capistrano.rb
|
6
|
+
class << self
|
7
|
+
def config_file_exists?
|
8
|
+
File.exists?(File.join(ENV['HOME'],'.campfire'))
|
9
|
+
end
|
10
|
+
|
11
|
+
def valid_config?
|
12
|
+
config = self.config
|
13
|
+
config["message"] && config["room"] && config ["token"] && config["account"]
|
14
|
+
end
|
15
|
+
|
16
|
+
def config
|
17
|
+
YAML::load(File.open(File.join(ENV['HOME'],'.campfire')))["campfire"]
|
18
|
+
end
|
19
|
+
|
20
|
+
# Campfire room
|
21
|
+
def room
|
22
|
+
self.config["room"]
|
23
|
+
end
|
24
|
+
|
25
|
+
# Campfire account
|
26
|
+
def account
|
27
|
+
self.config["account"]
|
28
|
+
end
|
29
|
+
|
30
|
+
# Campfire token
|
31
|
+
def token
|
32
|
+
self.config["token"]
|
33
|
+
end
|
34
|
+
|
35
|
+
# `brew install cowsay && cowsay "capfire"`
|
36
|
+
# _________
|
37
|
+
#< capfire >
|
38
|
+
# ---------
|
39
|
+
# \ ^__^
|
40
|
+
# \ (oo)\_______
|
41
|
+
# (__)\ )\/\
|
42
|
+
# ||----w |
|
43
|
+
# || ||
|
44
|
+
def cowsay?
|
45
|
+
config["cowsay"] && self.bin_installed?("cowsay")
|
46
|
+
end
|
47
|
+
|
48
|
+
# Who is deploying
|
49
|
+
def deployer
|
50
|
+
Etc.getlogin
|
51
|
+
end
|
52
|
+
|
53
|
+
# Link to github's excellent Compare View
|
54
|
+
def github_compare_url(repo_url, first_commit, last_commit)
|
55
|
+
repo_url.gsub!(/git@/, 'http://')
|
56
|
+
repo_url.gsub!(/\.com:/,'.com/')
|
57
|
+
repo_url.gsub!(/\.git/, '')
|
58
|
+
"#{repo_url}/compare/#{first_commit}...#{last_commit}"
|
59
|
+
end
|
60
|
+
|
61
|
+
def default_idiot_message
|
62
|
+
"LATFH: #deployer# wanted to deploy #application#, but forgot to push first."
|
63
|
+
end
|
64
|
+
|
65
|
+
# Message to post on deploying without pushing
|
66
|
+
def idiot_message(application)
|
67
|
+
message = self.config["idiot_message"]
|
68
|
+
message = default_idiot_message unless message
|
69
|
+
message.gsub!(/#deployer#/, self.deployer)
|
70
|
+
message.gsub!(/#application#/, application)
|
71
|
+
message
|
72
|
+
end
|
73
|
+
|
74
|
+
# Message to post to campfire on deploy
|
75
|
+
def deploy_message(args,compare_url, application)
|
76
|
+
message = self.config["message"]
|
77
|
+
message.gsub!(/#deployer#/, deployer)
|
78
|
+
message.gsub!(/#application#/, application)
|
79
|
+
message.gsub!(/#args#/, args)
|
80
|
+
message.gsub!(/#compare_url#/, compare_url)
|
81
|
+
message
|
82
|
+
end
|
83
|
+
|
84
|
+
# Quick and irty way to check for installed bins
|
85
|
+
# Ideally this should also check if it's in the users
|
86
|
+
# path etc. Skipping for now.
|
87
|
+
def bin_installed?(bin_name)
|
88
|
+
!`which #{bin_name}`.empty?
|
89
|
+
end
|
90
|
+
|
91
|
+
# Initializes a broach campfire room
|
92
|
+
def broach_room
|
93
|
+
Broach.settings = {
|
94
|
+
'account' => self.account,
|
95
|
+
'token' => self.token,
|
96
|
+
'use_ssl' => true
|
97
|
+
}
|
98
|
+
Broach::Room.find_by_name(self.room)
|
99
|
+
end
|
100
|
+
|
101
|
+
# Posts to campfire
|
102
|
+
def speak(message)
|
103
|
+
self.broach_room.speak(message)
|
104
|
+
end
|
105
|
+
|
106
|
+
end
|
107
|
+
|
108
|
+
end
|
data/lib/capfire/capistrano.rb
CHANGED
@@ -1,49 +1,64 @@
|
|
1
|
-
#
|
1
|
+
# Capistrano task for posting to Campfire.
|
2
|
+
#
|
3
|
+
# There are two ways to use Capfire, either run the generator (see the README)
|
4
|
+
# or add 'require "capfire/capistrano"' to your deploy.rb.
|
2
5
|
|
3
6
|
require 'broach'
|
7
|
+
require 'capfire'
|
4
8
|
|
5
9
|
Capistrano::Configuration.instance(:must_exist).load do
|
6
|
-
|
7
10
|
# Don't bother users who have capfire installed but don't have a ~/.campfire file
|
8
|
-
|
9
|
-
|
11
|
+
|
12
|
+
if Capfire.config_file_exists?
|
13
|
+
if Capfire.valid_config?
|
14
|
+
before "deploy:update_code", "capfire:check_for_push"
|
15
|
+
after "deploy:update_code", "capfire:post_to_campfire"
|
16
|
+
else
|
17
|
+
logger.info "Not all required keys found in your .campfire file. Please regenerate."
|
18
|
+
end
|
19
|
+
else
|
20
|
+
logger.info "Couldn't find a .campfire in your home directory."
|
10
21
|
end
|
11
22
|
|
12
|
-
namespace :
|
13
|
-
|
14
|
-
|
23
|
+
namespace :capfire do
|
24
|
+
|
25
|
+
desc "Check if local version was pushed to github"
|
26
|
+
task :check_for_push do
|
27
|
+
deployed_version = current_revision[0,7] rescue "0000000"
|
28
|
+
local_version = `git rev-parse HEAD`[0,7]
|
29
|
+
if deployed_version == local_version
|
30
|
+
`say -v "Cellos" fail` if Capfire.bin_installed?("say")
|
31
|
+
Capfire.speak(Capfire.idiot_message(application)) unless dry_run
|
32
|
+
logger.important "\nDidn't you forget something? A hint: `git push`."
|
33
|
+
exit
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
desc <<-DESC
|
38
|
+
This will post to the campfire room as specified in your ~/.campfire. \
|
39
|
+
The message posted will contain a link to Github's excellent compare view, \
|
40
|
+
the commiters name, the project name and the arguments supplied to cap.
|
41
|
+
DESC
|
42
|
+
task :post_to_campfire do
|
15
43
|
begin
|
16
44
|
source_repo_url = repository
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
45
|
+
deployed_version = previous_revision[0,7] rescue "000000"
|
46
|
+
local_version = `git rev-parse HEAD`[0,7]
|
47
|
+
|
48
|
+
compare_url = Capfire.github_compare_url source_repo_url, deployed_version, local_version
|
49
|
+
message = Capfire.deploy_message(ARGV.join(' '), compare_url, application)
|
50
|
+
message = `cowsay "#{message}"` if Capfire.cowsay?
|
51
|
+
|
52
|
+
if dry_run
|
53
|
+
logger.info "Capfire would have posted:\n#{message}"
|
54
|
+
else
|
55
|
+
Capfire.speak message
|
23
56
|
end
|
24
|
-
|
25
|
-
# Getting the github url
|
26
|
-
github_url = repository.gsub(/git@/, 'http://').gsub(/\.com:/,'.com/').gsub(/\.git/, '')
|
27
|
-
compare_url = "#{github_url}/compare/#{deployed}...#{deploying}"
|
28
|
-
|
29
|
-
# Reading the config file and drill in on the campfire section of course.
|
30
|
-
config = YAML::load(File.open(File.join(ENV['HOME'],'.campfire')))["campfire"]
|
31
|
-
|
32
|
-
# Ugly but it does the job.
|
33
|
-
message = config["message"].gsub(/#deployer#/, deployer).gsub(/#application#/, application).gsub(/#args#/, ARGV.join(' ')).gsub(/#compare_url#/,compare_url)
|
34
|
-
|
35
|
-
message = `cowsay "#{message}"` if config["cowsay"]
|
36
|
-
|
37
|
-
# Posting the message.
|
38
|
-
Broach.settings = {
|
39
|
-
'account' => config["account"],
|
40
|
-
'token' => config["token"],
|
41
|
-
'use_ssl' => true
|
42
|
-
}
|
43
|
-
room = Broach::Room.find_by_name(config["room"])
|
44
|
-
room.speak(message)
|
57
|
+
logger.info "Posting to Campfire"
|
45
58
|
rescue => e
|
46
|
-
|
59
|
+
# Making sure we don't make capistrano fail.
|
60
|
+
# Cause nothing sucks donkeyballs like not being able to deploy
|
61
|
+
logger.important e.message
|
47
62
|
end
|
48
63
|
end
|
49
64
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: capfire
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 19
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
-
|
10
|
-
version: 0.
|
8
|
+
- 3
|
9
|
+
- 0
|
10
|
+
version: 0.3.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- pjaspers
|
@@ -16,7 +16,7 @@ autorequire:
|
|
16
16
|
bindir: bin
|
17
17
|
cert_chain: []
|
18
18
|
|
19
|
-
date:
|
19
|
+
date: 2011-03-05 00:00:00 +01:00
|
20
20
|
default_executable:
|
21
21
|
dependencies:
|
22
22
|
- !ruby/object:Gem::Dependency
|
@@ -50,7 +50,7 @@ dependencies:
|
|
50
50
|
type: :runtime
|
51
51
|
version_requirements: *id002
|
52
52
|
description: Inspired by http://github.com/blog/609-tracking-deploys-with-compare-view
|
53
|
-
email:
|
53
|
+
email: piet@10to1.be
|
54
54
|
executables: []
|
55
55
|
|
56
56
|
extensions: []
|
@@ -66,12 +66,12 @@ files:
|
|
66
66
|
- generators/capfire_generator.rb
|
67
67
|
- generators/lib/insert_commands.rb
|
68
68
|
- generators/templates/capistrano_hook.rb
|
69
|
-
- lib/
|
69
|
+
- lib/capfire.rb
|
70
70
|
- lib/capfire/capistrano.rb
|
71
71
|
- test/helper.rb
|
72
72
|
- test/test_Capfire.rb
|
73
73
|
has_rdoc: true
|
74
|
-
homepage: http://github.com/pjaspers/
|
74
|
+
homepage: http://github.com/pjaspers/capfire
|
75
75
|
licenses: []
|
76
76
|
|
77
77
|
post_install_message:
|