janky 0.9.0 → 0.9.9

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.
@@ -41,7 +41,7 @@ module Janky
41
41
  repository = @payload["repository"]
42
42
 
43
43
  if repository["private"]
44
- "git@github.com:#{URI(repository["url"]).path[1..-1]}"
44
+ "git@#{GitHub.git_host}:#{URI(repository["url"]).path[1..-1]}"
45
45
  else
46
46
  uri = URI(repository["url"])
47
47
  uri.scheme = "git"
@@ -4,7 +4,7 @@ module Janky
4
4
  # builds.
5
5
  #
6
6
  # The client side implementation is at
7
- # <https://github.com/github/hubot/blob/master/scripts/ci.js>
7
+ # <https://github.com/github/hubot-scripts/blob/master/src/scripts/janky.coffee>
8
8
  class Hubot < Sinatra::Base
9
9
  register Helpers
10
10
 
@@ -15,7 +15,7 @@ module Janky
15
15
  repo = Repository.setup(nwo, name)
16
16
 
17
17
  if repo
18
- url = "#{settings.base_url}/#{repo.name}"
18
+ url = "#{settings.base_url}#{repo.name}"
19
19
  [201, "Setup #{repo.name} at #{repo.uri} | #{url}"]
20
20
  else
21
21
  [400, "Couldn't access #{nwo}. Check the permissions."]
@@ -31,11 +31,12 @@ module Janky
31
31
  end
32
32
 
33
33
  # Build a repository's branch.
34
- post "/:repo_name/:branch" do |repo_name, branch_name|
34
+ post %r{\/([-_\.0-9a-zA-Z]+)\/([-_\.a-zA-z0-9\/]+)} do |repo_name, branch_name|
35
35
  repo = find_repo(repo_name)
36
36
  branch = repo.branch_for(branch_name)
37
37
  build = branch.current_build
38
- room_id = params["room_id"] && Integer(params["room_id"])
38
+
39
+ room_id = (params["room_id"] && Integer(params["room_id"]) rescue nil)
39
40
 
40
41
  if build
41
42
  build.rerun(room_id)
@@ -48,7 +49,7 @@ module Janky
48
49
 
49
50
  # Get a list of available rooms.
50
51
  get "/rooms" do
51
- Yajl.dump(Campfire.room_names)
52
+ Yajl.dump(ChatService.room_names)
52
53
  end
53
54
 
54
55
  # Update a repository's notification room.
@@ -56,7 +57,7 @@ module Janky
56
57
  repo = find_repo(repo_name)
57
58
  room = params["room"]
58
59
 
59
- if room_id = Campfire.room_id(room)
60
+ if room_id = ChatService.room_id(room)
60
61
  repo.update_attributes!(:room_id => room_id)
61
62
  [200, "Room for #{repo.name} updated to #{room}"]
62
63
  else
@@ -67,7 +68,7 @@ module Janky
67
68
  # Get the status of all projects.
68
69
  get "/" do
69
70
  content_type "text/plain"
70
- repos = Repository.all.map do |repo|
71
+ repos = Repository.all(:include => [:branches, :commits, :builds]).map do |repo|
71
72
  master = repo.branch_for("master")
72
73
 
