janky 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (69) hide show
  1. data/CHANGES +3 -0
  2. data/COPYING +22 -0
  3. data/Gemfile +2 -0
  4. data/README.md +211 -0
  5. data/Rakefile +19 -0
  6. data/config.ru +3 -0
  7. data/janky.gemspec +102 -0
  8. data/lib/janky.rb +224 -0
  9. data/lib/janky/app.rb +81 -0
  10. data/lib/janky/branch.rb +112 -0
  11. data/lib/janky/build.rb +223 -0
  12. data/lib/janky/build_request.rb +49 -0
  13. data/lib/janky/builder.rb +108 -0
  14. data/lib/janky/builder/client.rb +82 -0
  15. data/lib/janky/builder/http.rb +43 -0
  16. data/lib/janky/builder/mock.rb +45 -0
  17. data/lib/janky/builder/payload.rb +63 -0
  18. data/lib/janky/builder/receiver.rb +20 -0
  19. data/lib/janky/builder/runner.rb +47 -0
  20. data/lib/janky/campfire.rb +127 -0
  21. data/lib/janky/campfire/mock.rb +0 -0
  22. data/lib/janky/commit.rb +14 -0
  23. data/lib/janky/database/migrate/1312115512_init.rb +48 -0
  24. data/lib/janky/database/migrate/1312117285_non_unique_repo_uri.rb +10 -0
  25. data/lib/janky/database/migrate/1312198807_repo_enabled.rb +11 -0
  26. data/lib/janky/database/migrate/1313867551_add_build_output_column.rb +9 -0
  27. data/lib/janky/database/migrate/1313871652_add_commit_url_column.rb +9 -0
  28. data/lib/janky/database/migrate/1317384618_add_repo_hook_url.rb +9 -0
  29. data/lib/janky/database/migrate/1317384619_add_build_room_id.rb +9 -0
  30. data/lib/janky/database/migrate/1317384629_drop_default_room_id.rb +9 -0
  31. data/lib/janky/database/migrate/1317384649_github_team_id.rb +9 -0
  32. data/lib/janky/database/schema.rb +68 -0
  33. data/lib/janky/database/seed.dump.gz +0 -0
  34. data/lib/janky/exception.rb +62 -0
  35. data/lib/janky/github.rb +67 -0
  36. data/lib/janky/github/api.rb +69 -0
  37. data/lib/janky/github/commit.rb +27 -0
  38. data/lib/janky/github/mock.rb +47 -0
  39. data/lib/janky/github/payload.rb +34 -0
  40. data/lib/janky/github/payload_parser.rb +57 -0
  41. data/lib/janky/github/receiver.rb +69 -0
  42. data/lib/janky/helpers.rb +17 -0
  43. data/lib/janky/hubot.rb +117 -0
  44. data/lib/janky/job_creator.rb +111 -0
  45. data/lib/janky/notifier.rb +84 -0
  46. data/lib/janky/notifier/campfire.rb +21 -0
  47. data/lib/janky/notifier/mock.rb +55 -0
  48. data/lib/janky/notifier/multi.rb +22 -0
  49. data/lib/janky/public/css/base.css +204 -0
  50. data/lib/janky/public/images/building-bot.gif +0 -0
  51. data/lib/janky/public/images/disclosure-arrow.png +0 -0
  52. data/lib/janky/public/images/logo.png +0 -0
  53. data/lib/janky/public/images/robawt-status.gif +0 -0
  54. data/lib/janky/public/javascripts/application.js +3 -0
  55. data/lib/janky/public/javascripts/jquery.js +16 -0
  56. data/lib/janky/public/javascripts/jquery.relatize.js +111 -0
  57. data/lib/janky/repository.rb +174 -0
  58. data/lib/janky/tasks.rb +36 -0
  59. data/lib/janky/templates/console.mustache +4 -0
  60. data/lib/janky/templates/index.mustache +11 -0
  61. data/lib/janky/templates/layout.mustache +22 -0
  62. data/lib/janky/version.rb +3 -0
  63. data/lib/janky/views/console.rb +33 -0
  64. data/lib/janky/views/index.rb +35 -0
  65. data/lib/janky/views/layout.rb +19 -0
  66. data/test/default.xml.erb +0 -0
  67. data/test/janky_test.rb +271 -0
  68. data/test/test_helper.rb +107 -0
  69. metadata +319 -0
