octopusci 0.0.1

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.
@@ -0,0 +1,18 @@
1
+ require 'resque'
2
+ require 'octopusci/config'
3
+
4
+ module Octopusci
5
+ module WorkerLauncher
6
+ def self.launch
7
+ Octopusci::CONFIG['stages'].size.times do
8
+ cur_pid = Process.fork do
9
+ queues = ['commit']
10
+ worker = Resque::Worker.new(*queues)
11
+ worker.log "Starting worker #{worker}"
12
+ worker.work(5)
13
+ end
14
+ Process.waitall
15
+ end
16
+ end
17
+ end
18
+ end
data/lib/octopusci.rb ADDED
@@ -0,0 +1,17 @@
1
+ require 'time-ago-in-words'
2
+
3
+ require 'octopusci/version'
4
+ require 'octopusci/helpers'
5
+ require 'octopusci/schema'
6
+ require 'octopusci/notifier'
7
+ require 'octopusci/queue'
8
+ require 'octopusci/stage_locker'
9
+ require 'octopusci/job'
10
+ require 'octopusci/config'
11
+ require 'octopusci/worker_launcher'
12
+
13
+ module Octopusci
14
+ def self.greet
15
+ return "Hello RSpec!"
16
+ end
17
+ end
@@ -0,0 +1,27 @@
1
+ require 'spec_helper'
2
+
3
+ describe Octopusci::Notifier do
4
+ before(:each) do
5
+ Octopusci::Notifier.delivery_method = :test
6
+ Octopusci::Notifier.perform_deliveries = true
7
+ Octopusci::Notifier.deliveries = []
8
+ end
9
+
10
+ describe "#job_complete" do
11
+ it "should send a multi-part email with the text version containing job status" do
12
+ pending
13
+ mail = Octopusci::Notifier.job_complete('joe@example.com', 'my output', 'my status').deliver()
14
+
15
+ Octopusci::Notifier.deliveries.size.should == 1
16
+ mail.parts[0].body.should =~ /my output/
17
+ end
18
+
19
+ it "should send a multi-part email with the html version containing job status" do
20
+ pending
21
+ mail = Octopusci::Notifier.job_complete('joe@example.com', 'my output', 'my status').deliver()
22
+
23
+ Octopusci::Notifier.deliveries.size.should == 1
24
+ mail.parts[1].body.should =~ /my output/
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,30 @@
1
+ require 'spec_helper'
2
+
3
+ describe "Octopusci::Server" do
4
+ before(:all) do
5
+ @github_test_payload = '{"base_ref":null,"ref":"refs/heads/master","commits":[{"message":"shit son","removed":[],"modified":["test.txt"],"added":[],"author":{"username":"cyphactor","email":"cyphactor@gmail.com","name":"Andrew De Ponte"},"distinct":true,"timestamp":"2011-09-06T22:01:12-07:00","id":"d7f49d93ee8fbce466c23c4e8a6bcbe8cab88a57","url":"https://github.com/cyphactor/temp_pusci_test/commit/d7f49d93ee8fbce466c23c4e8a6bcbe8cab88a57"},{"message":"again broham","removed":[],"modified":["test.txt"],"added":[],"author":{"username":"cyphactor","email":"cyphactor@gmail.com","name":"Andrew De Ponte"},"distinct":true,"timestamp":"2011-09-06T23:01:07-07:00","id":"60ae8e76469931b3e879d594099b0f4ac6f5cb99","url":"https://github.com/cyphactor/temp_pusci_test/commit/60ae8e76469931b3e879d594099b0f4ac6f5cb99"},{"message":"again broham","removed":[],"modified":["test.txt"],"added":[],"author":{"username":"cyphactor","email":"cyphactor@gmail.com","name":"Andrew De Ponte"},"distinct":true,"timestamp":"2011-09-06T23:03:16-07:00","id":"dd6e7913cc12937db88e469684e8698f8eee8c14","url":"https://github.com/cyphactor/temp_pusci_test/commit/dd6e7913cc12937db88e469684e8698f8eee8c14"}],"created":false,"before":"e5a1385fd8654c46d2b52d90c1ba31c865493602","repository":{"created_at":"2011/09/02 12:40:14 -0700","open_issues":0,"forks":1,"description":"Temp repo for testing pusci as I dev it","has_wiki":true,"fork":false,"watchers":1,"has_downloads":true,"homepage":"","has_issues":true,"private":false,"size":116,"owner":{"email":"cyphactor@gmail.com","name":"cyphactor"},"name":"temp_pusci_test","pushed_at":"2011/09/06 23:03:21 -0700","url":"https://github.com/cyphactor/temp_pusci_test"},"pusher":{"name":"none"},"forced":false,"after":"dd6e7913cc12937db88e469684e8698f8eee8c14","deleted":false,"compare":"https://github.com/cyphactor/temp_pusci_test/compare/e5a1385...dd6e791"}'
6
+ @github_real_payload = '{"created":false,"ref":"refs/heads/master","compare":"https://github.com/cyphactor/temp_pusci_test/compare/dd6e791...23485e0","repository":{"owner":{"email":"cyphactor@gmail.com","name":"cyphactor"},"has_downloads":true,"pushed_at":"2011/09/09 08:27:00 -0700","has_wiki":true,"url":"https://github.com/cyphactor/temp_pusci_test","size":116,"fork":false,"watchers":1,"has_issues":true,"name":"temp_pusci_test","created_at":"2011/09/02 12:40:14 -0700","open_issues":0,"private":false,"homepage":"","description":"Temp repo for testing pusci as I dev it","forks":1},"before":"dd6e7913cc12937db88e469684e8698f8eee8c14","forced":false,"after":"23485e00f329d7db02bc7b8c51ef11025046bd95","commits":[{"added":[],"removed":[],"timestamp":"2011-09-09T08:26:49-07:00","message":"Woot woot a nother push","modified":["test.txt"],"url":"https://github.com/cyphactor/temp_pusci_test/commit/23485e00f329d7db02bc7b8c51ef11025046bd95","distinct":true,"id":"23485e00f329d7db02bc7b8c51ef11025046bd95","author":{"username":"cyphactor","email":"cyphactor@gmail.com","name":"Andrew De Ponte"}}],"pusher":{"email":"cyphactor@gmail.com","name":"cyphactor"},"deleted":false,"base_ref":null}'
7
+ end
8
+
9
+ describe "POST /github-build" do
10
+ it "should parse the github payload using JSON" do
11
+ parsed_github_payload = Octopusci::Helpers.decode(@github_test_payload)
12
+ Octopusci::Helpers.should_receive(:decode).with(@github_test_payload).and_return(parsed_github_payload)
13
+ post '/github-build', :payload => @github_test_payload
14
+ end
15
+
16
+ it "should return 404 if the request is for a non-managed project" do
17
+ Octopusci::Helpers.should_receive(:get_project_info).with("temp_pusci_test", "cyphactor").and_return(nil)
18
+ post '/github-build', :payload => @github_test_payload
19
+ last_response.status.should == 404
20
+ end
21
+
22
+ it "should enqueue a job if the request is for a managed project" do
23
+ test_proj_info = { 'name' => 'temp_pusc_test', 'owner' => 'cyphactor', 'job_klass' => 'MyTestJob' }
24
+ Octopusci::Helpers.stub(:get_project_info).and_return(test_proj_info)
25
+ Octopusci::Queue.should_receive(:enqueue).with(test_proj_info['job_klass'], "temp_pusci_test", "master", Octopusci::Helpers.decode(@github_test_payload))
26
+ post '/github-build', :payload => @github_test_payload
27
+ last_response.status.should == 200
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,4 @@
1
+ require 'spec_helper'
2
+
3
+ describe "Octopusci" do
4
+ end
@@ -0,0 +1,11 @@
1
+ $LOAD_PATH.unshift File.expand_path(File.dirname(__FILE__) + '/../lib')
2
+ require 'octopusci/server'
3
+ require 'rack/test'
4
+
5
+ Octopusci::Server.set :environment, :test
6
+
7
+ def app
8
+ Octopusci::Server
9
+ end
10
+
11
+ include Rack::Test::Methods
metadata ADDED
@@ -0,0 +1,247 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: octopusci
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Andrew De Ponte
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2011-09-21 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: sinatra
16
+ requirement: &70093880092720 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: *70093880092720
25
+ - !ruby/object:Gem::Dependency
26
+ name: json
27
+ requirement: &70093880078580 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: *70093880078580
36
+ - !ruby/object:Gem::Dependency
37
+ name: resque
38
+ requirement: &70093880075780 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
44
+ type: :runtime
45
+ prerelease: false
46
+ version_requirements: *70093880075780
47
+ - !ruby/object:Gem::Dependency
48
+ name: actionmailer
49
+ requirement: &70093880075000 !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ type: :runtime
56
+ prerelease: false
57
+ version_requirements: *70093880075000
58
+ - !ruby/object:Gem::Dependency
59
+ name: activerecord
60
+ requirement: &70093880073080 !ruby/object:Gem::Requirement
61
+ none: false
62
+ requirements:
63
+ - - ! '>='
64
+ - !ruby/object:Gem::Version
65
+ version: '0'
66
+ type: :runtime
67
+ prerelease: false
68
+ version_requirements: *70093880073080
69
+ - !ruby/object:Gem::Dependency
70
+ name: mysql
71
+ requirement: &70093880070800 !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - ! '>='
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ type: :runtime
78
+ prerelease: false
79
+ version_requirements: *70093880070800
80
+ - !ruby/object:Gem::Dependency
81
+ name: multi_json
82
+ requirement: &70093880068020 !ruby/object:Gem::Requirement
83
+ none: false
84
+ requirements:
85
+ - - ! '>='
86
+ - !ruby/object:Gem::Version
87
+ version: '0'
88
+ type: :runtime
89
+ prerelease: false
90
+ version_requirements: *70093880068020
91
+ - !ruby/object:Gem::Dependency
92
+ name: time-ago-in-words
93
+ requirement: &70093880067280 !ruby/object:Gem::Requirement
94
+ none: false
95
+ requirements:
96
+ - - ! '>='
97
+ - !ruby/object:Gem::Version
98
+ version: '0'
99
+ type: :runtime
100
+ prerelease: false
101
+ version_requirements: *70093880067280
102
+ - !ruby/object:Gem::Dependency
103
+ name: rake
104
+ requirement: &70093880065500 !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ type: :development
111
+ prerelease: false
112
+ version_requirements: *70093880065500
113
+ - !ruby/object:Gem::Dependency
114
+ name: rspec
115
+ requirement: &70093880062860 !ruby/object:Gem::Requirement
116
+ none: false
117
+ requirements:
118
+ - - ! '>='
119
+ - !ruby/object:Gem::Version
120
+ version: '0'
121
+ type: :development
122
+ prerelease: false
123
+ version_requirements: *70093880062860
124
+ - !ruby/object:Gem::Dependency
125
+ name: rack-test
126
+ requirement: &70093880061660 !ruby/object:Gem::Requirement
127
+ none: false
128
+ requirements:
129
+ - - ! '>='
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: *70093880061660
135
+ - !ruby/object:Gem::Dependency
136
+ name: guard
137
+ requirement: &70093880060360 !ruby/object:Gem::Requirement
138
+ none: false
139
+ requirements:
140
+ - - ! '>='
141
+ - !ruby/object:Gem::Version
142
+ version: '0'
143
+ type: :development
144
+ prerelease: false
145
+ version_requirements: *70093880060360
146
+ - !ruby/object:Gem::Dependency
147
+ name: rb-fsevent
148
+ requirement: &70093880059500 !ruby/object:Gem::Requirement
149
+ none: false
150
+ requirements:
151
+ - - ! '>='
152
+ - !ruby/object:Gem::Version
153
+ version: '0'
154
+ type: :development
155
+ prerelease: false
156
+ version_requirements: *70093880059500
157
+ - !ruby/object:Gem::Dependency
158
+ name: growl
159
+ requirement: &70093880058780 !ruby/object:Gem::Requirement
160
+ none: false
161
+ requirements:
162
+ - - ! '>='
163
+ - !ruby/object:Gem::Version
164
+ version: '0'
165
+ type: :development
166
+ prerelease: false
167
+ version_requirements: *70093880058780
168
+ - !ruby/object:Gem::Dependency
169
+ name: guard-rspec
170
+ requirement: &70093880057920 !ruby/object:Gem::Requirement
171
+ none: false
172
+ requirements:
173
+ - - ! '>='
174
+ - !ruby/object:Gem::Version
175
+ version: '0'
176
+ type: :development
177
+ prerelease: false
178
+ version_requirements: *70093880057920
179
+ description: A multi-branch Continous Integration server that integrates with GitHub
180
+ email:
181
+ - cyphactor@gmail.com
182
+ executables:
183
+ - octopusci-tentacles
184
+ - octopusci-skel
185
+ - octopusci-db-migrate
186
+ extensions: []
187
+ extra_rdoc_files: []
188
+ files:
189
+ - README
190
+ - LICENSE
191
+ - config.ru
192
+ - lib/octopusci/config.rb
193
+ - lib/octopusci/errors.rb
194
+ - lib/octopusci/helpers.rb
195
+ - lib/octopusci/job.rb
196
+ - lib/octopusci/notifier/job_complete.html.erb
197
+ - lib/octopusci/notifier/job_complete.text.erb
198
+ - lib/octopusci/notifier.rb
199
+ - lib/octopusci/queue.rb
200
+ - lib/octopusci/schema.rb
201
+ - lib/octopusci/server/public/images/noise.gif
202
+ - lib/octopusci/server/public/images/status.png
203
+ - lib/octopusci/server/public/images/status2.png
204
+ - lib/octopusci/server/public/javascripts/jquery-1.6.4.min.js
205
+ - lib/octopusci/server/views/hello_world.erb
206
+ - lib/octopusci/server/views/index.erb
207
+ - lib/octopusci/server/views/layout.erb
208
+ - lib/octopusci/server.rb
209
+ - lib/octopusci/stage_locker.rb
210
+ - lib/octopusci/version.rb
211
+ - lib/octopusci/worker_launcher.rb
212
+ - lib/octopusci.rb
213
+ - bin/octopusci
214
+ - bin/octopusci-db-migrate
215
+ - bin/octopusci-skel
216
+ - bin/octopusci-tentacles
217
+ - bin/pusci-stage
218
+ - spec/lib/octopusci/notifier_spec.rb
219
+ - spec/lib/octopusci/server_spec.rb
220
+ - spec/lib/octopusci_spec.rb
221
+ - spec/spec_helper.rb
222
+ - db/migrate/0001_init.rb
223
+ homepage: https://github.com/cyphactor/octopusci
224
+ licenses: []
225
+ post_install_message:
226
+ rdoc_options: []
227
+ require_paths:
228
+ - lib
229
+ required_ruby_version: !ruby/object:Gem::Requirement
230
+ none: false
231
+ requirements:
232
+ - - ! '>='
233
+ - !ruby/object:Gem::Version
234
+ version: '0'
235
+ required_rubygems_version: !ruby/object:Gem::Requirement
236
+ none: false
237
+ requirements:
238
+ - - ! '>='
239
+ - !ruby/object:Gem::Version
240
+ version: '0'
241
+ requirements: []
242
+ rubyforge_project:
243
+ rubygems_version: 1.8.10
244
+ signing_key:
245
+ specification_version: 3
246
+ summary: A continuous integration application using Sinatra.
247
+ test_files: []