alphasights-integrity 0.1.9.8 → 0.1.10

Sign up to get free protection for your applications and to get access to all the features.
Files changed (47) hide show
  1. data/.gitignore +0 -1
  2. data/AUTHORS +35 -0
  3. data/CHANGES +21 -3
  4. data/LICENSE +20 -0
  5. data/README.md +10 -52
  6. data/config/config.sample.yml +4 -0
  7. data/config/heroku/.gems +1 -1
  8. data/config/heroku/integrity-config.rb +1 -0
  9. data/integrity.gemspec +6 -11
  10. data/lib/integrity.rb +4 -4
  11. data/lib/integrity/app.rb +1 -1
  12. data/lib/integrity/build.rb +8 -18
  13. data/lib/integrity/commit.rb +13 -8
  14. data/lib/integrity/helpers/pretty_output.rb +8 -0
  15. data/lib/integrity/helpers/urls.rb +3 -3
  16. data/lib/integrity/installer.rb +20 -11
  17. data/lib/integrity/migrations.rb +43 -13
  18. data/lib/integrity/notifier.rb +1 -1
  19. data/lib/integrity/notifier/base.rb +2 -2
  20. data/lib/integrity/notifier/test/fixtures.rb +12 -6
  21. data/lib/integrity/project.rb +34 -38
  22. data/lib/integrity/project/push.rb +4 -5
  23. data/test/acceptance/api_test.rb +1 -1
  24. data/test/acceptance/browse_project_test.rb +12 -6
  25. data/test/acceptance/build_notifications_test.rb +26 -2
  26. data/test/acceptance/installer_test.rb +1 -1
  27. data/test/acceptance/manual_build_project_test.rb +2 -2
  28. data/test/acceptance/notifier_test_test.rb +37 -0
  29. data/test/acceptance/stylesheet_test.rb +2 -1
  30. data/test/helpers.rb +3 -2
  31. data/test/unit/build_test.rb +11 -46
  32. data/test/unit/commit_test.rb +37 -28
  33. data/test/unit/helpers_test.rb +16 -0
  34. data/test/unit/migrations_test.rb +6 -4
  35. data/test/unit/project_test.rb +64 -95
  36. data/views/_commit_info.haml +6 -10
  37. data/views/home.haml +3 -2
  38. data/views/integrity.sass +24 -4
  39. data/views/project.haml +5 -4
  40. metadata +6 -20
  41. data/lib/integrity/helpers/gravatar.rb +0 -16
  42. data/lib/integrity/project_builder.rb +0 -56
  43. data/lib/integrity/scm.rb +0 -19
  44. data/lib/integrity/scm/git.rb +0 -84
  45. data/lib/integrity/scm/git/uri.rb +0 -57
  46. data/test/unit/project_builder_test.rb +0 -118
  47. data/test/unit/scm_test.rb +0 -54
@@ -12,18 +12,14 @@
12
12
  %p.meta<
13
13
  %span.who<
14
14
  %strong&= commit.author.name
15
- %span.when{ :title => commit.committed_at }<
16
- &= pretty_date commit.committed_at
15
+ - if commit.build
16
+ %span.when{ :title => commit.committed_at }<
17
+ = pretty_date_time(commit.build.updated_at)
17
18
  %br
18
19
  %span.what<
19
- changeset:
20
- - if commit.url
21
- %a{ :href => commit.url, :title => "View #{commit.short_identifier} changeset" }<
22
- &= commit.url
23
- - else
24
- %span{ :title => commit.identifier }<
25
- &= commit.short_identifier
26
-
20
+ commit:
21
+ %a{ :href => commit.uri }>
22
+ &== #{commit.identifier}
27
23
  %h2 Build Output:
28
24
  %pre.output
29
25
  :preserve
data/views/home.haml CHANGED
@@ -11,9 +11,10 @@
11
11
  %li{ :class => cycle("even", "odd") + ' ' + project.status.to_s }
12
12
  %a{ :href => project_path(project) }&= project.name
13
13
  .meta
14
- - if project.building?
14
+ - case project.status
15
+ - when :building
15
16
  Building!
16
- - elsif project.last_commit.nil?
17
+ - when :blank
17
18
  Never built yet
18
19
  - else
19
20
  %img.floating_gravatar{ gravatar_attrs(project.last_commit.author, 20) }
data/views/integrity.sass CHANGED
@@ -17,6 +17,8 @@
17
17
  !success_color = #337022
18
18
  !failed_bg = #fba
19
19
  !failed_color = #f10
20
+ !building_bg = #ccc
21
+ !building_color = #777
20
22
 
21
23
  html
22
24
  :background-color = !page_bg