@@ -0,0 +1,107 @@
1
+ $LOAD_PATH.unshift(File.expand_path("../../lib", __FILE__))
2
+
3
+ require "janky"
4
+ require "test/unit"
5
+ require "database_cleaner"
6
+
7
+ class Test::Unit::TestCase
8
+ def self.test(name, &block)
9
+ define_method("test_#{name.gsub(/\s+/,'_')}".to_sym, block)
10
+ end
11
+
12
+ def environment
13
+ { "RACK_ENV" => "test",
14
+ "JANKY_CONFIG_DIR" => File.dirname(__FILE__),
15
+ "JANKY_GITHUB_USER" => "hubot",
16
+ "JANKY_GITHUB_OAUTH_TOKEN" => "token",
17
+ "JANKY_GITHUB_HOOK_SECRET" => "secret",
18
+ "JANKY_HUBOT_USER" => "hubot",
19
+ "JANKY_HUBOT_PASSWORD" => "password",
20
+ "JANKY_CAMPFIRE_ACCOUNT" => "github",
21
+ "JANKY_CAMPFIRE_TOKEN" => "token",
22
+ "JANKY_CAMPFIRE_DEFAULT_ROOM" => "Builds"
23
+ }
24
+ end
25
+
26
+ def gh_commit(sha1 = "HEAD")
27
+ Janky::GitHub::Commit.new(
28
+ sha1,
29
+ "https://github.com/github/github/commit/#{sha1}",
30
+ ":octocat:",
31
+ "sr",
32
+ Time.now
33
+ )
34
+ end
35
+
36
+ def gh_payload(repo, branch, commits)
37
+ head = commits.first
38
+
39
+ Janky::GitHub::Payload.new(
40
+ repo.uri,
41
+ branch,
42
+ head.sha1,
43
+ commits,
44
+ "http://github/compare/#{branch}...master"
45
+ )
46
+ end
47
+
48
+ def get(path)
49
+ Rack::MockRequest.new(Janky.app).get(path)
50
+ end
51
+
52
+ def gh_post_receive(repo_name, branch = "master", commit = "HEAD")
53
+ repo = Janky::Repository.find_by_name!(repo_name)
54
+ payload = gh_payload(repo, branch, [gh_commit(commit)])
55
+ digest = OpenSSL::Digest::Digest.new("sha1")
56
+ sig = OpenSSL::HMAC.hexdigest(digest, Janky::GitHub.secret, payload.to_json)
57
+
58
+ Rack::MockRequest.new(Janky.app).post("/_github",
59
+ :input => payload.to_json,
60
+ "CONTENT_TYPE" => "application/json",
61
+ "HTTP_X_HUB_SIGNATURE" => "sha1=#{sig}"
62
+ )
63
+ end
64
+
65
+ def hubot_setup(nwo, name = nil)
66
+ hubot_request("POST", "/_hubot/setup", :params => {
67
+ :nwo => nwo,
68
+ :name => name
69
+ })
70
+ end
71
+
72
+ def hubot_build(repo, branch, room_name = nil)
73
+ params =
74
+ if room_id = Janky::Campfire.room_id(room_name)
75
+ {"room_id" => room_id.to_s}
76
+ else
77
+ {}
78
+ end
79
+
80
+ hubot_request("POST", "/_hubot/#{repo}/#{branch}", :params => params)
81
+ end
82
+
83
+ def hubot_status(repo=nil, branch=nil)
84
+ if repo && branch
85
+ hubot_request("GET", "/_hubot/#{repo}/#{branch}")
86
+ else
87
+ hubot_request("GET", "/_hubot")
88
+ end
89
+ end
90
+
91
+ def hubot_request(method, path, opts={})
92
+ auth = ["#{Janky::Hubot.username}:#{Janky::Hubot.password}"].pack("m*")
93
+ env = {"HTTP_AUTHORIZATION" => "Basic #{auth}"}
94
+
95
+ Rack::MockRequest.new(Janky.app).request(method, path, env.merge(opts))
96
+ end
97
+
98
+ def hubot_toggle(repo)
99
+ hubot_request("POST", "/_hubot/toggle/#{repo}")
100
+ end
101
+
102
+ def hubot_update_room(repo, room_name)
103
+ hubot_request("PUT", "/_hubot/#{repo}", :params => {
104
+ :room => room_name
105
+ })
106
+ end
107
+ end
metadata ADDED
@@ -0,0 +1,319 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: janky
3
+ version: !ruby/object:Gem::Version
4
+ hash: 59
5
+ prerelease:
6
+ segments:
7
+ - 0
8
+ - 9
9
+ - 0
10
+ version: 0.9.0
11
+ platform: ruby
12
+ authors:
13
+ - GitHub, Inc.
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2011-12-19 00:00:00 +01:00
19
+ default_executable:
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ name: rake
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ hash: 63
30
+ segments:
31
+ - 0
32
+ - 9
33
+ - 2
34
+ version: 0.9.2
35
+ type: :runtime
36
+ version_requirements: *id001
37
+ - !ruby/object:Gem::Dependency
38
+ name: sinatra
39
+ prerelease: false
40
+ requirement: &id002 !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ hash: 9
46
+ segments:
47
+ - 1
48
+ - 3
49
+ version: "1.3"
50
+ type: :runtime
51
+ version_requirements: *id002
52
+ - !ruby/object:Gem::Dependency
53
+ name: sinatra_auth_github
54
+ prerelease: false
55
+ requirement: &id003 !ruby/object:Gem::Requirement
56
+ none: false
57
+ requirements:
58
+ - - ~>
59
+ - !ruby/object:Gem::Version
60
+ hash: 17
61
+ segments:
62
+ - 0
63
+ - 1
64
+ - 5
65
+ version: 0.1.5
66
+ type: :runtime
67
+ version_requirements: *id003
68
+ - !ruby/object:Gem::Dependency
69
+ name: mustache
70
+ prerelease: false
71
+ requirement: &id004 !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - ~>
75
+ - !ruby/object:Gem::Version
76
+ hash: 29
77
+ segments:
78
+ - 0
79
+ - 11
80
+ version: "0.11"
81
+ type: :runtime
82
+ version_requirements: *id004
83
+ - !ruby/object:Gem::Dependency
84
+ name: yajl-ruby
85
+ prerelease: false
86
+ requirement: &id005 !ruby/object:Gem::Requirement
87
+ none: false
88
+ requirements:
89
+ - - ~>
90
+ - !ruby/object:Gem::Version
91
+ hash: 27
92
+ segments:
93
+ - 0
94
+ - 8
95
+ version: "0.8"
96
+ type: :runtime
97
+ version_requirements: *id005
98
+ - !ruby/object:Gem::Dependency
99
+ name: activerecord
100
+ prerelease: false
101
+ requirement: &id006 !ruby/object:Gem::Requirement
102
+ none: false
103
+ requirements:
104
+ - - ~>
105
+ - !ruby/object:Gem::Version
106
+ hash: 3
107
+ segments:
108
+ - 3
109
+ - 1
110
+ - 0
111
+ version: 3.1.0
112
+ type: :runtime
113
+ version_requirements: *id006
114
+ - !ruby/object:Gem::Dependency
115
+ name: broach
116
+ prerelease: false
117
+ requirement: &id007 !ruby/object:Gem::Requirement
118
+ none: false
119
+ requirements:
120
+ - - ~>
121
+ - !ruby/object:Gem::Version
122
+ hash: 15
123
+ segments:
124
+ - 0
125
+ - 2
126
+ version: "0.2"
127
+ type: :runtime
128
+ version_requirements: *id007
129
+ - !ruby/object:Gem::Dependency
130
+ name: replicate
131
+ prerelease: false
132
+ requirement: &id008 !ruby/object:Gem::Requirement
133
+ none: false
134
+ requirements:
135
+ - - ~>
136
+ - !ruby/object:Gem::Version
137
+ hash: 7
138
+ segments:
139
+ - 1
140
+ - 4
141
+ version: "1.4"
142
+ type: :runtime
143
+ version_requirements: *id008
144
+ - !ruby/object:Gem::Dependency
145
+ name: shotgun
146
+ prerelease: false
147
+ requirement: &id009 !ruby/object:Gem::Requirement
148
+ none: false
149
+ requirements:
150
+ - - ~>
151
+ - !ruby/object:Gem::Version
152
+ hash: 25
153
+ segments:
154
+ - 0
155
+ - 9
156
+ version: "0.9"
157
+ type: :development
158
+ version_requirements: *id009
159
+ - !ruby/object:Gem::Dependency
160
+ name: thin
161
+ prerelease: false
162
+ requirement: &id010 !ruby/object:Gem::Requirement
163
+ none: false
164
+ requirements:
165
+ - - ~>
166
+ - !ruby/object:Gem::Version
167
+ hash: 11
168
+ segments:
169
+ - 1
170
+ - 2
171
+ version: "1.2"
172
+ type: :development
173
+ version_requirements: *id010
174
+ - !ruby/object:Gem::Dependency
175
+ name: mysql2
176
+ prerelease: false
177
+ requirement: &id011 !ruby/object:Gem::Requirement
178
+ none: false
179
+ requirements:
180
+ - - ~>
181
+ - !ruby/object:Gem::Version
182
+ hash: 19
183
+ segments:
184
+ - 0
185
+ - 3
186
+ - 0
187
+ version: 0.3.0
188
+ type: :development
189
+ version_requirements: *id011
190
+ - !ruby/object:Gem::Dependency
191
+ name: database_cleaner
192
+ prerelease: false
193
+ requirement: &id012 !ruby/object:Gem::Requirement
194
+ none: false
195
+ requirements:
196
+ - - ~>
197
+ - !ruby/object:Gem::Version
198
+ hash: 7
199
+ segments:
200
+ - 0
201
+ - 6
202
+ version: "0.6"
203
+ type: :development
204
+ version_requirements: *id012
205
+ description: Janky is a Continuous Integration server
206
+ email:
207
+ executables: []
208
+
209
+ extensions: []
210
+
211
+ extra_rdoc_files: []
212
+
213
+ files:
214
+ - CHANGES
215
+ - COPYING
216
+ - Gemfile
217
+ - README.md
218
+ - Rakefile
219
+ - config.ru
220
+ - janky.gemspec
221
+ - lib/janky.rb
222
+ - lib/janky/app.rb
223
+ - lib/janky/branch.rb
224
+ - lib/janky/build.rb
225
+ - lib/janky/build_request.rb
226
+ - lib/janky/builder.rb
227
+ - lib/janky/builder/client.rb
228
+ - lib/janky/builder/http.rb
229
+ - lib/janky/builder/mock.rb
230
+ - lib/janky/builder/payload.rb
231
+ - lib/janky/builder/receiver.rb
232
+ - lib/janky/builder/runner.rb
233
+ - lib/janky/campfire.rb
234
+ - lib/janky/campfire/mock.rb
235
+ - lib/janky/commit.rb
236
+ - lib/janky/database/migrate/1312115512_init.rb
237
+ - lib/janky/database/migrate/1312117285_non_unique_repo_uri.rb
238
+ - lib/janky/database/migrate/1312198807_repo_enabled.rb
239
+ - lib/janky/database/migrate/1313867551_add_build_output_column.rb
240
+ - lib/janky/database/migrate/1313871652_add_commit_url_column.rb
241
+ - lib/janky/database/migrate/1317384618_add_repo_hook_url.rb
242
+ - lib/janky/database/migrate/1317384619_add_build_room_id.rb
243
+ - lib/janky/database/migrate/1317384629_drop_default_room_id.rb
244
+ - lib/janky/database/migrate/1317384649_github_team_id.rb
245
+ - lib/janky/database/schema.rb
246
+ - lib/janky/database/seed.dump.gz
247
+ - lib/janky/exception.rb
248
+ - lib/janky/github.rb
249
+ - lib/janky/github/api.rb
250
+ - lib/janky/github/commit.rb
251
+ - lib/janky/github/mock.rb
252
+ - lib/janky/github/payload.rb
253
+ - lib/janky/github/payload_parser.rb
254
+ - lib/janky/github/receiver.rb
255
+ - lib/janky/helpers.rb
256
+ - lib/janky/hubot.rb
257
+ - lib/janky/job_creator.rb
258
+ - lib/janky/notifier.rb
259
+ - lib/janky/notifier/campfire.rb
260
+ - lib/janky/notifier/mock.rb
261
+ - lib/janky/notifier/multi.rb
262
+ - lib/janky/public/css/base.css
263
+ - lib/janky/public/images/building-bot.gif
264
+ - lib/janky/public/images/disclosure-arrow.png
265
+ - lib/janky/public/images/logo.png
266
+ - lib/janky/public/images/robawt-status.gif
267
+ - lib/janky/public/javascripts/application.js
268
+ - lib/janky/public/javascripts/jquery.js
269
+ - lib/janky/public/javascripts/jquery.relatize.js
270
+ - lib/janky/repository.rb
271
+ - lib/janky/tasks.rb
272
+ - lib/janky/templates/console.mustache
273
+ - lib/janky/templates/index.mustache
274
+ - lib/janky/templates/layout.mustache
275
+ - lib/janky/version.rb
276
+ - lib/janky/views/console.rb
277
+ - lib/janky/views/index.rb
278
+ - lib/janky/views/layout.rb
279
+ - test/default.xml.erb
280
+ - test/janky_test.rb
281
+ - test/test_helper.rb
282
+ has_rdoc: true
283
+ homepage: https://github.com/github/janky
284
+ licenses: []
285
+
286
+ post_install_message:
287
+ rdoc_options: []
288
+
289
+ require_paths:
290
+ - lib
291
+ required_ruby_version: !ruby/object:Gem::Requirement
292
+ none: false
293
+ requirements:
294
+ - - ">="
295
+ - !ruby/object:Gem::Version
296
+ hash: 3
297
+ segments:
298
+ - 0
299
+ version: "0"
300
+ required_rubygems_version: !ruby/object:Gem::Requirement
301
+ none: false
302
+ requirements:
303
+ - - ">="
304
+ - !ruby/object:Gem::Version
305
+ hash: 3
306
+ segments:
307
+ - 0
308
+ version: "0"
309
+ requirements: []
310
+
311
+ rubyforge_project:
312
+ rubygems_version: 1.6.2
313
+ signing_key:
314
+ specification_version: 3
315
+ summary: Continuous Integration server built on top of Jenkins and designed for GitHub and Hubot
316
+ test_files:
317
+ - test/default.xml.erb
318
+ - test/janky_test.rb
319
+ - test/test_helper.rb