janky 0.9.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGES +3 -0
- data/COPYING +22 -0
- data/Gemfile +2 -0
- data/README.md +211 -0
- data/Rakefile +19 -0
- data/config.ru +3 -0
- data/janky.gemspec +102 -0
- data/lib/janky.rb +224 -0
- data/lib/janky/app.rb +81 -0
- data/lib/janky/branch.rb +112 -0
- data/lib/janky/build.rb +223 -0
- data/lib/janky/build_request.rb +49 -0
- data/lib/janky/builder.rb +108 -0
- data/lib/janky/builder/client.rb +82 -0
- data/lib/janky/builder/http.rb +43 -0
- data/lib/janky/builder/mock.rb +45 -0
- data/lib/janky/builder/payload.rb +63 -0
- data/lib/janky/builder/receiver.rb +20 -0
- data/lib/janky/builder/runner.rb +47 -0
- data/lib/janky/campfire.rb +127 -0
- data/lib/janky/campfire/mock.rb +0 -0
- data/lib/janky/commit.rb +14 -0
- data/lib/janky/database/migrate/1312115512_init.rb +48 -0
- data/lib/janky/database/migrate/1312117285_non_unique_repo_uri.rb +10 -0
- data/lib/janky/database/migrate/1312198807_repo_enabled.rb +11 -0
- data/lib/janky/database/migrate/1313867551_add_build_output_column.rb +9 -0
- data/lib/janky/database/migrate/1313871652_add_commit_url_column.rb +9 -0
- data/lib/janky/database/migrate/1317384618_add_repo_hook_url.rb +9 -0
- data/lib/janky/database/migrate/1317384619_add_build_room_id.rb +9 -0
- data/lib/janky/database/migrate/1317384629_drop_default_room_id.rb +9 -0
- data/lib/janky/database/migrate/1317384649_github_team_id.rb +9 -0
- data/lib/janky/database/schema.rb +68 -0
- data/lib/janky/database/seed.dump.gz +0 -0
- data/lib/janky/exception.rb +62 -0
- data/lib/janky/github.rb +67 -0
- data/lib/janky/github/api.rb +69 -0
- data/lib/janky/github/commit.rb +27 -0
- data/lib/janky/github/mock.rb +47 -0
- data/lib/janky/github/payload.rb +34 -0
- data/lib/janky/github/payload_parser.rb +57 -0
- data/lib/janky/github/receiver.rb +69 -0
- data/lib/janky/helpers.rb +17 -0
- data/lib/janky/hubot.rb +117 -0
- data/lib/janky/job_creator.rb +111 -0
- data/lib/janky/notifier.rb +84 -0
- data/lib/janky/notifier/campfire.rb +21 -0
- data/lib/janky/notifier/mock.rb +55 -0
- data/lib/janky/notifier/multi.rb +22 -0
- data/lib/janky/public/css/base.css +204 -0
- data/lib/janky/public/images/building-bot.gif +0 -0
- data/lib/janky/public/images/disclosure-arrow.png +0 -0
- data/lib/janky/public/images/logo.png +0 -0
- data/lib/janky/public/images/robawt-status.gif +0 -0
- data/lib/janky/public/javascripts/application.js +3 -0
- data/lib/janky/public/javascripts/jquery.js +16 -0
- data/lib/janky/public/javascripts/jquery.relatize.js +111 -0
- data/lib/janky/repository.rb +174 -0
- data/lib/janky/tasks.rb +36 -0
- data/lib/janky/templates/console.mustache +4 -0
- data/lib/janky/templates/index.mustache +11 -0
- data/lib/janky/templates/layout.mustache +22 -0
- data/lib/janky/version.rb +3 -0
- data/lib/janky/views/console.rb +33 -0
- data/lib/janky/views/index.rb +35 -0
- data/lib/janky/views/layout.rb +19 -0
- data/test/default.xml.erb +0 -0
- data/test/janky_test.rb +271 -0
- data/test/test_helper.rb +107 -0
- metadata +319 -0
@@ -0,0 +1,174 @@
|
|
1
|
+
module Janky
|
2
|
+
class Repository < ActiveRecord::Base
|
3
|
+
has_many :branches
|
4
|
+
has_many :commits
|
5
|
+
has_many :builds, :through => :branches
|
6
|
+
|
7
|
+
replicate_associations :builds, :commits, :branches
|
8
|
+
|
9
|
+
default_scope(order("name"))
|
10
|
+
|
11
|
+
def self.setup(nwo, name = nil)
|
12
|
+
if nwo.nil?
|
13
|
+
raise ArgumentError, "nwo can't be nil"
|
14
|
+
end
|
15
|
+
|
16
|
+
if repo = Repository.find_by_name(nwo)
|
17
|
+
repo.setup
|
18
|
+
return repo
|
19
|
+
end
|
20
|
+
|
21
|
+
repo = GitHub.repo_get(nwo)
|
22
|
+
return if !repo
|
23
|
+
|
24
|
+
uri = repo["private"] ? repo["ssh_url"] : repo["git_url"]
|
25
|
+
name ||= repo["name"]
|
26
|
+
uri.gsub!(/\.git$/, "")
|
27
|
+
|
28
|
+
repo =
|
29
|
+
if repo = Repository.find_by_name(name)
|
30
|
+
repo.update_attributes!(:uri => uri)
|
31
|
+
repo
|
32
|
+
else
|
33
|
+
Repository.create!(:name => name, :uri => uri)
|
34
|
+
end
|
35
|
+
|
36
|
+
repo.setup
|
37
|
+
repo
|
38
|
+
end
|
39
|
+
|
40
|
+
# Find a named repository.
|
41
|
+
#
|
42
|
+
# name - The String name of the repository.
|
43
|
+
#
|
44
|
+
# Returns a Repository or nil when it doesn't exists.
|
45
|
+
def self.by_name(name)
|
46
|
+
find_by_name(name)
|
47
|
+
end
|
48
|
+
|
49
|
+
# Toggle auto-build feature of this repo. When enabled (default),
|
50
|
+
# all branches are built automatically.
|
51
|
+
#
|
52
|
+
# Returns the new flag status as a Boolean.
|
53
|
+
def toggle_auto_build
|
54
|
+
toggle(:enabled)
|
55
|
+
save!
|
56
|
+
enabled
|
57
|
+
end
|
58
|
+
|
59
|
+
# Create or retrieve the named branch.
|
60
|
+
#
|
61
|
+
# name - The branch's name as a String.
|
62
|
+
#
|
63
|
+
# Returns a Branch record.
|
64
|
+
def branch_for(name)
|
65
|
+
branches.find_or_create_by_name(name)
|
66
|
+
end
|
67
|
+
|
68
|
+
# Create or retrieve the given commit.
|
69
|
+
#
|
70
|
+
# name - The Hash representation of the Commit.
|
71
|
+
#
|
72
|
+
# Returns a Commit record.
|
73
|
+
def commit_for(commit)
|
74
|
+
commits.find_by_sha1(commit[:sha1]) ||
|
75
|
+
commits.create(commit)
|
76
|
+
end
|
77
|
+
|
78
|
+
# Jenkins host executing this repo's builds.
|
79
|
+
#
|
80
|
+
# Returns a Builder::Client.
|
81
|
+
def builder
|
82
|
+
Builder.pick_for(self)
|
83
|
+
end
|
84
|
+
|
85
|
+
# GitHub user owning this repo.
|
86
|
+
#
|
87
|
+
# Returns the user name as a String.
|
88
|
+
def github_owner
|
89
|
+
uri[/github\.com[\/:](\w+)\//] && $1
|
90
|
+
end
|
91
|
+
|
92
|
+
# Name of this repository on GitHub.
|
93
|
+
#
|
94
|
+
# Returns the name as a String.
|
95
|
+
def github_name
|
96
|
+
uri[/github\.com[\/:](\w+)\/([a-zA-Z0-9\-_]+)/] && $2
|
97
|
+
end
|
98
|
+
|
99
|
+
# Name of the Campfire room receiving build notifications.
|
100
|
+
#
|
101
|
+
# Returns the name as a String.
|
102
|
+
def campfire_room
|
103
|
+
Campfire.room_name(room_id)
|
104
|
+
end
|
105
|
+
|
106
|
+
# Ditto but returns the Fixnum room id. Defaults to the one set
|
107
|
+
# in Campfire.setup.
|
108
|
+
def room_id
|
109
|
+
read_attribute(:room_id) || Campfire.default_room_id
|
110
|
+
end
|
111
|
+
|
112
|
+
# Setups GitHub and Jenkins for build this repository.
|
113
|
+
#
|
114
|
+
# Returns nothing.
|
115
|
+
def setup
|
116
|
+
setup_job
|
117
|
+
setup_hook
|
118
|
+
end
|
119
|
+
|
120
|
+
# Create a GitHub hook for this Repository and store its URL if needed.
|
121
|
+
#
|
122
|
+
# Returns nothing.
|
123
|
+
def setup_hook
|
124
|
+
if !hook_url || !GitHub.hook_exists?(hook_url)
|
125
|
+
url = GitHub.hook_create("#{github_owner}/#{github_name}")
|
126
|
+
update_attributes!(:hook_url => url)
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
130
|
+
# Creates a job on the Jenkins server for this repository configuration
|
131
|
+
# unless one already exists. Can safely be run multiple times.
|
132
|
+
#
|
133
|
+
# Returns nothing.
|
134
|
+
def setup_job
|
135
|
+
builder.setup(job_name, uri, job_config_path)
|
136
|
+
end
|
137
|
+
|
138
|
+
# The path of the Jenkins configuration template. Try "<repo-name>.xml.erb"
|
139
|
+
# first then fallback to "default.xml.erb" under the root config directory.
|
140
|
+
#
|
141
|
+
# Returns the template path as a Pathname.
|
142
|
+
def job_config_path
|
143
|
+
custom = Janky.jobs_config_dir.join("#{name.downcase}.xml.erb")
|
144
|
+
default = Janky.jobs_config_dir.join("default.xml.erb")
|
145
|
+
|
146
|
+
if custom.readable?
|
147
|
+
custom
|
148
|
+
elsif default.readable?
|
149
|
+
default
|
150
|
+
else
|
151
|
+
raise Error, "no config.xml template for repo #{id.inspect}"
|
152
|
+
end
|
153
|
+
end
|
154
|
+
|
155
|
+
# Construct the URL pointing to this Repository's Jenkins job.
|
156
|
+
#
|
157
|
+
# Returns the String URL.
|
158
|
+
def job_url
|
159
|
+
builder.url + "job/#{job_name}"
|
160
|
+
end
|
161
|
+
|
162
|
+
# Calculate the name of the Jenkins job.
|
163
|
+
#
|
164
|
+
# Returns a String hash of this Repository name and uri.
|
165
|
+
def job_name
|
166
|
+
md5 = Digest::MD5.new
|
167
|
+
md5 << name
|
168
|
+
md5 << uri
|
169
|
+
md5 << job_config_path.read
|
170
|
+
md5 << builder.callback_url.to_s
|
171
|
+
md5.hexdigest
|
172
|
+
end
|
173
|
+
end
|
174
|
+
end
|
data/lib/janky/tasks.rb
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
require "rake"
|
2
|
+
require "rake/tasklib"
|
3
|
+
|
4
|
+
module Janky
|
5
|
+
module Tasks
|
6
|
+
extend Rake::DSL
|
7
|
+
|
8
|
+
namespace :db do
|
9
|
+
desc "Run the migration(s)"
|
10
|
+
task :migrate do
|
11
|
+
path = db_dir.join("migrate").to_s
|
12
|
+
ActiveRecord::Migration.verbose = true
|
13
|
+
ActiveRecord::Migrator.migrate(path)
|
14
|
+
|
15
|
+
Rake::Task["db:schema:dump"].invoke
|
16
|
+
end
|
17
|
+
|
18
|
+
namespace :schema do
|
19
|
+
desc "Dump the database schema into a standard Rails schema.rb file"
|
20
|
+
task :dump do
|
21
|
+
require "active_record/schema_dumper"
|
22
|
+
|
23
|
+
path = db_dir.join("schema.rb").to_s
|
24
|
+
|
25
|
+
File.open(path, "w:utf-8") do |fd|
|
26
|
+
ActiveRecord::SchemaDumper.dump(ActiveRecord::Base.connection, fd)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def self.db_dir
|
33
|
+
@db_dir ||= Pathname(__FILE__).expand_path.join("../database")
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<meta charset="utf-8" />
|
5
|
+
<title>{{title}}</title>
|
6
|
+
<link rel="stylesheet" href="/css/base.css" type="text/css" />
|
7
|
+
<script src="/javascripts/jquery.js" type="text/javascript" charset="utf-8"></script>
|
8
|
+
<script src="/javascripts/jquery.relatize.js" type="text/javascript" charset="utf-8"></script>
|
9
|
+
<script src="/javascripts/application.js" type="text/javascript" charset="utf-8"></script>
|
10
|
+
</head>
|
11
|
+
<body class="{{page_class}}">
|
12
|
+
<div id="wrapper">
|
13
|
+
<h2 id="logo"><a href="{{root}}/">Janky Hubot</a></h2>
|
14
|
+
|
15
|
+
<div class="content">
|
16
|
+
<div class="inside">
|
17
|
+
{{{yield}}}
|
18
|
+
</div>
|
19
|
+
</div>
|
20
|
+
</div>
|
21
|
+
</body>
|
22
|
+
</html>
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module Janky
|
2
|
+
module Views
|
3
|
+
class Console < Layout
|
4
|
+
def repo_name
|
5
|
+
@build.repo_name
|
6
|
+
end
|
7
|
+
|
8
|
+
def repo_path
|
9
|
+
"#{root}/#{repo_name}"
|
10
|
+
end
|
11
|
+
|
12
|
+
def branch_name
|
13
|
+
@build.branch_name
|
14
|
+
end
|
15
|
+
|
16
|
+
def branch_path
|
17
|
+
"#{repo_path}/#{branch_name}"
|
18
|
+
end
|
19
|
+
|
20
|
+
def commit_url
|
21
|
+
@build.commit_url
|
22
|
+
end
|
23
|
+
|
24
|
+
def commit_short_sha
|
25
|
+
@build.sha1
|
26
|
+
end
|
27
|
+
|
28
|
+
def output
|
29
|
+
@build.output
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
module Janky
|
3
|
+
module Views
|
4
|
+
class Index < Layout
|
5
|
+
def jobs
|
6
|
+
@builds.collect do |build|
|
7
|
+
{
|
8
|
+
:console_path => "/#{build.number}/output",
|
9
|
+
:name => "#{build.repo_name}/#{build.branch_name}",
|
10
|
+
:status => css_status_for(build),
|
11
|
+
:last_built_text => last_built_text_for(build)
|
12
|
+
}
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def css_status_for(build)
|
17
|
+
if build.green?
|
18
|
+
"good"
|
19
|
+
elsif build.building?
|
20
|
+
"building"
|
21
|
+
else
|
22
|
+
"janky"
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def last_built_text_for(build)
|
27
|
+
if build.building?
|
28
|
+
"Building since <span class='relatize'>#{build.started_at}</span>…"
|
29
|
+
elsif build.completed?
|
30
|
+
"Built in <span>#{build.duration}</span> seconds"
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
File without changes
|
data/test/janky_test.rb
ADDED
@@ -0,0 +1,271 @@
|
|
1
|
+
require File.expand_path("../test_helper", __FILE__)
|
2
|
+
|
3
|
+
class JankyTest < Test::Unit::TestCase
|
4
|
+
def setup
|
5
|
+
Janky.setup(environment)
|
6
|
+
Janky.enable_mock!
|
7
|
+
Janky.reset!
|
8
|
+
|
9
|
+
DatabaseCleaner.clean_with(:truncation)
|
10
|
+
|
11
|
+
Janky::Campfire.rooms = {1 => "enterprise", 2 => "builds"}
|
12
|
+
Janky::Campfire.default_room_name = "builds"
|
13
|
+
|
14
|
+
hubot_setup("github/github")
|
15
|
+
end
|
16
|
+
|
17
|
+
test "green build" do
|
18
|
+
Janky::Builder.green!
|
19
|
+
gh_post_receive("github")
|
20
|
+
Janky::Builder.start!
|
21
|
+
Janky::Builder.complete!
|
22
|
+
|
23
|
+
assert Janky::Notifier.success?("github", "master")
|
24
|
+
end
|
25
|
+
|
26
|
+
test "fail build" do
|
27
|
+
Janky::Builder.red!
|
28
|
+
gh_post_receive("github")
|
29
|
+
Janky::Builder.start!
|
30
|
+
Janky::Builder.complete!
|
31
|
+
|
32
|
+
assert Janky::Notifier.failure?("github", "master")
|
33
|
+
end
|
34
|
+
|
35
|
+
test "pending build" do
|
36
|
+
Janky::Builder.green!
|
37
|
+
gh_post_receive("github")
|
38
|
+
|
39
|
+
assert Janky::Notifier.empty?
|
40
|
+
Janky::Builder.start!
|
41
|
+
Janky::Builder.complete!
|
42
|
+
assert Janky::Notifier.success?("github", "master")
|
43
|
+
end
|
44
|
+
|
45
|
+
test "builds multiple repo with the same uri" do
|
46
|
+
Janky::Builder.green!
|
47
|
+
hubot_setup("github/github", "fi")
|
48
|
+
gh_post_receive("github")
|
49
|
+
Janky::Builder.start!
|
50
|
+
Janky::Builder.complete!
|
51
|
+
|
52
|
+
assert Janky::Notifier.success?("github", "master")
|
53
|
+
assert Janky::Notifier.success?("fi", "master")
|
54
|
+
end
|
55
|
+
|
56
|
+
test "notifies room that triggered the build" do
|
57
|
+
Janky::Builder.green!
|
58
|
+
gh_post_receive("github")
|
59
|
+
Janky::Builder.start!
|
60
|
+
Janky::Builder.complete!
|
61
|
+
|
62
|
+
assert Janky::Notifier.success?("github", "master", "builds")
|
63
|
+
|
64
|
+
hubot_build("github", "master", "enterprise")
|
65
|
+
Janky::Builder.start!
|
66
|
+
Janky::Builder.complete!
|
67
|
+
|
68
|
+
assert Janky::Notifier.success?("github", "master", "enterprise")
|
69
|
+
end
|
70
|
+
|
71
|
+
test "dup commit same branch" do
|
72
|
+
Janky::Builder.green!
|
73
|
+
gh_post_receive("github", "master", "sha1")
|
74
|
+
Janky::Builder.start!
|
75
|
+
Janky::Builder.complete!
|
76
|
+
|
77
|
+
assert Janky::Notifier.notifications.shift
|
78
|
+
|
79
|
+
gh_post_receive("github", "master", "sha1")
|
80
|
+
Janky::Builder.start!
|
81
|
+
Janky::Builder.complete!
|
82
|
+
|
83
|
+
assert Janky::Notifier.notifications.empty?
|
84
|
+
end
|
85
|
+
|
86
|
+
test "dup commit different branch" do
|
87
|
+
Janky::Builder.green!
|
88
|
+
gh_post_receive("github", "master", "sha1")
|
89
|
+
Janky::Builder.start!
|
90
|
+
Janky::Builder.complete!
|
91
|
+
|
92
|
+
assert Janky::Notifier.notifications.shift
|
93
|
+
|
94
|
+
gh_post_receive("github", "issues-dashboard", "sha1")
|
95
|
+
Janky::Builder.start!
|
96
|
+
Janky::Builder.complete!
|
97
|
+
|
98
|
+
assert Janky::Notifier.notifications.empty?
|
99
|
+
end
|
100
|
+
|
101
|
+
test "dup commit currently building" do
|
102
|
+
Janky::Builder.green!
|
103
|
+
gh_post_receive("github", "master", "sha1")
|
104
|
+
Janky::Builder.start!
|
105
|
+
|
106
|
+
gh_post_receive("github", "issues-dashboard", "sha1")
|
107
|
+
|
108
|
+
Janky::Builder.complete!
|
109
|
+
|
110
|
+
assert_equal 1, Janky::Notifier.notifications.size
|
111
|
+
assert Janky::Notifier.success?("github", "master")
|
112
|
+
end
|
113
|
+
|
114
|
+
test "dup commit currently red" do
|
115
|
+
Janky::Builder.red!
|
116
|
+
gh_post_receive("github", "master", "sha1")
|
117
|
+
Janky::Builder.start!
|
118
|
+
Janky::Builder.complete!
|
119
|
+
|
120
|
+
assert Janky::Notifier.notifications.shift
|
121
|
+
|
122
|
+
gh_post_receive("github", "master", "sha1")
|
123
|
+
|
124
|
+
assert Janky::Notifier.notifications.empty?
|
125
|
+
end
|
126
|
+
|
127
|
+
test "dup commit disabled repo" do
|
128
|
+
hubot_setup("github/github", "fi")
|
129
|
+
hubot_toggle("fi")
|
130
|
+
gh_post_receive("github", "master")
|
131
|
+
Janky::Builder.start!
|
132
|
+
Janky::Builder.complete!
|
133
|
+
Janky::Notifier.reset!
|
134
|
+
|
135
|
+
hubot_build("fi", "master")
|
136
|
+
Janky::Builder.start!
|
137
|
+
Janky::Builder.complete!
|
138
|
+
assert Janky::Notifier.success?("fi", "master")
|
139
|
+
end
|
140
|
+
|
141
|
+
test "web dashboard" do
|
142
|
+
assert get("/").ok?
|
143
|
+
assert get("/janky").not_found?
|
144
|
+
|
145
|
+
gh_post_receive("github")
|
146
|
+
assert get("/").ok?
|
147
|
+
assert get("/github").ok?
|
148
|
+
|
149
|
+
Janky::Builder.start!
|
150
|
+
assert get("/").ok?
|
151
|
+
|
152
|
+
Janky::Builder.complete!
|
153
|
+
assert get("/").ok?
|
154
|
+
assert get("/github").ok?
|
155
|
+
|
156
|
+
assert get("/github/master").ok?
|
157
|
+
assert get("/github/strato").ok?
|
158
|
+
|
159
|
+
assert get("#{Janky::Build.last.id}/output").ok?
|
160
|
+
end
|
161
|
+
|
162
|
+
test "hubot setup" do
|
163
|
+
Janky::GitHub.repo_make_private("github/github")
|
164
|
+
assert hubot_setup("github/github").body.
|
165
|
+
include?("git@github.com:github/github")
|
166
|
+
|
167
|
+
Janky::GitHub.repo_make_public("github/github")
|
168
|
+
assert hubot_setup("github/github").body.
|
169
|
+
include?("git://github.com/github/github")
|
170
|
+
|
171
|
+
assert_equal 1, hubot_status.body.split("\n").size
|
172
|
+
|
173
|
+
hubot_setup("github/janky")
|
174
|
+
assert_equal 2, hubot_status.body.split("\n").size
|
175
|
+
|
176
|
+
Janky::GitHub.repo_make_unauthorized("github/enterprise")
|
177
|
+
assert hubot_setup("github/enterprise").body.
|
178
|
+
include?("Couldn't access github/enterprise")
|
179
|
+
|
180
|
+
assert_equal 201, hubot_setup("janky").status
|
181
|
+
end
|
182
|
+
|
183
|
+
test "hubot toggle" do
|
184
|
+
hubot_toggle("github")
|
185
|
+
gh_post_receive("github", "master", "deadbeef")
|
186
|
+
Janky::Builder.start!
|
187
|
+
Janky::Builder.complete!
|
188
|
+
|
189
|
+
assert Janky::Notifier.empty?
|
190
|
+
|
191
|
+
hubot_toggle("github")
|
192
|
+
gh_post_receive("github", "master", "cream")
|
193
|
+
Janky::Builder.start!
|
194
|
+
Janky::Builder.complete!
|
195
|
+
|
196
|
+
assert Janky::Notifier.success?("github", "master")
|
197
|
+
end
|
198
|
+
|
199
|
+
test "hubot status" do
|
200
|
+
gh_post_receive("github")
|
201
|
+
Janky::Builder.start!
|
202
|
+
Janky::Builder.complete!
|
203
|
+
|
204
|
+
status = hubot_status.body
|
205
|
+
assert status.include?("github")
|
206
|
+
assert status.include?("green")
|
207
|
+
assert status.include?("builds")
|
208
|
+
|
209
|
+
hubot_build("github", "master")
|
210
|
+
assert hubot_status.body.include?("green")
|
211
|
+
|
212
|
+
Janky::Builder.start!
|
213
|
+
assert hubot_status.body.include?("building")
|
214
|
+
|
215
|
+
hubot_setup("github/janky")
|
216
|
+
assert hubot_status.body.include?("no build")
|
217
|
+
|
218
|
+
hubot_setup("github/team")
|
219
|
+
gh_post_receive("team")
|
220
|
+
assert hubot_status.ok?
|
221
|
+
end
|
222
|
+
|
223
|
+
test "hubot status repo" do
|
224
|
+
gh_post_receive("github")
|
225
|
+
Janky::Builder.start!
|
226
|
+
Janky::Builder.complete!
|
227
|
+
hubot_build("github", "master")
|
228
|
+
Janky::Builder.start!
|
229
|
+
Janky::Builder.complete!
|
230
|
+
|
231
|
+
payload = Yajl.load(hubot_status("github", "master").body)
|
232
|
+
|
233
|
+
assert_equal 2, payload.size
|
234
|
+
end
|
235
|
+
|
236
|
+
test "hubot build" do
|
237
|
+
gh_post_receive("github", "master")
|
238
|
+
Janky::Builder.start!
|
239
|
+
Janky::Builder.complete!
|
240
|
+
|
241
|
+
assert hubot_build("github", "rails3").not_found?
|
242
|
+
end
|
243
|
+
|
244
|
+
test "hubot rooms" do
|
245
|
+
response = hubot_request("GET", "/_hubot/rooms")
|
246
|
+
rooms = Yajl.load(response.body)
|
247
|
+
assert_equal ["builds", "enterprise"], rooms
|
248
|
+
end
|
249
|
+
|
250
|
+
test "hubot set room" do
|
251
|
+
gh_post_receive("github", "master")
|
252
|
+
Janky::Builder.start!
|
253
|
+
Janky::Builder.complete!
|
254
|
+
assert Janky::Notifier.success?("github", "master", "builds")
|
255
|
+
|
256
|
+
Janky::Notifier.reset!
|
257
|
+
|
258
|
+
hubot_update_room("github", "enterprise").ok?
|
259
|
+
hubot_build("github", "master")
|
260
|
+
Janky::Builder.start!
|
261
|
+
Janky::Builder.complete!
|
262
|
+
|
263
|
+
assert Janky::Notifier.success?("github", "master", "enterprise")
|
264
|
+
end
|
265
|
+
|
266
|
+
test "hubot 404s" do
|
267
|
+
assert hubot_status("janky", "master").not_found?
|
268
|
+
assert hubot_build("janky", "master").not_found?
|
269
|
+
assert hubot_build("github", "master").not_found?
|
270
|
+
end
|
271
|
+
end
|