janky 0.9.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.
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