cijoe 0.7.0 → 0.8.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/README.md CHANGED
@@ -7,7 +7,9 @@ server that'll run your tests on demand and report their pass/fail status.
7
7
 
8
8
  Because knowing is half the battle.
9
9
 
10
- ![The Battle](http://img.skitch.com/20090805-g4a2qhttwij8n2jr9t552efn3k.png)
10
+ [![The Battle](http://img.skitch.com/20090805-g4a2qhttwij8n2jr9t552efn3k.png)](http://nerduo.com/thebattle/)
11
+
12
+ ([Buy the shirt](http://nerduo.com/thebattle/))
11
13
 
12
14
  Quickstart
13
15
  ----------
@@ -75,17 +77,16 @@ Campfire notification is included, because it's what we use. Want Joe
75
77
  notify your Campfire? Put this in your repo's `.git/config`:
76
78
 
77
79
  [campfire]
78
- token = your_api_token
79
- subdomain = whatever
80
- room = Awesomeness
81
- ssl = false
82
-
83
- Note: your API token may differ between subdomains!
80
+ user = your@campfire.email
81
+ pass = passw0rd
82
+ subdomain = whatever
83
+ room = Awesomeness
84
+ ssl = false
84
85
 
85
86
  Or do it the old fashion way:
86
87
 
87
88
  $ cd yourrepo
88
- $ git config --add campfire.token 98ADFLKJSDOIU7BLAH
89
+ $ git config --add campfire.user chris@ozmm.org
89
90
  $ git config --add campfire.subdomain github
90
91
  etc.
91
92
 
data/Rakefile CHANGED
@@ -18,8 +18,6 @@ rescue LoadError
18
18
  end
19
19
  end
20
20
 
21
- task :test => :check_dependencies
22
-
23
21
  task :default => :test
24
22
 
25
23
  require 'rake/rdoctask'
@@ -89,7 +89,7 @@ class CIJoe
89
89
 
90
90
  # run the build but make sure only one is running
91
91
  # at a time (if new one comes in we will park it)
92
- def build
92
+ def build(branch=nil)
93
93
  if building?
94
94
  # only if switched on to build all incoming requests
95
95
  if !repo_config.buildallfile.to_s.empty?
@@ -103,7 +103,7 @@ class CIJoe
103
103
  end
104
104
  @current_build = Build.new(@project_path, @user, @project)
105
105
  write_build 'current', @current_build
106
- Thread.new { build! }
106
+ Thread.new { build!(branch) }
107
107
  end
108
108
 
109
109
  def open_pipe(cmd)
@@ -121,7 +121,8 @@ class CIJoe
121
121
  end
122
122
 
123
123
  # update git then run the build
124
- def build!
124
+ def build!(branch=nil)
125
+ @git_branch = branch
125
126
  build = @current_build
126
127
  output = ''
127
128
  git_update
@@ -166,8 +167,9 @@ class CIJoe
166
167
  end
167
168
 
168
169
  def git_branch
170
+ return @git_branch if @git_branch
169
171
  branch = repo_config.branch.to_s
170
- branch == '' ? "master" : branch
172
+ @git_branch = branch == '' ? "master" : branch
171
173
  end
172
174
 
173
175
  # massage our repo
@@ -194,13 +196,8 @@ class CIJoe
194
196
 
195
197
  # restore current / last build state from disk.
196
198
  def restore
197
- unless @last_build
198
- @last_build = read_build('last')
199
- end
200
-
201
- unless @current_build
202
- @current_build = read_build('current')
203
- end
199
+ @last_build = read_build('last')
200
+ @current_build = read_build('current')
204
201
 
205
202
  Process.kill(0, @current_build.pid) if @current_build && @current_build.pid
206
203
  rescue Errno::ESRCH
@@ -11,11 +11,12 @@ class CIJoe
11
11
  end
12
12
 
13
13
  puts "Loaded Campfire notifier"
14
- else
14
+ elsif ENV['RACK_ENV'] != 'test'
15
15
  puts "Can't load Campfire notifier."
16
16
  puts "Please add the following to your project's .git/config:"
17
17
  puts "[campfire]"
18
- puts "\ttoken = your_api_token"
18
+ puts "\tuser = your@campfire.email"
19
+ puts "\tpass = passw0rd"
19
20
  puts "\tsubdomain = whatever"
20
21
  puts "\troom = Awesomeness"
21
22
  puts "\tssl = false"
@@ -25,15 +26,16 @@ class CIJoe
25
26
  def self.config
26
27
  campfire_config = Config.new('campfire', @project_path)
27
28
  @config ||= {
28
- :subdomain => Config.campfire(@project_path).subdomain.to_s,
29
- :token => Config.campfire(@project_path).token.to_s,
30
- :room => Config.campfire(@project_path).room.to_s,
31
- :ssl => Config.campfire(@project_path).ssl.to_s.strip == 'true'
29
+ :subdomain => campfire_config.subdomain.to_s,
30
+ :user => campfire_config.user.to_s,
31
+ :pass => campfire_config.pass.to_s,
32
+ :room => campfire_config.room.to_s,
33
+ :ssl => campfire_config.ssl.to_s.strip == 'true'
32
34
  }
33
35
  end
34
36
 
35
37
  def self.valid_config?
36
- %w( subdomain token room ).all? do |key|
38
+ %w( subdomain user pass room ).all? do |key|
37
39
  !config[key.intern].empty?
38
40
  end
39
41
  end
@@ -49,14 +51,17 @@ class CIJoe
49
51
  @room ||= begin
50
52
  config = Campfire.config
51
53
  campfire = Tinder::Campfire.new(config[:subdomain],
52
- :token => config[:token],
54
+ :username => config[:user],
55
+ :password => config[:pass],
53
56
  :ssl => config[:ssl] || false)
54
57
  campfire.find_room_by_name(config[:room])
55
58
  end
56
59
  end
57
60
 
58
61
  def short_message
59
- "Build #{short_sha} of #{project} #{worked? ? "was successful" : "failed"}"
62
+ "Build #{short_sha} of #{project} " +
63
+ (worked? ? "was successful" : "failed") +
64
+ " (#{duration.to_i}s)"
60
65
  end
61
66
 
62
67
  def full_message
@@ -1,7 +1,7 @@
1
1
  class CIJoe
2
2
  class Config
3
3
  def self.method_missing(command, *args)
4
- new(command, args)
4
+ new(command, *args)
5
5
  end
6
6
 
7
7
  def initialize(command, project_path = nil, parent = nil)
@@ -27,10 +27,16 @@ class CIJoe
27
27
  end
28
28
 
29
29
  post '/?' do
30
- payload = params[:payload].to_s
31
- if payload.empty? || payload.include?(joe.git_branch)
32
- joe.build
30
+ payload = YAML.load(params[:payload].to_s) || {}
31
+ pushed_branch = payload[:ref].to_s.split('/').last
32
+
33
+ # Only build if we were given an explicit branch via `?branch=blah`,
34
+ # no payload exists (we're probably testing), or the payload exists and
35
+ # the "ref" property matches our specified build branch.
36
+ if params[:branch] || payload.empty? || pushed_branch == joe.git_branch
37
+ joe.build(params[:branch])
33
38
  end
39
+
34
40
  redirect request.path
35
41
  end
36
42
 
@@ -1,3 +1,3 @@
1
1
  class CIJoe
2
- Version = VERSION = "0.7.0"
2
+ Version = VERSION = "0.8.0"
3
3
  end
@@ -1,6 +1,8 @@
1
1
  require 'rubygems'
2
2
  require 'test/unit'
3
3
 
4
+ ENV['RACK_ENV'] = 'test'
5
+
4
6
  $LOAD_PATH.unshift(File.dirname(__FILE__))
5
7
  $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
6
8
  require 'cijoe'
@@ -13,6 +13,11 @@ class TestCIJoeServer < Test::Unit::TestCase
13
13
 
14
14
  def setup
15
15
  @app = CIJoe::Server.new
16
+ # make Build#restore a no-op so we don't overwrite our current/last
17
+ # build attributes set from tests.
18
+ joe = @app.joe
19
+ def joe.restore
20
+ end
16
21
  end
17
22
 
18
23
  def test_ping
metadata CHANGED
@@ -1,12 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cijoe
3
3
  version: !ruby/object:Gem::Version
4
+ hash: 63
4
5
  prerelease: false
5
6
  segments:
6
7
  - 0
7
- - 7
8
+ - 8
8
9
  - 0
9
- version: 0.7.0
10
+ version: 0.8.0
10
11
  platform: ruby
11
12
  authors:
12
13
  - Chris Wanstrath
@@ -14,16 +15,18 @@ autorequire:
14
15
  bindir: bin
15
16
  cert_chain: []
16
17
 
17
- date: 2010-08-08 00:00:00 -07:00
18
+ date: 2011-02-04 00:00:00 -08:00
18
19
  default_executable:
19
20
  dependencies:
20
21
  - !ruby/object:Gem::Dependency
21
22
  name: choice
22
23
  prerelease: false
23
24
  requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
24
26
  requirements:
25
27
  - - ">="
26
28
  - !ruby/object:Gem::Version
29
+ hash: 3
27
30
  segments:
28
31
  - 0
29
32
  version: "0"
@@ -33,9 +36,11 @@ dependencies:
33
36
  name: sinatra
34
37
  prerelease: false
35
38
  requirement: &id002 !ruby/object:Gem::Requirement
39
+ none: false
36
40
  requirements:
37
41
  - - ">="
38
42
  - !ruby/object:Gem::Version
43
+ hash: 3
39
44
  segments:
40
45
  - 0
41
46
  version: "0"
@@ -45,9 +50,11 @@ dependencies:
45
50
  name: rack-test
46
51
  prerelease: false
47
52
  requirement: &id003 !ruby/object:Gem::Requirement
53
+ none: false
48
54
  requirements:
49
55
  - - ">="
50
56
  - !ruby/object:Gem::Version
57
+ hash: 3
51
58
  segments:
52
59
  - 0
53
60
  version: "0"
@@ -90,23 +97,27 @@ rdoc_options: []
90
97
  require_paths:
91
98
  - lib
92
99
  required_ruby_version: !ruby/object:Gem::Requirement
100
+ none: false
93
101
  requirements:
94
102
  - - ">="
95
103
  - !ruby/object:Gem::Version
104
+ hash: 3
96
105
  segments:
97
106
  - 0
98
107
  version: "0"
99
108
  required_rubygems_version: !ruby/object:Gem::Requirement
109
+ none: false
100
110
  requirements:
101
111
  - - ">="
102
112
  - !ruby/object:Gem::Version
113
+ hash: 3
103
114
  segments:
104
115
  - 0
105
116
  version: "0"
106
117
  requirements: []
107
118
 
108
119
  rubyforge_project:
109
- rubygems_version: 1.3.6
120
+ rubygems_version: 1.3.7
110
121
  signing_key:
111
122
  specification_version: 3
112
123
  summary: cijoe builds your builds.