@@ -241,8 +243,6 @@ a
241
243
  :border-bottom = 1px "solid" !rule_color
242
244
  &.odd
243
245
  :background = !content_bg - #080808
244
- &.building
245
- :background transparent url(/spinner.gif) no-repeat scroll right
246
246
  a
247
247
  :font-size 2em
248
248
  :padding .25em
@@ -253,6 +253,8 @@ a
253
253
  :color = !success_color
254
254
  &.failed
255
255
  :color = !failed_color
256
+ &.building
257
+ :color = !building_color
256
258
  .meta
257
259
  :position absolute
258
260
  :right .6em
@@ -261,12 +263,12 @@ a
261
263
  :font-size 0.8em
262
264
  :color = !light_color
263
265
  :text-align right
264
- &.building .meta
265
- :right 1.6em
266
266
  &.success .meta
267
267
  :color = !success_color
268
268
  &.failed .meta
269
269
  :color = !failed_color
270
+ &.building .meta
271
+ :color = !building_color
270
272
 
271
273
 
272
274
  #previous_builds
@@ -301,6 +303,14 @@ a
301
303
  :color = !failed_bg - #444
302
304
  &:hover
303
305
  :background-color = !failed_bg + #222
306
+ &.building a
307
+ :background-color = !building_bg
308
+ :border-color = !building_bg - #222
309
+ :color = !building_color
310
+ .attribution
311
+ :color = !building_bg - #444
312
+ &:hover
313
+ :background-color = !building_bg + #222
304
314
 
305
315
 
306
316
  #build, #last_build
@@ -345,6 +355,16 @@ a
345
355
  :background-color = !failed_bg - #555
346
356
  :color #fff
347
357
 
