janky 0.9.12 → 0.9.13
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/CHANGES +18 -0
- data/README.md +5 -1
- data/janky.gemspec +5 -1
- data/lib/janky.rb +5 -0
- data/lib/janky/branch.rb +40 -2
- data/lib/janky/build.rb +6 -2
- data/lib/janky/build_request.rb +5 -4
- data/lib/janky/builder/payload.rb +6 -2
- data/lib/janky/builder/receiver.rb +2 -1
- data/lib/janky/commit.rb +0 -4
- data/lib/janky/database/migrate/1317384650_add_build_indexes.rb +11 -0
- data/lib/janky/database/migrate/1317384651_add_more_build_indexes.rb +13 -0
- data/lib/janky/database/migrate/1317384652_change_commit_message_to_text.rb +5 -0
- data/lib/janky/database/migrate/1317384653_add_build_pusher.rb +9 -0
- data/lib/janky/database/schema.rb +1 -0
- data/lib/janky/github.rb +61 -0
- data/lib/janky/github/api.rb +16 -0
- data/lib/janky/github/mock.rb +36 -0
- data/lib/janky/github/payload.rb +7 -3
- data/lib/janky/github/payload_parser.rb +4 -0
- data/lib/janky/github/receiver.rb +1 -0
- data/lib/janky/hubot.rb +4 -4
- data/lib/janky/notifier/chat_service.rb +1 -1
- data/lib/janky/repository.rb +21 -0
- data/lib/janky/version.rb +1 -1
- data/lib/janky/views/console.rb +1 -1
- data/lib/janky/views/index.rb +1 -1
- data/test/janky_test.rb +41 -0
- data/test/test_helper.rb +20 -5
- metadata +7 -3
data/CHANGES
CHANGED
@@ -1,3 +1,21 @@
|
|
1
|
+
= 0.9.13 / 2012-06-24
|
2
|
+
|
3
|
+
* Pull down the branch HEAD commit from the GitHub API for manual builds.
|
4
|
+
This ensures that the latest code is built even when the webhook fails.
|
5
|
+
[Jake Douglas, Simon Rozet]
|
6
|
+
|
7
|
+
* Record the name of the user that triggered a build in the database. This
|
8
|
+
is mostly useful for applications consuming the Janky API and isn't exposed
|
9
|
+
anywhere in the UI. [Jake Douglas, Simon Rozet]
|
10
|
+
|
11
|
+
* Use full SHA1s when interacting with other systems to avoid ambiguous
|
12
|
+
commits. [Jake Douglas]
|
13
|
+
|
14
|
+
* Deprecate support for Ruby < 1.9.3. [Simon Rozet]
|
15
|
+
|
16
|
+
* Add missing database migrations that were wrongfully omitted from the
|
17
|
+
0.9.12 gem package. [Simon Rozet]
|
18
|
+
|
1
19
|
= 0.9.12 / 2012-06-23
|
2
20
|
|
3
21
|
* Upgrade OAuth authentication gem to use GitHub API v3. [Corey Donohoe]
|
data/README.md
CHANGED
@@ -103,6 +103,8 @@ After configuring the app (see below), create the database:
|
|
103
103
|
|
104
104
|
$ heroku run rake db:migrate
|
105
105
|
|
106
|
+
**NOTE:** Ruby version 1.9.3 is required to run Janky.
|
107
|
+
|
106
108
|
[gist]: https://gist.github.com/1497335
|
107
109
|
|
108
110
|
### Configuring
|
@@ -166,6 +168,7 @@ Required settings:
|
|
166
168
|
admin token, not a notification token.)
|
167
169
|
* `JANKY_CHAT_HIPCHAT_FROM`: name that messages will appear be sent from.
|
168
170
|
Defaults to `CI`.
|
171
|
+
* `JANKY_HUBOT_USER` should be XMPP/Jabber username in format xxxxx_xxxxxx rather than email
|
169
172
|
|
170
173
|
Installation:
|
171
174
|
|
@@ -175,6 +178,7 @@ Installation:
|
|
175
178
|
* `bundle`
|
176
179
|
* `git commit -am "install hipchat"`
|
177
180
|
|
181
|
+
|
178
182
|
### Authentication
|
179
183
|
|
180
184
|
To restrict access to members of a GitHub organization, [register a new
|
@@ -192,7 +196,7 @@ a few extra settings:
|
|
192
196
|
|
193
197
|
Install the [janky script](http://git.io/hubot-janky) in your Hubot
|
194
198
|
then set the `HUBOT_JANKY_URL` environment variable. Example:
|
195
|
-
`http://user:
|
199
|
+
`http://user:password@janky.example.com/_hubot/`, with user and password
|
196
200
|
replaced by `JANKY_HUBOT_USER` and `JANKY_HUBOT_PASSWORD` respectively.
|
197
201
|
|
198
202
|
### Custom Build Configuration
|
data/janky.gemspec
CHANGED
@@ -4,7 +4,7 @@ Gem::Specification.new "janky", Janky::VERSION do |s|
|
|
4
4
|
s.description = "Janky is a Continuous Integration server"
|
5
5
|
s.summary = "Continuous Integration server built on top of Jenkins and " \
|
6
6
|
"designed for GitHub and Hubot"
|
7
|
-
s.authors = ["
|
7
|
+
s.authors = ["Simon Rozet"]
|
8
8
|
s.homepage = "https://github.com/github/janky"
|
9
9
|
s.has_rdoc = false
|
10
10
|
|
@@ -60,6 +60,10 @@ lib/janky/database/migrate/1317384618_add_repo_hook_url.rb
|
|
60
60
|
lib/janky/database/migrate/1317384619_add_build_room_id.rb
|
61
61
|
lib/janky/database/migrate/1317384629_drop_default_room_id.rb
|
62
62
|
lib/janky/database/migrate/1317384649_github_team_id.rb
|
63
|
+
lib/janky/database/migrate/1317384650_add_build_indexes.rb
|
64
|
+
lib/janky/database/migrate/1317384651_add_more_build_indexes.rb
|
65
|
+
lib/janky/database/migrate/1317384652_change_commit_message_to_text.rb
|
66
|
+
lib/janky/database/migrate/1317384653_add_build_pusher.rb
|
63
67
|
lib/janky/database/schema.rb
|
64
68
|
lib/janky/database/seed.dump.gz
|
65
69
|
lib/janky/exception.rb
|
data/lib/janky.rb
CHANGED
data/lib/janky/branch.rb
CHANGED
@@ -49,13 +49,14 @@ module Janky
|
|
49
49
|
# Create a build for the given commit.
|
50
50
|
#
|
51
51
|
# commit - the Janky::Commit instance to build.
|
52
|
+
# user - The login of the GitHub user who pushed.
|
52
53
|
# compare - optional String GitHub Compare View URL. Defaults to the
|
53
54
|
# commit last build, if any.
|
54
55
|
# room_id - optional Fixnum Campfire room ID. Defaults to the room set on
|
55
56
|
# the repository.
|
56
57
|
#
|
57
58
|
# Returns the newly created Janky::Build.
|
58
|
-
def build_for(commit, room_id = nil, compare = nil)
|
59
|
+
def build_for(commit, user, room_id = nil, compare = nil)
|
59
60
|
if compare.nil? && build = commit.last_build
|
60
61
|
compare = build.compare
|
61
62
|
end
|
@@ -64,13 +65,50 @@ module Janky
|
|
64
65
|
room_id = repository.room_id
|
65
66
|
end
|
66
67
|
|
67
|
-
builds.create(
|
68
|
+
builds.create!(
|
68
69
|
:compare => compare,
|
70
|
+
:user => user,
|
69
71
|
:commit => commit,
|
70
72
|
:room_id => room_id
|
71
73
|
)
|
72
74
|
end
|
73
75
|
|
76
|
+
# Fetch the HEAD commit of this branch using the GitHub API and create a
|
77
|
+
# build and commit record.
|
78
|
+
#
|
79
|
+
# room_id - See build_for documentation. This is passed as is to the
|
80
|
+
# build_for method.
|
81
|
+
# user - Ditto.
|
82
|
+
#
|
83
|
+
# Returns the newly created Janky::Build.
|
84
|
+
def head_build_for(room_id, user)
|
85
|
+
sha_to_build = GitHub.branch_head_sha(repository.nwo, name)
|
86
|
+
return if !sha_to_build
|
87
|
+
|
88
|
+
commit_data = GitHub.commit(repository.nwo, sha_to_build)
|
89
|
+
commit_message = commit_data["commit"]["message"]
|
90
|
+
commit_url = repository.github_url("commit/#{sha_to_build}")
|
91
|
+
author_data = commit_data["commit"]["author"]
|
92
|
+
commit_author =
|
93
|
+
if email = author_data["email"]
|
94
|
+
"#{author_data["name"]} <#{email}>"
|
95
|
+
else
|
96
|
+
author_data["name"]
|
97
|
+
end
|
98
|
+
|
99
|
+
commit = repository.commit_for({
|
100
|
+
:repository => repository,
|
101
|
+
:sha1 => sha_to_build,
|
102
|
+
:author => commit_author,
|
103
|
+
:message => commit_message,
|
104
|
+
:url => commit_url,
|
105
|
+
})
|
106
|
+
|
107
|
+
current_sha = current_build ? current_build.sha1 : "#{sha_to_build}^"
|
108
|
+
compare_url = repository.github_url("compare/#{current_sha}...#{commit.sha1}")
|
109
|
+
build_for(commit, user, room_id, compare_url)
|
110
|
+
end
|
111
|
+
|
74
112
|
# The current build, e.g. the most recent one.
|
75
113
|
#
|
76
114
|
# Returns a Build.
|
data/lib/janky/build.rb
CHANGED
@@ -43,7 +43,7 @@ module Janky
|
|
43
43
|
#
|
44
44
|
# Returns an Array of Builds.
|
45
45
|
def self.started
|
46
|
-
where("started_at IS NOT NULL").order("started_at DESC")
|
46
|
+
where("started_at IS NOT NULL").order("started_at DESC, id DESC")
|
47
47
|
end
|
48
48
|
|
49
49
|
# Find all completed builds, most recent first.
|
@@ -213,7 +213,11 @@ module Janky
|
|
213
213
|
end
|
214
214
|
|
215
215
|
def sha1
|
216
|
-
commit.
|
216
|
+
commit.sha1
|
217
|
+
end
|
218
|
+
|
219
|
+
def short_sha1
|
220
|
+
sha1[0,7]
|
217
221
|
end
|
218
222
|
|
219
223
|
def commit_url
|
data/lib/janky/build_request.rb
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
module Janky
|
2
2
|
class BuildRequest
|
3
|
-
def self.handle(repo_uri, branch_name, commit, compare, room_id)
|
3
|
+
def self.handle(repo_uri, branch_name, pusher, commit, compare, room_id)
|
4
4
|
repos = Repository.find_all_by_uri(repo_uri)
|
5
5
|
repos.each do |repo|
|
6
6
|
begin
|
7
|
-
new(repo, branch_name, commit, compare, room_id).handle
|
7
|
+
new(repo, branch_name, pusher, commit, compare, room_id).handle
|
8
8
|
rescue Janky::Error => boom
|
9
9
|
Exception.report(boom, :repo => repo.name)
|
10
10
|
end
|
@@ -13,9 +13,10 @@ module Janky
|
|
13
13
|
repos.size
|
14
14
|
end
|
15
15
|
|
16
|
-
def initialize(repo, branch_name, commit, compare, room_id)
|
16
|
+
def initialize(repo, branch_name, pusher, commit, compare, room_id)
|
17
17
|
@repo = repo
|
18
18
|
@branch_name = branch_name
|
19
|
+
@pusher = pusher
|
19
20
|
@commit = commit
|
20
21
|
@compare = compare
|
21
22
|
@room_id = room_id
|
@@ -23,7 +24,7 @@ module Janky
|
|
23
24
|
|
24
25
|
def handle
|
25
26
|
current_build = commit.last_build
|
26
|
-
build = branch.build_for(commit, @room_id, @compare)
|
27
|
+
build = branch.build_for(commit, @pusher, @room_id, @compare)
|
27
28
|
|
28
29
|
if !current_build || (current_build && current_build.red?)
|
29
30
|
if @repo.enabled?
|
@@ -1,14 +1,18 @@
|
|
1
1
|
module Janky
|
2
2
|
module Builder
|
3
3
|
class Payload
|
4
|
-
def self.parse(json)
|
4
|
+
def self.parse(json, base_url)
|
5
5
|
parsed = Yajl.load(json)
|
6
6
|
build = parsed["build"]
|
7
7
|
|
8
|
+
full_url = build["full_url"]
|
9
|
+
path = build["url"]
|
10
|
+
build_url = full_url || "#{base_url}#{path}"
|
11
|
+
|
8
12
|
new(
|
9
13
|
build["phase"],
|
10
14
|
build["parameters"]["JANKY_ID"],
|
11
|
-
|
15
|
+
build_url,
|
12
16
|
build["status"]
|
13
17
|
)
|
14
18
|
end
|
@@ -3,7 +3,8 @@ module Janky
|
|
3
3
|
class Receiver
|
4
4
|
def self.call(env)
|
5
5
|
request = Rack::Request.new(env)
|
6
|
-
|
6
|
+
default_base_url = Builder[:default].url
|
7
|
+
payload = Payload.parse(request.body, default_base_url)
|
7
8
|
|
8
9
|
if payload.started?
|
9
10
|
Build.start(payload.id, payload.url)
|
data/lib/janky/commit.rb
CHANGED
@@ -0,0 +1,13 @@
|
|
1
|
+
class AddMoreBuildIndexes < ActiveRecord::Migration
|
2
|
+
def self.up
|
3
|
+
add_index :builds, :started_at
|
4
|
+
add_index :builds, :completed_at
|
5
|
+
add_index :builds, :green
|
6
|
+
end
|
7
|
+
|
8
|
+
def self.down
|
9
|
+
remove_index :builds, :started_at
|
10
|
+
remove_index :builds, :completed_at
|
11
|
+
remove_index :builds, :green
|
12
|
+
end
|
13
|
+
end
|
data/lib/janky/github.rb
CHANGED
@@ -23,6 +23,14 @@ module Janky
|
|
23
23
|
attr_reader :secret, :git_host
|
24
24
|
end
|
25
25
|
|
26
|
+
# URL of the GitHub website.
|
27
|
+
#
|
28
|
+
# Retuns the URL as a String. Example: https://github.com
|
29
|
+
def self.github_url
|
30
|
+
api_uri = URI.parse(@api_url)
|
31
|
+
"#{api_uri.scheme}://#{@git_host}"
|
32
|
+
end
|
33
|
+
|
26
34
|
# Rack app that handles Post-Receive hook requests from GitHub.
|
27
35
|
#
|
28
36
|
# Returns a GitHub::Receiver.
|
@@ -52,6 +60,54 @@ module Janky
|
|
52
60
|
end
|
53
61
|
end
|
54
62
|
|
63
|
+
# Fetch the SHA1 of the given branch HEAD.
|
64
|
+
#
|
65
|
+
# nwo - qualified "owner/repo" name.
|
66
|
+
# branch - Name of the branch as a String.
|
67
|
+
#
|
68
|
+
# Returns the SHA1 as a String or nil when the branch doesn't exists.
|
69
|
+
def self.branch_head_sha(nwo, branch)
|
70
|
+
response = api.branches(nwo)
|
71
|
+
|
72
|
+
if response.code != "200"
|
73
|
+
Exception.push_http_response(response)
|
74
|
+
raise Error, "Failed to get branches"
|
75
|
+
end
|
76
|
+
|
77
|
+
branches = Yajl.load(response.body)
|
78
|
+
branch = branches.detect { |b| b["name"] == branch }
|
79
|
+
branch && branch["commit"]["sha"]
|
80
|
+
end
|
81
|
+
|
82
|
+
# Fetch commit details for the given SHA1.
|
83
|
+
#
|
84
|
+
# nwo - qualified "owner/repo" name.
|
85
|
+
# sha - SHA1 of the commit as a String.
|
86
|
+
#
|
87
|
+
# Example
|
88
|
+
#
|
89
|
+
# commit("github/janky", "35fff49dc18376845dd37e785c1ea88c6133f928")
|
90
|
+
# => { "commit" => {
|
91
|
+
# "author" => {
|
92
|
+
# "name" => "Simon Rozet",
|
93
|
+
# "email" => "sr@github.com",
|
94
|
+
# },
|
95
|
+
# "message" => "document and clean up Branch#build_for_head",
|
96
|
+
# }
|
97
|
+
# }
|
98
|
+
#
|
99
|
+
# Returns the commit Hash.
|
100
|
+
def self.commit(nwo, sha)
|
101
|
+
response = api.commit(nwo, sha)
|
102
|
+
|
103
|
+
if response.code != "200"
|
104
|
+
Exception.push_http_response(response)
|
105
|
+
raise Error, "Failed to get commit"
|
106
|
+
end
|
107
|
+
|
108
|
+
Yajl.load(response.body)
|
109
|
+
end
|
110
|
+
|
55
111
|
# Create a Post-Receive hook for the given repository.
|
56
112
|
# http://developer.github.com/v3/repos/hooks/#create-a-hook
|
57
113
|
#
|
@@ -122,5 +178,10 @@ module Janky
|
|
122
178
|
def self.repo_make_unauthorized(nwo)
|
123
179
|
api.make_unauthorized(nwo)
|
124
180
|
end
|
181
|
+
|
182
|
+
# Set the SHA of the named branch for the given repo. Mock only.
|
183
|
+
def self.set_branch_head(nwo, branch, sha)
|
184
|
+
api.set_branch_head(nwo, branch, sha)
|
185
|
+
end
|
125
186
|
end
|
126
187
|
end
|
data/lib/janky/github/api.rb
CHANGED
@@ -40,6 +40,22 @@ module Janky
|
|
40
40
|
http.request(request)
|
41
41
|
end
|
42
42
|
|
43
|
+
def branches(nwo)
|
44
|
+
path = build_path("repos/#{nwo}/branches")
|
45
|
+
request = Net::HTTP::Get.new(path)
|
46
|
+
request.basic_auth(@user, @password)
|
47
|
+
|
48
|
+
http.request(request)
|
49
|
+
end
|
50
|
+
|
51
|
+
def commit(nwo, sha)
|
52
|
+
path = build_path("repos/#{nwo}/commits/#{sha}")
|
53
|
+
request = Net::HTTP::Get.new(path)
|
54
|
+
request.basic_auth(@user, @password)
|
55
|
+
|
56
|
+
http.request(request)
|
57
|
+
end
|
58
|
+
|
43
59
|
def build_path(path)
|
44
60
|
if path[0] == ?/
|
45
61
|
URI.join(@url, path[1..-1]).path
|
data/lib/janky/github/mock.rb
CHANGED
@@ -5,6 +5,7 @@ module Janky
|
|
5
5
|
|
6
6
|
def initialize(user, password)
|
7
7
|
@repos = {}
|
8
|
+
@branch_shas = {}
|
8
9
|
end
|
9
10
|
|
10
11
|
def make_private(nwo)
|
@@ -19,6 +20,10 @@ module Janky
|
|
19
20
|
@repos[nwo] = :unauthorized
|
20
21
|
end
|
21
22
|
|
23
|
+
def set_branch_head(nwo, branch, sha)
|
24
|
+
@branch_shas[[nwo, branch]] = sha
|
25
|
+
end
|
26
|
+
|
22
27
|
def create(nwo, secret, url)
|
23
28
|
data = {"url" => "https://api.github.com/hooks/#{Time.now.to_f}"}
|
24
29
|
Response.new("201", Yajl.dump(data))
|
@@ -42,6 +47,37 @@ module Janky
|
|
42
47
|
Response.new("200", Yajl.dump(repo))
|
43
48
|
end
|
44
49
|
end
|
50
|
+
|
51
|
+
def branches(nwo)
|
52
|
+
data = []
|
53
|
+
|
54
|
+
@branch_shas.each do |(name_with_owner, branch), sha|
|
55
|
+
if nwo == name_with_owner
|
56
|
+
data << {
|
57
|
+
"name" => branch,
|
58
|
+
"commit" => {
|
59
|
+
"sha" => sha
|
60
|
+
}
|
61
|
+
}
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
Response.new("200", Yajl.dump(data))
|
66
|
+
end
|
67
|
+
|
68
|
+
def commit(nwo, sha)
|
69
|
+
data = {
|
70
|
+
"commit" => {
|
71
|
+
"author" => {
|
72
|
+
"name" => "Test Author",
|
73
|
+
"email" => "test@github.com"
|
74
|
+
},
|
75
|
+
"message" => "Test Message"
|
76
|
+
}
|
77
|
+
}
|
78
|
+
|
79
|
+
Response.new("200", Yajl.dump(data))
|
80
|
+
end
|
45
81
|
end
|
46
82
|
end
|
47
83
|
end
|
data/lib/janky/github/payload.rb
CHANGED
@@ -3,18 +3,21 @@ module Janky
|
|
3
3
|
class Payload
|
4
4
|
def self.parse(json)
|
5
5
|
parsed = PayloadParser.new(json)
|
6
|
-
new(parsed.uri, parsed.branch, parsed.head, parsed.
|
6
|
+
new(parsed.uri, parsed.branch, parsed.head, parsed.pusher,
|
7
|
+
parsed.commits,
|
8
|
+
parsed.compare)
|
7
9
|
end
|
8
10
|
|
9
|
-
def initialize(uri, branch, head, commits, compare)
|
11
|
+
def initialize(uri, branch, head, pusher, commits, compare)
|
10
12
|
@uri = uri
|
11
13
|
@branch = branch
|
12
14
|
@head = head
|
15
|
+
@pusher = pusher
|
13
16
|
@commits = commits
|
14
17
|
@compare = compare
|
15
18
|
end
|
16
19
|
|
17
|
-
attr_reader :uri, :branch, :head, :commits, :compare
|
20
|
+
attr_reader :uri, :branch, :head, :pusher, :commits, :compare
|
18
21
|
|
19
22
|
def head_commit
|
20
23
|
@commits.detect do |commit|
|
@@ -25,6 +28,7 @@ module Janky
|
|
25
28
|
def to_json
|
26
29
|
{ :after => @head,
|
27
30
|
:ref => "refs/heads/#{@branch}",
|
31
|
+
:pusher => {:name => @pusher},
|
28
32
|
:uri => @uri,
|
29
33
|
:commits => @commits,
|
30
34
|
:compare => @compare }.to_json
|
data/lib/janky/hubot.rb
CHANGED
@@ -34,13 +34,12 @@ module Janky
|
|
34
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
|
-
build = branch.current_build
|
38
|
-
|
39
37
|
room_id = (params["room_id"] && Integer(params["room_id"]) rescue nil)
|
38
|
+
user = params["user"]
|
39
|
+
build = branch.head_build_for(room_id, user)
|
40
40
|
|
41
41
|
if build
|
42
|
-
build.
|
43
|
-
|
42
|
+
build.run
|
44
43
|
[201, "Going ham on #{build.repo_name}/#{build.branch_name}"]
|
45
44
|
else
|
46
45
|
[404, "Unknown branch #{branch_name.inspect}. Push again"]
|
@@ -91,6 +90,7 @@ module Janky
|
|
91
90
|
{ :sha1 => build.sha1,
|
92
91
|
:repo => build.repo_name,
|
93
92
|
:branch => build.branch_name,
|
93
|
+
:user => build.user,
|
94
94
|
:green => build.green?,
|
95
95
|
:building => branch.building?,
|
96
96
|
:number => build.number,
|
data/lib/janky/repository.rb
CHANGED
@@ -96,6 +96,27 @@ module Janky
|
|
96
96
|
uri[/.*[\/:]([a-zA-Z0-9\-_]+)\/([a-zA-Z0-9\-_]+)/] && $2
|
97
97
|
end
|
98
98
|
|
99
|
+
# Fully qualified GitHub name for this repository.
|
100
|
+
#
|
101
|
+
# Returns the name as a String. Example: github/janky.
|
102
|
+
def nwo
|
103
|
+
"#{github_owner}/#{github_name}"
|
104
|
+
end
|
105
|
+
|
106
|
+
# Append the given path to the GitHub URL of this repository.
|
107
|
+
#
|
108
|
+
# path - String path. No slash necessary at the front.
|
109
|
+
#
|
110
|
+
# Examples
|
111
|
+
#
|
112
|
+
# github_url("issues")
|
113
|
+
# => "https://github.com/github/janky/issues"
|
114
|
+
#
|
115
|
+
# Returns the URL as a String.
|
116
|
+
def github_url(path)
|
117
|
+
"#{GitHub.github_url}/#{nwo}/#{path}"
|
118
|
+
end
|
119
|
+
|
99
120
|
# Name of the Campfire room receiving build notifications.
|
100
121
|
#
|
101
122
|
# Returns the name as a String.
|
data/lib/janky/version.rb
CHANGED
data/lib/janky/views/console.rb
CHANGED
data/lib/janky/views/index.rb
CHANGED
data/test/janky_test.rb
CHANGED
@@ -220,6 +220,28 @@ class JankyTest < Test::Unit::TestCase
|
|
220
220
|
assert hubot_status.ok?
|
221
221
|
end
|
222
222
|
|
223
|
+
test "build user" do
|
224
|
+
gh_post_receive("github", "master", "HEAD", "the dude")
|
225
|
+
Janky::Builder.start!
|
226
|
+
Janky::Builder.complete!
|
227
|
+
|
228
|
+
response = hubot_status("github", "master")
|
229
|
+
data = Yajl.load(response.body)
|
230
|
+
assert_equal 1, data.size
|
231
|
+
build = data[0]
|
232
|
+
assert_equal "the dude", build["user"]
|
233
|
+
|
234
|
+
hubot_build("github", "master", nil, "the boyscout")
|
235
|
+
Janky::Builder.start!
|
236
|
+
Janky::Builder.complete!
|
237
|
+
|
238
|
+
response = hubot_status("github", "master")
|
239
|
+
data = Yajl.load(response.body)
|
240
|
+
assert_equal 2, data.size
|
241
|
+
build = data[0]
|
242
|
+
assert_equal "the boyscout", build["user"]
|
243
|
+
end
|
244
|
+
|
223
245
|
test "hubot status repo" do
|
224
246
|
gh_post_receive("github")
|
225
247
|
Janky::Builder.start!
|
@@ -241,6 +263,25 @@ class JankyTest < Test::Unit::TestCase
|
|
241
263
|
assert hubot_build("github", "rails3").not_found?
|
242
264
|
end
|
243
265
|
|
266
|
+
test "getting latest commit" do
|
267
|
+
gh_post_receive("github", "master")
|
268
|
+
Janky::Builder.start!
|
269
|
+
Janky::Builder.complete!
|
270
|
+
|
271
|
+
assert_not_equal "deadbeef", hubot_latest_build_sha("github", "master")
|
272
|
+
|
273
|
+
Janky::GitHub.set_branch_head("github/github", "master", "deadbeef")
|
274
|
+
hubot_build("github", "master")
|
275
|
+
Janky::Builder.start!
|
276
|
+
Janky::Builder.complete!
|
277
|
+
|
278
|
+
assert_equal "deadbeef", hubot_latest_build_sha("github", "master")
|
279
|
+
assert_equal "deadbeef", Janky::Build.last.sha1
|
280
|
+
assert_equal "Test Author <test@github.com>", Janky::Build.last.commit_author
|
281
|
+
assert_equal "Test Message", Janky::Build.last.commit_message
|
282
|
+
assert_equal "https://github.com/github/github/commit/deadbeef", Janky::Build.last.commit_url
|
283
|
+
end
|
284
|
+
|
244
285
|
test "hubot rooms" do
|
245
286
|
response = hubot_request("GET", "/_hubot/rooms")
|
246
287
|
rooms = Yajl.load(response.body)
|
data/test/test_helper.rb
CHANGED
@@ -44,13 +44,14 @@ class Test::Unit::TestCase
|
|
44
44
|
)
|
45
45
|
end
|
46
46
|
|
47
|
-
def gh_payload(repo, branch, commits)
|
47
|
+
def gh_payload(repo, branch, pusher, commits)
|
48
48
|
head = commits.first
|
49
49
|
|
50
50
|
Janky::GitHub::Payload.new(
|
51
51
|
repo.uri,
|
52
52
|
branch,
|
53
53
|
head.sha1,
|
54
|
+
pusher,
|
54
55
|
commits,
|
55
56
|
"http://github/compare/#{branch}...master"
|
56
57
|
)
|
@@ -60,11 +61,16 @@ class Test::Unit::TestCase
|
|
60
61
|
Rack::MockRequest.new(Janky.app).get(path)
|
61
62
|
end
|
62
63
|
|
63
|
-
def gh_post_receive(repo_name, branch = "master", commit = "HEAD"
|
64
|
+
def gh_post_receive(repo_name, branch = "master", commit = "HEAD",
|
65
|
+
pusher = "user")
|
66
|
+
|
64
67
|
repo = Janky::Repository.find_by_name!(repo_name)
|
65
|
-
payload = gh_payload(repo, branch, [gh_commit(commit)])
|
68
|
+
payload = gh_payload(repo, branch, pusher, [gh_commit(commit)])
|
66
69
|
digest = OpenSSL::Digest::Digest.new("sha1")
|
67
|
-
sig = OpenSSL::HMAC.hexdigest(digest, Janky::GitHub.secret,
|
70
|
+
sig = OpenSSL::HMAC.hexdigest(digest, Janky::GitHub.secret,
|
71
|
+
payload.to_json)
|
72
|
+
|
73
|
+
Janky::GitHub.set_branch_head(repo.nwo, branch, commit)
|
68
74
|
|
69
75
|
Rack::MockRequest.new(Janky.app).post("/_github",
|
70
76
|
:input => payload.to_json,
|
@@ -80,7 +86,7 @@ class Test::Unit::TestCase
|
|
80
86
|
})
|
81
87
|
end
|
82
88
|
|
83
|
-
def hubot_build(repo, branch, room_name = nil)
|
89
|
+
def hubot_build(repo, branch, room_name = nil, user = nil)
|
84
90
|
params =
|
85
91
|
if room_id = Janky::ChatService.room_id(room_name)
|
86
92
|
{"room_id" => room_id.to_s}
|
@@ -88,6 +94,10 @@ class Test::Unit::TestCase
|
|
88
94
|
{}
|
89
95
|
end
|
90
96
|
|
97
|
+
if user
|
98
|
+
params["user"] = user
|
99
|
+
end
|
100
|
+
|
91
101
|
hubot_request("POST", "/_hubot/#{repo}/#{branch}", :params => params)
|
92
102
|
end
|
93
103
|
|
@@ -99,6 +109,11 @@ class Test::Unit::TestCase
|
|
99
109
|
end
|
100
110
|
end
|
101
111
|
|
112
|
+
def hubot_latest_build_sha(repo, branch)
|
113
|
+
response = hubot_status(repo, branch)
|
114
|
+
Yajl.load(response.body).first["sha1"]
|
115
|
+
end
|
116
|
+
|
102
117
|
def hubot_request(method, path, opts={})
|
103
118
|
auth = ["#{Janky::Hubot.username}:#{Janky::Hubot.password}"].pack("m*")
|
104
119
|
env = {"HTTP_AUTHORIZATION" => "Basic #{auth}"}
|
metadata
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: janky
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.
|
4
|
+
version: 0.9.13
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
|
-
-
|
8
|
+
- Simon Rozet
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-06-
|
12
|
+
date: 2012-06-24 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake
|
@@ -242,6 +242,10 @@ files:
|
|
242
242
|
- lib/janky/database/migrate/1317384619_add_build_room_id.rb
|
243
243
|
- lib/janky/database/migrate/1317384629_drop_default_room_id.rb
|
244
244
|
- lib/janky/database/migrate/1317384649_github_team_id.rb
|
245
|
+
- lib/janky/database/migrate/1317384650_add_build_indexes.rb
|
246
|
+
- lib/janky/database/migrate/1317384651_add_more_build_indexes.rb
|
247
|
+
- lib/janky/database/migrate/1317384652_change_commit_message_to_text.rb
|
248
|
+
- lib/janky/database/migrate/1317384653_add_build_pusher.rb
|
245
249
|
- lib/janky/database/schema.rb
|
246
250
|
- lib/janky/database/seed.dump.gz
|
247
251
|
- lib/janky/exception.rb
|