73
74
  "%-17s %-13s %-10s %40s" % [
@@ -81,7 +82,7 @@ module Janky
81
82
  end
82
83
 
83
84
  # Get the status of a repository's branch.
84
- get "/:repo_name/:branch_name" do |repo_name, branch_name|
85
+ get %r{\/([-_\.0-9a-zA-Z]+)\/([-_\.a-zA-z0-9\/]+)} do |repo_name, branch_name|
85
86
  limit = params["limit"]
86
87
 
87
88
  repo = find_repo(repo_name)
@@ -105,12 +106,12 @@ module Janky
105
106
  get "/help" do
106
107
  content_type "text/plain"
107
108
  <<-EOS
108
- hubot ci build janky
109
- hubot ci build janky/fix-everything
110
- hubot ci setup github/janky [name]
111
- hubot ci toggle janky
112
- hubot ci rooms
113
- hubot ci set room janky The Danger Room
109
+ ci build janky
110
+ ci build janky/fix-everything
111
+ ci setup github/janky [name]
112
+ ci toggle janky
113
+ ci rooms
114
+ ci set room janky development
114
115
  EOS
115
116
  end
116
117
  end
@@ -71,9 +71,13 @@ module Janky
71
71
  uri = server_url
72
72
  user = uri.user
73
73
  pass = uri.password
74
+ path = uri.path
74
75
  http = Net::HTTP.new(uri.host, uri.port)
76
+ if uri.scheme == "https"
77
+ http.use_ssl = true
78
+ end
75
79
 
76
- get = Net::HTTP::Get.new("/job/#{name}/")
80
+ get = Net::HTTP::Get.new("#{path}/job/#{name}/")
77
81
  get.basic_auth(user, pass) if user && pass
78
82
  response = http.request(get)
79
83
 
@@ -92,9 +96,13 @@ module Janky
92
96
  uri = server_url
93
97
  user = uri.user
94
98
  pass = uri.password
99
+ path = uri.path
95
100
  http = Net::HTTP.new(uri.host, uri.port)
101
+ if uri.scheme == "https"
102
+ http.use_ssl = true
103
+ end
96
104
 
97
- post = Net::HTTP::Post.new("/createItem?name=#{name}")
105
+ post = Net::HTTP::Post.new("#{path}/createItem?name=#{name}")
98
106
  post.basic_auth(user, pass) if user && pass
99
107
  post["Content-Type"] = "application/xml"
100
108
  post.body = config
@@ -1,8 +1,9 @@
1
1
  module Janky
2
2
  module Notifier
3
- class Campfire
3
+ class ChatService
4
4
  def self.completed(build)
5
- status = build.green? ? "was successful" : "failed"
5
+ status = build.green? ? "was successful" : "failed"
6
+ color = build.green? ? "green" : "red"
6
7
 
7
8
  message = "Build #%s (%s) of %s/%s %s (%ss) %s" % [
8
9
  build.number,
@@ -14,7 +15,7 @@ module Janky
14
15
  build.compare
15
16
  ]
16
17
 
17
- ::Janky::Campfire.speak(message, build.room_id)
18
+ ::Janky::ChatService.speak(message, build.room_id, {:color => color})
18
19
  end
19
20
  end
20
21
  end
@@ -24,7 +24,7 @@ module Janky
24
24
  end
25
25
 
26
26
  def success?(repo, branch, room_name)
27
- room_name ||= Janky::Campfire.default_room_name
27
+ room_name ||= Janky::ChatService.default_room_name
28
28
 
29
29
  builds = @notifications.select do |state, build|
30
30
  state == :completed &&
@@ -38,7 +38,7 @@ module Janky
38
38
  end
39
39
 
40
40
  def failure?(repo, branch, room_name)
41
- room_name ||= Janky::Campfire.default_room_name
41
+ room_name ||= Janky::ChatService.default_room_name
42
42
 
43
43
  builds = @notifications.select do |state, build|
44
44
  state == :completed &&
@@ -25,6 +25,7 @@ a img{ border:none; }
25
25
  * html .clearfix {height: 1%;}
26
26
  .clearfix {display:inline-block;}
27
27
  .clearfix {display: block;}
28
+ .right {float: right;}
28
29
 
29
30
  /* @end */
30
31
 
@@ -112,14 +113,21 @@ ul.builds li.building:hover{
112
113
  }
113
114
 
114
115
  ul.builds a{
115
- display:block;
116
116
  text-decoration:none;
117
- background:url(../images/disclosure-arrow.png) 100% 10px no-repeat;
118
117
  }
119
- ul.builds li:hover a{
120
- background-position:100% -90px;
118
+
119
+ ul.builds a.console{
120
+ float: right;
121
+ display:block;
122
+ width: 22px;
123
+ height: 40px;
124
+ margin-left: 10px;
125
+ background:url(../images/disclosure-arrow.png) 65% 10px no-repeat;
121
126
  }
122
- ul.builds .building a{
127
+ ul.builds li:hover a.console{
128
+ background-position:65% -90px;
129
+ }
130
+ ul.builds .building a.console{
123
131
  background:none;
124
132
  cursor:default;
125
133
  }
@@ -144,16 +152,31 @@ ul.builds h2{
144
152
  font-size:16px;
145
153
  text-shadow:0 1px #fff;
146
154
  }
147
- ul.builds .good a h2{
155
+ ul.builds h2 span{
156
+ font-weight: normal;
157
+ color: #666666;
158
+ }
159
+ ul.builds .good a{
160
+ color:#358c00;
161
+ }
162
+ ul.builds .good h2{
148
163
  color:#358c00;
149
164
  }
150
- ul.builds .building a h2{
165
+ ul.builds .building a{
166
+ color:#e59741;
167
+ }
168
+ ul.builds .building h2{
151
169
  color:#e59741;
152
170
  }
153
- ul.builds .janky a h2{
171
+ ul.builds .janky a{
154
172
  color:#ae0000;
155
173
  }
156
-
174
+ ul.builds .janky h2{
175
+ color:#ae0000;
176
+ }
177
+ ul.builds p.sha1{
178
+ margin-top: 2px;
179
+ }
157
180
  ul.builds p{
158
181
  margin:-2px 0 0 0;
159
182
  font-size:13px;
@@ -201,4 +224,4 @@ pre::-webkit-scrollbar-thumb:horizontal{
201
224
  -webkit-border-radius: 4px;
202
225
  }
203
226
 
204
- /* @end */
227
+ /* @end */
@@ -86,27 +86,27 @@ module Janky
86
86
  #
87
87
  # Returns the user name as a String.
88
88
  def github_owner
89
- uri[/github\.com[\/:](\w+)\//] && $1
89
+ uri[/.*[\/:]([a-zA-Z0-9\-_]+)\//] && $1
90
90
  end
91
91
 
92
92
  # Name of this repository on GitHub.
93
93
  #
94
94
  # Returns the name as a String.
95
95
  def github_name
96
- uri[/github\.com[\/:](\w+)\/([a-zA-Z0-9\-_]+)/] && $2
96
+ uri[/.*[\/:]([a-zA-Z0-9\-_]+)\/([a-zA-Z0-9\-_]+)/] && $2
97
97
  end
98
98
 
99
99
  # Name of the Campfire room receiving build notifications.
100
100
  #
101
101
  # Returns the name as a String.
102
102
  def campfire_room
103
- Campfire.room_name(room_id)
103
+ ChatService.room_name(room_id)
104
104
  end
105
105
 
106
106
  # Ditto but returns the Fixnum room id. Defaults to the one set
107
107
  # in Campfire.setup.
108
108
  def room_id
109
- read_attribute(:room_id) || Campfire.default_room_id
109
+ read_attribute(:room_id) || ChatService.default_room_id
110
110
  end
111
111
 
112
112
  # Setups GitHub and Jenkins for build this repository.
@@ -1,11 +1,16 @@
1
1
  <ul class="builds">
2
2
  {{# jobs }}
3
3
  <li class="{{ status }}">
4
- <a href="{{ console_path }}">
5
- <span class="status"></span>
6
- <h2>{{ name }}</h2>
7
- <p>{{{ last_built_text }}}</p>
8
- </a>
4
+ <span class="status"></span>
5
+ <a class="console" href="{{ console_path }}"></a>
6
+ <p class="right sha1"><a title="{{message}}" href="{{compare_url}}">{{sha1}}</a></p>
7
+ <h2>
8
+ <a href="{{repo_path}}">{{ repo_name }}</a>/<a href="{{branch_path}}">{{ branch_name }}</a>
9
+ </h2>
10
+ <p>
11
+ <span class="right">{{author}}</span>
12
+ {{{ last_built_text }}}
13
+ </p>
9
14
  </li>
10
15
  {{/ jobs }}
11
16
  </ul>
@@ -1,3 +1,3 @@
1
1
  module Janky
2
- VERSION = "0.9.0"
2
+ VERSION = "0.9.9"
3
3
  end
@@ -6,9 +6,16 @@ module Janky
6
6
  @builds.collect do |build|
7
7
  {
8
8
  :console_path => "/#{build.number}/output",
9
- :name => "#{build.repo_name}/#{build.branch_name}",
9
+ :compare_url => build.compare,
10
+ :repo_path => "/#{build.repo_name}",
11
+ :branch_path => "/#{build.repo_name}/#{build.branch_name}",
12
+ :repo_name => build.repo_name,
13
+ :branch_name => build.branch_name,
10
14
  :status => css_status_for(build),
11
- :last_built_text => last_built_text_for(build)
15
+ :last_built_text => last_built_text_for(build),
16
+ :message => build.commit_message,
17
+ :sha1 => build.sha1,
18
+ :author => build.commit_author.split("<").first
12
19
  }
13
20
  end
14
21
  end
@@ -25,7 +32,7 @@ module Janky
25
32
 
26
33
  def last_built_text_for(build)
27
34
  if build.building?
28
- "Building since <span class='relatize'>#{build.started_at}</span>…"
35
+ "Build started <span class='relatize'>#{build.started_at}</span>…"
29
36
  elsif build.completed?
30
37
  "Built in <span>#{build.duration}</span> seconds"
31
38
  end
@@ -1,3 +1,4 @@
1
+ # encoding: UTF-8
1
2
  module Janky
2
3
  module Views
3
4
  class Layout < Mustache
@@ -8,8 +8,8 @@ class JankyTest < Test::Unit::TestCase
8
8
 
9
9
  DatabaseCleaner.clean_with(:truncation)
10
10
 
11
- Janky::Campfire.rooms = {1 => "enterprise", 2 => "builds"}
12
- Janky::Campfire.default_room_name = "builds"
11
+ Janky::ChatService.rooms = {1 => "enterprise", 2 => "builds"}
12
+ Janky::ChatService.default_room_name = "builds"
13
13
 
14
14
  hubot_setup("github/github")
15
15
  end
@@ -268,4 +268,16 @@ class JankyTest < Test::Unit::TestCase
268
268
  assert hubot_build("janky", "master").not_found?
269
269
  assert hubot_build("github", "master").not_found?
270
270
  end
271
+
272
+ test "github owner is parsed correctly" do
273
+ repo = Janky::Repository.setup("github/janky")
274
+ assert_equal "github", repo.github_owner
275
+ assert_equal "janky", repo.github_name
276
+ end
277
+
278
+ test "owner with a dash is parsed correctly" do
279
+ repo = Janky::Repository.setup("digital-science/central-ftp-manage")
280
+ assert_equal "digital-science", repo.github_owner
281
+ assert_equal "central-ftp-manage", repo.github_name
282
+ end
271
283
  end
@@ -17,9 +17,10 @@ class Test::Unit::TestCase
17
17
  "JANKY_GITHUB_HOOK_SECRET" => "secret",
18
18
  "JANKY_HUBOT_USER" => "hubot",
19
19
  "JANKY_HUBOT_PASSWORD" => "password",
20
- "JANKY_CAMPFIRE_ACCOUNT" => "github",
21
- "JANKY_CAMPFIRE_TOKEN" => "token",
22
- "JANKY_CAMPFIRE_DEFAULT_ROOM" => "Builds"
20
+ "JANKY_CHAT_CAMPFIRE_ACCOUNT" => "github",
21
+ "JANKY_CHAT_CAMPFIRE_TOKEN" => "token",
22
+ "JANKY_CHAT_DEFAULT_ROOM" => "Builds",
23
+ "JANKY_CHAT" => "campfire"
23
24
  }
24
25
  end
25
26
 
@@ -71,7 +72,7 @@ class Test::Unit::TestCase
71
72
 
72
73
  def hubot_build(repo, branch, room_name = nil)
73
74
  params =
74
- if room_id = Janky::Campfire.room_id(room_name)
75
+ if room_id = Janky::ChatService.room_id(room_name)
75
76
  {"room_id" => room_id.to_s}
76
77
  else
77
78
  {}
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: janky
3
3
  version: !ruby/object:Gem::Version
4
- hash: 59
4
+ hash: 41
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 9
9
- - 0
10
- version: 0.9.0
9
+ - 9
10
+ version: 0.9.9
11
11
  platform: ruby
12
12
  authors:
13
13
  - GitHub, Inc.
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-12-19 00:00:00 +01:00
18
+ date: 2012-02-10 00:00:00 +01:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -88,11 +88,12 @@ dependencies:
88
88
  requirements:
89
89
  - - ~>
90
90
  - !ruby/object:Gem::Version
91
- hash: 27
91
+ hash: 19
92
92
  segments:
93
+ - 1
94
+ - 1
93
95
  - 0
94
- - 8
95
- version: "0.8"
96
+ version: 1.1.0
96
97
  type: :runtime
97
98
  version_requirements: *id005
98
99
  - !ruby/object:Gem::Dependency
@@ -230,8 +231,10 @@ files:
230
231
  - lib/janky/builder/payload.rb
231
232
  - lib/janky/builder/receiver.rb
232
233
  - lib/janky/builder/runner.rb
233
- - lib/janky/campfire.rb
234
- - lib/janky/campfire/mock.rb
234
+ - lib/janky/chat_service.rb
235
+ - lib/janky/chat_service/campfire.rb
236
+ - lib/janky/chat_service/hipchat.rb
237
+ - lib/janky/chat_service/mock.rb
235
238
  - lib/janky/commit.rb
236
239
  - lib/janky/database/migrate/1312115512_init.rb
237
240
  - lib/janky/database/migrate/1312117285_non_unique_repo_uri.rb
@@ -256,7 +259,7 @@ files:
256
259
  - lib/janky/hubot.rb
257
260
  - lib/janky/job_creator.rb
258
261
  - lib/janky/notifier.rb
259
- - lib/janky/notifier/campfire.rb
262
+ - lib/janky/notifier/chat_service.rb
260
263
  - lib/janky/notifier/mock.rb
261
264
  - lib/janky/notifier/multi.rb
262
265
  - lib/janky/public/css/base.css