integrity 0.1.8

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 (57) hide show
  1. data/README.markdown +66 -0
  2. data/Rakefile +165 -0
  3. data/VERSION.yml +4 -0
  4. data/app.rb +138 -0
  5. data/bin/integrity +4 -0
  6. data/config/config.sample.ru +31 -0
  7. data/config/config.sample.yml +38 -0
  8. data/config/thin.sample.yml +13 -0
  9. data/integrity.gemspec +76 -0
  10. data/lib/integrity.rb +80 -0
  11. data/lib/integrity/build.rb +61 -0
  12. data/lib/integrity/core_ext/object.rb +6 -0
  13. data/lib/integrity/core_ext/string.rb +5 -0
  14. data/lib/integrity/helpers.rb +16 -0
  15. data/lib/integrity/helpers/authorization.rb +33 -0
  16. data/lib/integrity/helpers/breadcrumbs.rb +20 -0
  17. data/lib/integrity/helpers/forms.rb +28 -0
  18. data/lib/integrity/helpers/pretty_output.rb +45 -0
  19. data/lib/integrity/helpers/rendering.rb +14 -0
  20. data/lib/integrity/helpers/resources.rb +13 -0
  21. data/lib/integrity/helpers/urls.rb +47 -0
  22. data/lib/integrity/installer.rb +132 -0
  23. data/lib/integrity/migrations.rb +157 -0
  24. data/lib/integrity/notifier.rb +50 -0
  25. data/lib/integrity/notifier/base.rb +55 -0
  26. data/lib/integrity/project.rb +117 -0
  27. data/lib/integrity/project_builder.rb +47 -0
  28. data/lib/integrity/scm.rb +19 -0
  29. data/lib/integrity/scm/git.rb +83 -0
  30. data/lib/integrity/scm/git/uri.rb +57 -0
  31. data/public/buttons.css +82 -0
  32. data/public/reset.css +7 -0
  33. data/public/spinner.gif +0 -0
  34. data/test/helpers.rb +47 -0
  35. data/test/helpers/acceptance.rb +127 -0
  36. data/test/helpers/acceptance/git_helper.rb +99 -0
  37. data/test/helpers/acceptance/textfile_notifier.rb +26 -0
  38. data/test/helpers/expectations.rb +5 -0
  39. data/test/helpers/expectations/be_a.rb +23 -0
  40. data/test/helpers/expectations/change.rb +90 -0
  41. data/test/helpers/expectations/have.rb +105 -0
  42. data/test/helpers/expectations/have_tag.rb +128 -0
  43. data/test/helpers/expectations/predicates.rb +37 -0
  44. data/test/helpers/fixtures.rb +83 -0
  45. data/views/_build_info.haml +18 -0
  46. data/views/build.haml +2 -0
  47. data/views/error.haml +36 -0
  48. data/views/home.haml +23 -0
  49. data/views/integrity.sass +387 -0
  50. data/views/layout.haml +28 -0
  51. data/views/new.haml +51 -0
  52. data/views/not_found.haml +31 -0
  53. data/views/notifier.haml +7 -0
  54. data/views/project.builder +21 -0
  55. data/views/project.haml +28 -0
  56. data/views/unauthorized.haml +38 -0
  57. metadata +258 -0