358
+ &.building
359
+ h1, blockquote
360
+ :background-color = !building_bg
361
+ :border-color = (!building_bg - #222) (!building_bg + #111) (!building_bg + #111) (!building_bg - #222)
362
+ h1
363
+ :color = !building_color
364
+ :background transparent url(/spinner.gif) no-repeat scroll right
365
+ .meta
366
+ :color = !building_color - #444
367
+
348
368
  h1
349
369
  :margin-top .5em
350
370
  :margin-bottom 0
data/views/project.haml CHANGED
@@ -14,9 +14,8 @@
14
14
 
15
15
  %form{ :action => project_path(@project, :builds), :method => :post }
16
16
  %p.submit.manual-build
17
- %button{ :type => :submit, :title => "Fetch the last commit and build it" }<
18
- Build the last commit
19
- in the repository (or rebuild the latest)
17
+ %button{ :type => :submit, :title => "Fetch the last commit from the remote repository and build it" }<
18
+ Fetch and build
20
19
 
21
20
  - unless @project.previous_commits.empty?
22
21
  %h2 Previous builds
@@ -28,4 +27,6 @@
28
27
  %strong.build<
29
28
  &== Build #{commit.short_identifier}
30
29
  %span.attribution<
31
- == by #{commit.author.name}, #{pretty_date commit.committed_at}
30
+ == by #{commit.author.name}
31
+ -if commit.build
32
+ = pretty_date_time commit.build.updated_at
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: alphasights-integrity
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.9.8
4
+ version: 0.1.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - "Nicol\xC3\xA1s Sanguinetti"
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2009-04-06 00:00:00 -07:00
13
+ date: 2009-05-14 00:00:00 -07:00
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
@@ -19,7 +19,7 @@ dependencies:
19
19
  version_requirement:
20
20
  version_requirements: !ruby/object:Gem::Requirement
21
21
  requirements:
22
- - - ">="
22
+ - - "="
23
23
  - !ruby/object:Gem::Version
24
24
  version: 0.9.1.1
25
25
  version:
@@ -103,16 +103,6 @@ dependencies:
103
103
  - !ruby/object:Gem::Version
104
104
  version: "0"
105
105
  version:
106
- - !ruby/object:Gem::Dependency
107
- name: mocha
108
- type: :development
109
- version_requirement:
110
- version_requirements: !ruby/object:Gem::Requirement
111
- requirements:
112
- - - ">="
113
- - !ruby/object:Gem::Version
114
- version: "0"
115
- version:
116
106
  - !ruby/object:Gem::Dependency
117
107
  name: webrat
118
108
  type: :development
@@ -203,7 +193,9 @@ extra_rdoc_files: []
203
193
 
204
194
  files:
205
195
  - .gitignore
196
+ - AUTHORS
206
197
  - CHANGES
198
+ - LICENSE
207
199
  - README.md
208
200
  - Rakefile
209
201
  - bin/integrity
@@ -228,7 +220,6 @@ files:
228
220
  - lib/integrity/helpers/rendering.rb
229
221
  - lib/integrity/helpers/resources.rb
230
222
  - lib/integrity/helpers/urls.rb
231
- - lib/integrity/helpers/gravatar.rb
232
223
  - lib/integrity/installer.rb
233
224
  - lib/integrity/migrations.rb
234
225
  - lib/integrity/notifier.rb
@@ -239,10 +230,6 @@ files:
239
230
  - lib/integrity/project.rb
240
231
  - lib/integrity/project/notifiers.rb
241
232
  - lib/integrity/project/push.rb
242
- - lib/integrity/project_builder.rb
243
- - lib/integrity/scm.rb
244
- - lib/integrity/scm/git.rb
245
- - lib/integrity/scm/git/uri.rb
246
233
  - public/buttons.css
247
234
  - public/reset.css
248
235
  - public/spinner.gif
@@ -257,6 +244,7 @@ files:
257
244
  - test/acceptance/installer_test.rb
258
245
  - test/acceptance/manual_build_project_test.rb
259
246
  - test/acceptance/not_found_page_test.rb
247
+ - test/acceptance/notifier_test_test.rb
260
248
  - test/acceptance/project_syndication_test.rb
261
249
  - test/acceptance/stylesheet_test.rb
262
250
  - test/acceptance/unauthorized_page_test.rb
@@ -279,9 +267,7 @@ files:
279
267
  - test/unit/migrations_test.rb
280
268
  - test/unit/notifier/base_test.rb
281
269
  - test/unit/notifier_test.rb
282
- - test/unit/project_builder_test.rb
283
270
  - test/unit/project_test.rb
284
- - test/unit/scm_test.rb
285
271
  - views/_commit_info.haml
286
272
  - views/build.haml
287
273
  - views/error.haml
@@ -1,16 +0,0 @@
1
- module Integrity
2
- module Helpers
3
- module Gravatar
4
- def gravatar_attrs(author, size=40)
5
- # size = 40 unless %w(20 30 40 50).include?(size)
6
- if author.email.nil?
7
- {:src => "gravatar-#{size}.png", :title => 'Unknown author'}
8
- else
9
- email_digest = Digest::MD5.hexdigest(author.email)
10
- source = "http://gravatar.com/avatar/#{email_digest}?s=#{size}"
11
- {:src => source, :title => author.name}
12
- end
13
- end
14
- end
15
- end
16
- end
@@ -1,56 +0,0 @@
1
- require "forwardable"
2
-
3
- module Integrity
4
- class ProjectBuilder
5
- extend Forwardable
6
-
7
- attr_accessor :project, :scm
8
- def_delegators :project, :name, :uri, :command, :branch
9
-
10
- def self.build(commit)
11
- new(commit.project).build(commit)
12
- end
13
-
14
- def self.delete_working_directory(project)
15
- new(project).delete_code
16
- end
17
-
18
- def initialize(project)
19
- @project = project
20
- @scm = SCM.new(uri, branch, export_directory)
21
- end
22
-
23
- def build(commit)
24
- build = commit.build
25
- build.start!
26
-
27
- Integrity.log "Building #{commit.identifier} (#{branch}) of #{name} in" +
28
- "#{export_directory} using #{scm.name}"
29
-
30
- scm.with_revision(commit.identifier) do
31
- Integrity.log "Running `#{command}` in #{scm.working_directory}"
32
-
33
- IO.popen("(cd #{scm.working_directory} && #{command}) 2>&1", "r") {
34
- |output| build.output = output.read }
35
- build.successful = $?.success?
36
- end
37
-
38
- build
39
- ensure
40
- build.complete!
41
- commit.update_attributes(scm.info(commit.identifier) || {})
42
- project.enabled_notifiers.each { |notifier| notifier.notify_of_build(build) }
43
- end
44
-
45
- def delete_code
46
- FileUtils.rm_r export_directory
47
- rescue Errno::ENOENT
48
- nil
49
- end
50
-
51
- private
52
- def export_directory
53
- Integrity.config[:export_directory] / "#{SCM.working_tree_path(uri)}-#{branch}"
54
- end
55
- end
56
- end
data/lib/integrity/scm.rb DELETED
@@ -1,19 +0,0 @@
1
- module Integrity
2
- module SCM
3
- class SCMUnknownError < StandardError; end
4
-
5
- def self.new(uri, *args)
6
- scm_class_for(uri).new(uri, *args)
7
- end
8
-
9
- def self.working_tree_path(uri)
10
- scm_class_for(uri).working_tree_path(uri)
11
- end
12
-
13
- private
14
- def self.scm_class_for(uri)
15
- return Git if uri.scheme == "git" || uri.path =~ /\.git\/?/
16
- raise SCMUnknownError, "could not find any SCM based on URI '#{uri.to_s}'"
17
- end
18
- end
19
- end
@@ -1,84 +0,0 @@
1
- module Integrity
2
- module SCM
3
- class Git
4
- require File.dirname(__FILE__) / "git/uri"
5
-
6
- attr_reader :uri, :branch, :working_directory
7
-
8
- def self.working_tree_path(uri)
9
- Git::URI.new(uri).working_tree_path
10
- end
11
-
12
- def initialize(uri, branch, working_directory=nil)
13
- @uri = uri.to_s
14
- @branch = branch.to_s
15
- @working_directory = working_directory
16
- end
17
-
18
- def with_revision(revision)
19
- fetch_code
20
- checkout(revision)
21
- yield
22
- end
23
-
24
- def name
25
- self.class.name.split("::").last
26
- end
27
-
28
- def head
29
- log "Getting the HEAD of '#{uri}' at '#{branch}'"
30
- `git ls-remote --heads #{uri} #{branch} | awk '{print $1}'`.chomp
31
- end
32
-
33
- def info(revision)
34
- format = %Q(---%n:author: %an <%ae>%n:message: >-%n %s%n:committed_at: %ci%n)
35
- YAML.load(`cd #{working_directory} && git show -s --pretty=format:"#{format}" #{revision}`)
36
- end
37
-
38
- private
39
-
40
- def fetch_code
41
- clone unless cloned?
42
- checkout unless on_branch?
43
- pull
44
- end
45
-
46
- def clone
47
- log "Cloning #{uri} to #{working_directory}"
48
- `git clone #{uri} #{working_directory} &>/dev/null`
49
- end
50
-
51
- def checkout(treeish=nil)
52
- strategy = case
53
- when treeish then treeish
54
- when local_branches.include?(branch) then branch
55
- else "origin/#{branch}"
56
- end
57
-
58
- log "Checking-out #{strategy}"
59
- `cd #{working_directory} && git reset --hard #{strategy} &>/dev/null`
60
- end
61
-
62
- def pull
63
- log "Pull-ing in #{working_directory}"
64
- `cd #{working_directory} && git pull &>/dev/null`
65
- end
66
-
67
- def local_branches
68
- `cd #{working_directory} && git branch`.split("\n").map {|b| b.delete("*").strip }
69
- end
70
-
71
- def cloned?
72
- File.directory?(working_directory / ".git")
73
- end
74
-
75
- def on_branch?
76
- File.basename(`cd #{working_directory} && git symbolic-ref HEAD &>/dev/null`).chomp == branch
77
- end
78
-
79
- def log(message)
80
- Integrity.log("Git") { message }
81
- end
82
- end
83
- end
84
- end
@@ -1,57 +0,0 @@
1
- module Integrity
2
- module SCM
3
- class Git
4
- # From the git-pull man page:
5
- #
6
- # GIT URLS
7
- # One of the following notations can be used to name the remote repository:
8
- #
9
- # rsync://host.xz/path/to/repo.git/
10
- # http://host.xz/path/to/repo.git/
11
- # git://host.xz/~user/path/to/repo.git/
12
- # ssh://[user@]host.xz[:port]/path/to/repo.git/
13
- # ssh://[user@]host.xz/path/to/repo.git/
14
- # ssh://[user@]host.xz/~user/path/to/repo.git/
15
- # ssh://[user@]host.xz/~/path/to/repo.git
16
- #
17
- # SSH is the default transport protocol over the network. You can optionally
18
- # specify which user to log-in as, and an alternate, scp-like syntax is also
19
- # supported
20
- #
21
- # Both syntaxes support username expansion, as does the native git protocol,
22
- # but only the former supports port specification. The following three are
23
- # identical to the last three above, respectively:
24
- #
25
- # [user@]host.xz:/path/to/repo.git/
26
- # [user@]host.xz:~user/path/to/repo.git/
27
- # [user@]host.xz:path/to/repo.git
28
- #
29
- class URI
30
- def initialize(uri_string)
31
- @uri = Addressable::URI.parse(uri_string)
32
- end
33
-
34
- def working_tree_path
35
- strip_extension(path).gsub("/", "-")
36
- end
37
-
38
- private
39
-
40
- def strip_extension(string)
41
- uri = Pathname.new(string)
42
- if uri.extname.any?
43
- uri = Pathname.new(string)
44
- string.gsub(Regexp.new("#{uri.extname}\/?"), "")
45
- else
46
- string
47
- end
48
- end
49
-
50
- def path
51
- path = @uri.path
52
- path.gsub(/\~[a-zA-Z0-9]*\//, "").gsub(/^\//, "")
53
- end
54
- end
55
- end
56
- end
57
- end