data/views/layout.haml ADDED
@@ -0,0 +1,28 @@
1
+ !!! Strict
2
+ %html{ :lang => "en", :"xml:lang" => "en", :xmlns => "http://www.w3.org/1999/xhtml" }
3
+ %head
4
+ %meta{ :content => "text/html; charset=utf-8", :"http-equiv" => "Content-Type" }
5
+ %meta{ :content => "en", :"http-equiv" => "Content-Language" }
6
+ %title= "#{@title.last} | integrity"
7
+ %link{ :media => "screen", :type => "text/css", :href => "/reset.css", :rel => "stylesheet" }
8
+ %link{ :media => "screen", :type => "text/css", :href => "/buttons.css", :rel => "stylesheet" }
9
+ %link{ :media => "screen", :type => "text/css", :href => "/integrity.css", :rel => "stylesheet" }
10
+ - unless @project.nil?
11
+ %link{ :rel => "alternate", :type => "application/atom+xml", :title => "Build history Atom", :href => "#{project_path(@project)}.atom"}
12
+
13
+ %body
14
+ #header
15
+ %h1= @title.join(" / ")
16
+ %address.watermark
17
+ checked with
18
+ %a{ :href => "http://integrityapp.com", :title => "The fun continuous integration server" } integrity
19
+ #content= yield
20
+ - if Integrity.config && Integrity.config[:use_basic_auth]
21
+ #footer
22
+ - if authorized?
23
+ Oh, hello
24
+ %strong&= current_user
25
+ - else
26
+ Hey there!
27
+ %a{ :href => "/login" } Log In
28
+ if you have a user
data/views/new.haml ADDED
@@ -0,0 +1,51 @@
1
+ %form{ :method => "post", :action => (@project.new_record? ? "/" : project_path(@project)) }
2
+ - unless @project.new_record?
3
+ .hidden
4
+ %input{ :name => "_method", :type => "hidden", :value => "put" }
5
+
6
+ %p.required{ :class => error_class(@project, :name) }
7
+ %label{ :for => "project_name" }<
8
+ &== Name #{errors_on @project, :name}
9
+ %input.text#project_name{ :name => "project_data[name]", :type => "text", :value => h(@project.name) }
10
+
11
+ %p.required{ :class => error_class(@project, :uri) }
12
+ %label{ :for => "project_repository" }<
13
+ &== Git repository #{errors_on @project, :uri}
14
+ %input.text#project_repository{ :name => "project_data[uri]", :type => "text", :value => h(@project.uri) }
15
+
16
+ %p.normal{ :class => error_class(@project, :branch) }
17
+ %label{ :for => "project_branch" }<
18
+ &== Branch to track #{errors_on @project, :branch}
19
+ %input.text#project_branch{ :name => "project_data[branch]", :type => "text", :value => "master", :value => h(@project.branch) }
20
+
21
+ %p.normal{ :class => error_class(@project, :command) }
22
+ %label{ :for => "project_build_script" }
23
+ &== Build script #{errors_on @project, :command}
24
+ %textarea#project_build_script{ :name => "project_data[command]", :cols => 40, :rows => 1 }
25
+ &== #{@project.command.to_s}
26
+
27
+ %p.normal.checkbox
28
+ %label{ :for => "project_public" } Public project
29
+ %input.hidden{ :name => "project_data[public]", :value => "0", :type => "hidden" }
30
+ %input.checkbox#project_public{ checkbox("project_data[public]", @project.public?) }
31
+
32
+ - Notifier.available.each do |notifier|
33
+ = notifier_form(notifier)
34
+
35
+ %p.submit
36
+ %button.positive{ :type => "submit" }= @project.new_record? ? "Create Project" : "Update Project"
37
+
38
+ - unless @project.new_record?
39
+ %h2 Push URL
40
+ %p
41
+ You can use this Push URL with your GitHub project to enable automated continuous integration.
42
+ %p
43
+ %code#push_url= push_url_for(@project)
44
+
45
+ %form{ :method => "post", :action => project_path(@project) }
46
+ .hidden
47
+ %input{ :name => "_method", :type => "hidden", :value => "delete" }
48
+ %h2 Delete this project
49
+ %p.submit.destroy
50
+ This will delete the project and all the builds in the system
51
+ %button.negative{ :type => "submit" } Yes, I'm sure, nuke it
@@ -0,0 +1,31 @@
1
+ .error
2
+ %h1
3
+ Ehm, you seem a bit lost, sir. Maybe going to the
4
+ %a{ :href => "/", :rel => "home" } list of projects
5
+ will help?
6
+ %dl
7
+ %dt Ouch. This is a 404 error-thingie, right?
8
+ %dd Yeah, you browsed to a page that doesn't exist in this server.
9
+
10
+ %dt What can I do?
11
+ %dd
12
+ As a very good book says on its cover:
13
+ = succeed "." do
14
+ %strong DON'T PANIC
15
+ / if you didn't get the reference you aren't as nerd as you should be
16
+ You should probably just go back to
17
+ %a{ :href => "/", :rel => "home" } the projects list
18
+ or, alternatively, go
19
+ = succeed "." do
20
+ %a{ :href => request.referer } back from whence you came
21
+
22
+ %dt
23
+ What the hell is
24
+ = succeed "?" do
25
+ %strong Integrity
26
+ %dd
27
+ Integrity is your friendly
28
+ %a{ :href => "http://en.wikipedia.org/wiki/Continuous_integration" } Continuous Integration
29
+ server. If you want to know more about us, check our website at
30
+ = succeed "." do
31
+ %a{ :href => "http://integrityapp.com" } integrityapp.com
@@ -0,0 +1,7 @@
1
+ %h2.notifier
2
+ %label
3
+ %input.checkbox{ checkbox("enabled_notifiers[]", enabled, :value => notifier, :id => "enabled_notifiers_#{notifier.downcase}") }
4
+ == #{notifier} Notifications
5
+ %span.warning be aware that no validation will be made on these fields
6
+ %fieldset{ :id => "#{notifier.downcase}_config" }
7
+ = yield
@@ -0,0 +1,21 @@
1
+ xml.instruct!
2
+ xml.feed :xmlns => "http://www.w3.org/2005/Atom" do
3
+ xml.title "Build history for #{@project.name}"
4
+ xml.subtitle @project.uri
5
+ xml.updated @project.builds.first.created_at
6
+ xml.link :href => "#{project_url(@project)}.atom", :rel => "self"
7
+ xml.id "#{project_url(@project)}.atom"
8
+
9
+ @project.builds.each do |build|
10
+ xml.entry do
11
+ xml.id build_url(build)
12
+ xml.link :href => build_url(build), :rel => "alternate", :type => "text/html"
13
+ xml.updated build.created_at
14
+ xml.published build.created_at
15
+
16
+ xml.title "Built #{build.short_commit_identifier} #{build.successful? ? "successfully" : "and failed"}"
17
+ xml.author { xml.name(build.commit_author.name) }
18
+ xml.content("<div>#{partial(:build_info, :build => build)}</div>", :type => "html")
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,28 @@
1
+ #administrative
2
+ %a{ :href => project_path(@project, :edit) } Edit Project
3
+
4
+ - if @project.builds.empty?
5
+ %form.blank_slate{ :action => project_path(@project, :builds), :method => :post }
6
+ %p No builds for this project, buddy
7
+ %h1
8
+ You can request a
9
+ %button{ :type => :submit } manual build
10
+ - else
11
+ - @build = @project.last_build
12
+ #last_build{ :class => @build.status }
13
+ = partial(:build_info, :build => @build)
14
+
15
+ %form{ :action => project_path(@project, :builds), :method => :post }
16
+ %p.submit
17
+ %button{ :type => :submit } Request Manual Build
18
+
19
+ - unless @project.previous_builds.empty?
20
+ %h2 Previous builds
21
+ %ul#previous_builds
22
+ - @project.previous_builds.each do |build|
23
+ %li{ :class => build.status }
24
+ %a{ :href => build_path(build) }
25
+ %strong.build<
26
+ &== Build #{build.short_commit_identifier}
27
+ %span.attribution<
28
+ == by #{build.commit_author.name}, #{pretty_date build.commited_at}
@@ -0,0 +1,38 @@
1
+ .error
2
+ %h1
3
+ So... you don't know the password? Hmm... You can
4
+ %a{ :href => "/login" } try again
5
+ or
6
+ = succeed "." do
7
+ %a{ :href => "/", :rel => "home" } go back
8
+
9
+ %dl
10
+ %dt Er... So... I'm trying to login without a password...
11
+ %dd
12
+ Hey pal, sorry, but I can't let in anyone that isn't
13
+ = succeed "." do
14
+ %strong on the list
15
+ I could lose my job you know? You'll have to come up with
16
+ a valid password :-(
17
+
18
+ %dt What can I do?
19
+ %dd
20
+ This just means that you can't access some part of this Integrity
21
+ server, but that shouldn't let you out of some of the
22
+ %a{ :href => "/" } awesome projects
23
+ hosted here. If this was just a misunderstanding and you
24
+ %strong do
25
+ have a password, then
26
+ = succeed "." do
27
+ %a{ :href => "/login" } click here to try again
28
+
29
+ %dt
30
+ So what the hell is
31
+ = succeed "?" do
32
+ %strong Integrity
33
+ %dd
34
+ Integrity is your friendly
35
+ %a{ :href => "http://en.wikipedia.org/wiki/Continuous_integration" } Continuous Integration
36
+ server. If you want to know more about us, check our website at
37
+ = succeed "." do
38
+ %a{ :href => "http://integrityapp.com" } integrityapp.com
metadata ADDED
@@ -0,0 +1,258 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: integrity
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.8
5
+ platform: ruby
6
+ authors:
7
+ - "Nicol\xC3\xA1s Sanguinetti"
8
+ - Simon Rozet
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+
13
+ date: 2009-02-12 00:00:00 +01:00
14
+ default_executable: integrity
15
+ dependencies:
16
+ - !ruby/object:Gem::Dependency
17
+ name: sinatra
18
+ type: :runtime
19
+ version_requirement:
20
+ version_requirements: !ruby/object:Gem::Requirement
21
+ requirements:
22
+ - - ">="
23
+ - !ruby/object:Gem::Version
24
+ version: 0.9.0.3
25
+ version:
26
+ - !ruby/object:Gem::Dependency
27
+ name: haml
28
+ type: :runtime
29
+ version_requirement:
30
+ version_requirements: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - ">="
33
+ - !ruby/object:Gem::Version
34
+ version: 2.0.0
35
+ version:
36
+ - !ruby/object:Gem::Dependency
37
+ name: dm-core
38
+ type: :runtime
39
+ version_requirement:
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ requirements:
42
+ - - ">="
43
+ - !ruby/object:Gem::Version
44
+ version: 0.9.5
45
+ version:
46
+ - !ruby/object:Gem::Dependency
47
+ name: dm-validations
48
+ type: :runtime
49
+ version_requirement:
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: 0.9.5
55
+ version:
56
+ - !ruby/object:Gem::Dependency
57
+ name: dm-types
58
+ type: :runtime
59
+ version_requirement:
60
+ version_requirements: !ruby/object:Gem::Requirement
61
+ requirements:
62
+ - - ">="
63
+ - !ruby/object:Gem::Version
64
+ version: 0.9.5
65
+ version:
66
+ - !ruby/object:Gem::Dependency
67
+ name: dm-timestamps
68
+ type: :runtime
69
+ version_requirement:
70
+ version_requirements: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ version: 0.9.5
75
+ version:
76
+ - !ruby/object:Gem::Dependency
77
+ name: dm-aggregates
78
+ type: :runtime
79
+ version_requirement:
80
+ version_requirements: !ruby/object:Gem::Requirement
81
+ requirements:
82
+ - - ">="
83
+ - !ruby/object:Gem::Version
84
+ version: 0.9.5
85
+ version:
86
+ - !ruby/object:Gem::Dependency
87
+ name: dm-migrations
88
+ type: :runtime
89
+ version_requirement:
90
+ version_requirements: !ruby/object:Gem::Requirement
91
+ requirements:
92
+ - - ">="
93
+ - !ruby/object:Gem::Version
94
+ version: 0.9.5
95
+ version:
96
+ - !ruby/object:Gem::Dependency
97
+ name: data_objects
98
+ type: :runtime
99
+ version_requirement:
100
+ version_requirements: !ruby/object:Gem::Requirement
101
+ requirements:
102
+ - - ">="
103
+ - !ruby/object:Gem::Version
104
+ version: 0.9.5
105
+ version:
106
+ - !ruby/object:Gem::Dependency
107
+ name: do_sqlite3
108
+ type: :runtime
109
+ version_requirement:
110
+ version_requirements: !ruby/object:Gem::Requirement
111
+ requirements:
112
+ - - ">="
113
+ - !ruby/object:Gem::Version
114
+ version: 0.9.5
115
+ version:
116
+ - !ruby/object:Gem::Dependency
117
+ name: json
118
+ type: :runtime
119
+ version_requirement:
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: "0"
125
+ version:
126
+ - !ruby/object:Gem::Dependency
127
+ name: foca-sinatra-diddies
128
+ type: :runtime
129
+ version_requirement:
130
+ version_requirements: !ruby/object:Gem::Requirement
131
+ requirements:
132
+ - - ">="
133
+ - !ruby/object:Gem::Version
134
+ version: 0.0.2
135
+ version:
136
+ - !ruby/object:Gem::Dependency
137
+ name: thor
138
+ type: :runtime
139
+ version_requirement:
140
+ version_requirements: !ruby/object:Gem::Requirement
141
+ requirements:
142
+ - - ">="
143
+ - !ruby/object:Gem::Version
144
+ version: "0"
145
+ version:
146
+ - !ruby/object:Gem::Dependency
147
+ name: uuidtools
148
+ type: :runtime
149
+ version_requirement:
150
+ version_requirements: !ruby/object:Gem::Requirement
151
+ requirements:
152
+ - - ">="
153
+ - !ruby/object:Gem::Version
154
+ version: "0"
155
+ version:
156
+ - !ruby/object:Gem::Dependency
157
+ name: bcrypt-ruby
158
+ type: :runtime
159
+ version_requirement:
160
+ version_requirements: !ruby/object:Gem::Requirement
161
+ requirements:
162
+ - - ">="
163
+ - !ruby/object:Gem::Version
164
+ version: "0"
165
+ version:
166
+ description: Your Friendly Continuous Integration server. Easy, fun and painless!
167
+ email: contacto@nicolassanguinetti.info
168
+ executables:
169
+ - integrity
170
+ extensions: []
171
+
172
+ extra_rdoc_files: []
173
+
174
+ files:
175
+ - README.markdown
176
+ - Rakefile
177
+ - VERSION.yml
178
+ - app.rb
179
+ - bin/integrity
180
+ - config/config.sample.ru
181
+ - config/config.sample.yml
182
+ - config/thin.sample.yml
183
+ - integrity.gemspec
184
+ - lib/integrity.rb
185
+ - lib/integrity/build.rb
186
+ - lib/integrity/core_ext/object.rb
187
+ - lib/integrity/core_ext/string.rb
188
+ - lib/integrity/helpers.rb
189
+ - lib/integrity/helpers/authorization.rb
190
+ - lib/integrity/helpers/breadcrumbs.rb
191
+ - lib/integrity/helpers/forms.rb
192
+ - lib/integrity/helpers/pretty_output.rb
193
+ - lib/integrity/helpers/rendering.rb
194
+ - lib/integrity/helpers/resources.rb
195
+ - lib/integrity/helpers/urls.rb
196
+ - lib/integrity/installer.rb
197
+ - lib/integrity/migrations.rb
198
+ - lib/integrity/notifier.rb
199
+ - lib/integrity/notifier/base.rb
200
+ - lib/integrity/project.rb
201
+ - lib/integrity/project_builder.rb
202
+ - lib/integrity/scm.rb
203
+ - lib/integrity/scm/git.rb
204
+ - lib/integrity/scm/git/uri.rb
205
+ - public/buttons.css
206
+ - public/reset.css
207
+ - public/spinner.gif
208
+ - test/helpers.rb
209
+ - test/helpers/acceptance.rb
210
+ - test/helpers/acceptance/git_helper.rb
211
+ - test/helpers/acceptance/textfile_notifier.rb
212
+ - test/helpers/expectations.rb
213
+ - test/helpers/expectations/be_a.rb
214
+ - test/helpers/expectations/change.rb
215
+ - test/helpers/expectations/have.rb
216
+ - test/helpers/expectations/have_tag.rb
217
+ - test/helpers/expectations/predicates.rb
218
+ - test/helpers/fixtures.rb
219
+ - views/_build_info.haml
220
+ - views/build.haml
221
+ - views/error.haml
222
+ - views/home.haml
223
+ - views/integrity.sass
224
+ - views/layout.haml
225
+ - views/new.haml
226
+ - views/not_found.haml
227
+ - views/notifier.haml
228
+ - views/project.builder
229
+ - views/project.haml
230
+ - views/unauthorized.haml
231
+ has_rdoc: false
232
+ homepage: http://integrityapp.com
233
+ post_install_message: Run `integrity help` for information on how to setup Integrity.
234
+ rdoc_options: []
235
+
236
+ require_paths:
237
+ - lib
238
+ required_ruby_version: !ruby/object:Gem::Requirement
239
+ requirements:
240
+ - - ">="
241
+ - !ruby/object:Gem::Version
242
+ version: "0"
243
+ version:
244
+ required_rubygems_version: !ruby/object:Gem::Requirement
245
+ requirements:
246
+ - - ">="
247
+ - !ruby/object:Gem::Version
248
+ version: "0"
249
+ version:
250
+ requirements: []
251
+
252
+ rubyforge_project: integrity
253
+ rubygems_version: 1.3.1
254
+ signing_key:
255
+ specification_version: 2
256
+ summary: The easy and fun Continuous Integration server
257
+ test_files: []
258
+