integrity 0.1.9.2 → 0.1.9.3
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 +16 -2
- data/{README.markdown → README.md} +5 -2
- data/Rakefile +7 -29
- data/integrity.gemspec +9 -6
- data/lib/integrity.rb +4 -4
- data/lib/integrity/app.rb +1 -1
- data/lib/integrity/build.rb +9 -41
- data/lib/integrity/commit.rb +7 -18
- data/lib/integrity/helpers/breadcrumbs.rb +1 -1
- data/lib/integrity/helpers/forms.rb +7 -6
- data/lib/integrity/helpers/resources.rb +1 -1
- data/lib/integrity/installer.rb +6 -1
- data/lib/integrity/migrations.rb +13 -2
- data/lib/integrity/notifier.rb +16 -20
- data/lib/integrity/notifier/base.rb +7 -3
- data/lib/integrity/project.rb +10 -63
- data/lib/integrity/project/notifiers.rb +33 -0
- data/lib/integrity/project/push.rb +44 -0
- data/lib/integrity/project_builder.rb +35 -35
- data/test/acceptance/browse_project_test.rb +4 -0
- data/test/acceptance/build_notifications_test.rb +57 -4
- data/test/acceptance/installer_test.rb +4 -1
- data/test/helpers.rb +36 -40
- data/test/helpers/acceptance.rb +4 -0
- data/test/helpers/acceptance/notifier_helper.rb +47 -0
- data/test/unit/build_test.rb +21 -10
- data/test/unit/commit_test.rb +4 -21
- data/test/unit/helpers_test.rb +10 -6
- data/test/unit/migrations_test.rb +5 -4
- data/test/unit/notifier/base_test.rb +43 -0
- data/test/unit/notifier_test.rb +18 -49
- data/test/unit/project_builder_test.rb +8 -1
- data/test/unit/project_test.rb +95 -19
- data/views/_commit_info.haml +1 -1
- data/views/new.haml +1 -2
- metadata +19 -7
- data/test/acceptance/notifier_test.rb +0 -109
- data/test/helpers/fixtures.rb +0 -87
data/CHANGES
CHANGED
@@ -1,4 +1,18 @@
|
|
1
|
-
0.1.9.
|
1
|
+
0.1.9.3 / 2009-04-06
|
2
|
+
====================
|
3
|
+
|
4
|
+
* Fix one more URL issue
|
5
|
+
* Fix that notifiers are always enabled
|
6
|
+
* Fix for when the commit identifier can't be retrieved
|
7
|
+
* Fix the schema to accept NULL commit author and message
|
8
|
+
* Upgrade to DataMapper 0.9.11
|
9
|
+
* Remove all of deprecation code, except on Notifier::Base
|
10
|
+
* Notifiers were refactored and now require to be registered:
|
11
|
+
Integrity.register(Integrity::Notifier::IRC)
|
12
|
+
* The installer do not migrate the database automagically after
|
13
|
+
a successful install anymore
|
14
|
+
|
15
|
+
0.1.9.2 / 2009-03-28
|
2
16
|
====================
|
3
17
|
|
4
18
|
* Add development dependencies to gemspec
|
@@ -25,4 +39,4 @@
|
|
25
39
|
* Fix the installer to work with the current Thor gem
|
26
40
|
|
27
41
|
|
28
|
-
|
42
|
+
(There is no changelog for previous release)
|
@@ -18,8 +18,11 @@ Try it!
|
|
18
18
|
Run the test suite
|
19
19
|
------------------
|
20
20
|
|
21
|
-
|
22
|
-
|
21
|
+
1. Ensure you have `gems.github.com` in your gem sources:
|
22
|
+
`gem sources -a http://gems.github.com`
|
23
|
+
2. Install the runtime and development dependencies:
|
24
|
+
`gem build integrity.gemspec && gem install *.gem --development`.
|
25
|
+
3. Run the test suite: `rake test`
|
23
26
|
|
24
27
|
Thanks
|
25
28
|
------
|
data/Rakefile
CHANGED
@@ -1,5 +1,4 @@
|
|
1
1
|
require "rake/testtask"
|
2
|
-
require "rake/clean"
|
3
2
|
|
4
3
|
def spec
|
5
4
|
@spec ||= begin
|
@@ -11,15 +10,6 @@ end
|
|
11
10
|
desc "Default: run all tests"
|
12
11
|
task :default => :test
|
13
12
|
|
14
|
-
desc "Install Integrity dependencies"
|
15
|
-
task :setup do
|
16
|
-
puts "NOTE: assuming you have gems.github.com in your gem sources"
|
17
|
-
|
18
|
-
system "gem install " +
|
19
|
-
spec.dependencies.select { |dep| dep.type == :runtime }.
|
20
|
-
collect(&:name).join(" ")
|
21
|
-
end
|
22
|
-
|
23
13
|
desc "Launch Integrity real quick"
|
24
14
|
task :launch do
|
25
15
|
ruby "bin/integrity launch"
|
@@ -28,39 +18,27 @@ end
|
|
28
18
|
desc "Run tests"
|
29
19
|
task :test => %w(test:units test:acceptance)
|
30
20
|
namespace :test do
|
21
|
+
desc "Run unit tests"
|
31
22
|
Rake::TestTask.new(:units) do |t|
|
32
23
|
t.test_files = FileList["test/unit/*_test.rb"]
|
33
24
|
end
|
34
25
|
|
26
|
+
desc "Run acceptance tests"
|
35
27
|
Rake::TestTask.new(:acceptance) do |t|
|
36
28
|
t.test_files = FileList["test/acceptance/*_test.rb"]
|
37
29
|
end
|
38
|
-
|
39
|
-
desc "Install tests dependencies"
|
40
|
-
task :setup do
|
41
|
-
puts "NOTE: assuming you have gems.github.com in your gem sources"
|
42
|
-
|
43
|
-
system "gem install " +
|
44
|
-
spec.dependencies.select { |dep| dep.type == :development }.
|
45
|
-
collect(&:name).join(" ")
|
46
|
-
end
|
47
30
|
end
|
48
31
|
|
49
32
|
begin
|
50
33
|
require "mg"
|
51
|
-
MG.new("integrity.gemspec")
|
52
|
-
rescue LoadError
|
53
|
-
end
|
54
|
-
|
55
|
-
begin
|
56
34
|
require "metric_fu"
|
35
|
+
|
36
|
+
MG.new("integrity.gemspec")
|
57
37
|
rescue LoadError
|
58
38
|
end
|
59
39
|
|
60
40
|
desc "Special task for running tests on <http://builder.integrityapp.com>"
|
61
41
|
task :ci do
|
62
|
-
sh "git submodule update --init"
|
63
|
-
|
64
42
|
Rake::Task["test"].invoke
|
65
43
|
|
66
44
|
metrics = %w(flay flog:all reek roodi saikuro)
|
@@ -70,10 +48,10 @@ task :ci do
|
|
70
48
|
mv "tmp/metric_fu", "/var/www/integrity-metrics"
|
71
49
|
|
72
50
|
File.open("/var/www/integrity-metrics/index.html", "w") { |f|
|
73
|
-
f
|
51
|
+
f.puts "<ul>"
|
74
52
|
metrics.map { |m| m.split(":").first }.each { |m|
|
75
|
-
f
|
53
|
+
f.puts %Q(<li><a href="/#{m}">#{m}</a></li>)
|
76
54
|
}
|
77
|
-
f
|
55
|
+
f.puts "</ul>"
|
78
56
|
}
|
79
57
|
end
|
data/integrity.gemspec
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = "integrity"
|
3
|
-
s.version = "0.1.9.
|
4
|
-
s.date = "2009-
|
3
|
+
s.version = "0.1.9.3"
|
4
|
+
s.date = "2009-04-06"
|
5
5
|
|
6
6
|
s.description = "Your Friendly Continuous Integration server. Easy, fun and painless!"
|
7
7
|
s.summary = "The easy and fun Continuous Integration server"
|
@@ -21,7 +21,7 @@ Gem::Specification.new do |s|
|
|
21
21
|
s.add_dependency "sinatra", [">= 0.9.1.1"]
|
22
22
|
s.add_dependency "sinatra-authorization"
|
23
23
|
s.add_dependency "haml", [">= 2.0.0"]
|
24
|
-
s.add_dependency "data_mapper", ["
|
24
|
+
s.add_dependency "data_mapper", ["= 0.9.11"]
|
25
25
|
s.add_dependency "uuidtools" # required by dm-types
|
26
26
|
s.add_dependency "bcrypt-ruby" # required by dm-types
|
27
27
|
s.add_dependency "json"
|
@@ -35,6 +35,7 @@ Gem::Specification.new do |s|
|
|
35
35
|
s.add_development_dependency "dm-sweatshop"
|
36
36
|
s.add_development_dependency "ParseTree" # required by dm-sweatshop
|
37
37
|
s.add_development_dependency "jeremymcanally-context"
|
38
|
+
s.add_development_dependency "jeremymcanally-matchy"
|
38
39
|
s.add_development_dependency "jeremymcanally-pending"
|
39
40
|
s.add_development_dependency "foca-storyteller"
|
40
41
|
end
|
@@ -42,7 +43,7 @@ Gem::Specification.new do |s|
|
|
42
43
|
s.files = %w[
|
43
44
|
.gitignore
|
44
45
|
CHANGES
|
45
|
-
README.
|
46
|
+
README.md
|
46
47
|
Rakefile
|
47
48
|
bin/integrity
|
48
49
|
config/config.sample.ru
|
@@ -75,6 +76,8 @@ lib/integrity/notifier/test.rb
|
|
75
76
|
lib/integrity/notifier/test/fixtures.rb
|
76
77
|
lib/integrity/notifier/test/hpricot_matcher.rb
|
77
78
|
lib/integrity/project.rb
|
79
|
+
lib/integrity/project/notifiers.rb
|
80
|
+
lib/integrity/project/push.rb
|
78
81
|
lib/integrity/project_builder.rb
|
79
82
|
lib/integrity/scm.rb
|
80
83
|
lib/integrity/scm/git.rb
|
@@ -93,7 +96,6 @@ test/acceptance/error_page_test.rb
|
|
93
96
|
test/acceptance/installer_test.rb
|
94
97
|
test/acceptance/manual_build_project_test.rb
|
95
98
|
test/acceptance/not_found_page_test.rb
|
96
|
-
test/acceptance/notifier_test.rb
|
97
99
|
test/acceptance/project_syndication_test.rb
|
98
100
|
test/acceptance/stylesheet_test.rb
|
99
101
|
test/acceptance/unauthorized_page_test.rb
|
@@ -101,19 +103,20 @@ test/helpers.rb
|
|
101
103
|
test/helpers/acceptance.rb
|
102
104
|
test/helpers/acceptance/email_notifier.rb
|
103
105
|
test/helpers/acceptance/git_helper.rb
|
106
|
+
test/helpers/acceptance/notifier_helper.rb
|
104
107
|
test/helpers/acceptance/textfile_notifier.rb
|
105
108
|
test/helpers/expectations.rb
|
106
109
|
test/helpers/expectations/be_a.rb
|
107
110
|
test/helpers/expectations/change.rb
|
108
111
|
test/helpers/expectations/have.rb
|
109
112
|
test/helpers/expectations/predicates.rb
|
110
|
-
test/helpers/fixtures.rb
|
111
113
|
test/helpers/initial_migration_fixture.sql
|
112
114
|
test/unit/build_test.rb
|
113
115
|
test/unit/commit_test.rb
|
114
116
|
test/unit/helpers_test.rb
|
115
117
|
test/unit/integrity_test.rb
|
116
118
|
test/unit/migrations_test.rb
|
119
|
+
test/unit/notifier/base_test.rb
|
117
120
|
test/unit/notifier/test_test.rb
|
118
121
|
test/unit/notifier_test.rb
|
119
122
|
test/unit/project_builder_test.rb
|
data/lib/integrity.rb
CHANGED
@@ -69,9 +69,9 @@ module Integrity
|
|
69
69
|
end
|
70
70
|
private_class_method :logger
|
71
71
|
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
end
|
72
|
+
class LogFormatter < Logger::Formatter
|
73
|
+
def call(severity, time, progname, msg)
|
74
|
+
time.strftime("[%H:%M:%S] ") + msg2str(msg) + "\n"
|
76
75
|
end
|
76
|
+
end
|
77
77
|
end
|
data/lib/integrity/app.rb
CHANGED
@@ -121,7 +121,7 @@ module Integrity
|
|
121
121
|
get "/:project/commits/:commit" do
|
122
122
|
login_required unless current_project.public?
|
123
123
|
|
124
|
-
show :build, :title => ["projects", current_project.permalink, current_commit.
|
124
|
+
show :build, :title => ["projects", current_project.permalink, current_commit.short_identifier]
|
125
125
|
end
|
126
126
|
|
127
127
|
get "/:project/builds/:commit" do
|
data/lib/integrity/build.rb
CHANGED
@@ -11,12 +11,20 @@ module Integrity
|
|
11
11
|
property :started_at, DateTime
|
12
12
|
property :completed_at, DateTime
|
13
13
|
|
14
|
-
belongs_to :commit, :class_name => "Integrity::Commit"
|
14
|
+
belongs_to :commit, :class_name => "Integrity::Commit",
|
15
|
+
:child_key => [:commit_id]
|
15
16
|
|
16
17
|
def self.pending
|
17
18
|
all(:started_at => nil)
|
18
19
|
end
|
19
20
|
|
21
|
+
def self.queue(commit)
|
22
|
+
commit.update_attributes(:build => new)
|
23
|
+
|
24
|
+
# Build on foreground (this will move away, I promise)
|
25
|
+
ProjectBuilder.build(commit)
|
26
|
+
end
|
27
|
+
|
20
28
|
def pending?
|
21
29
|
started_at.nil?
|
22
30
|
end
|
@@ -40,45 +48,5 @@ module Integrity
|
|
40
48
|
def complete!(time=Time.now)
|
41
49
|
self.completed_at = time
|
42
50
|
end
|
43
|
-
|
44
|
-
#
|
45
|
-
# Deprecated methods
|
46
|
-
#
|
47
|
-
def short_commit_identifier
|
48
|
-
warn "Build#short_commit_identifier is deprecated, use Commit#short_identifier (#{caller[0]})"
|
49
|
-
commit.short_identifier
|
50
|
-
end
|
51
|
-
|
52
|
-
def commit_identifier
|
53
|
-
warn "Build#commit_identifier is deprecated, use Commit#identifier (#{caller[0]})"
|
54
|
-
commit.identifier
|
55
|
-
end
|
56
|
-
|
57
|
-
def commit_author
|
58
|
-
warn "Build#commit_author is deprecated, use Commit#author (#{caller[0]})"
|
59
|
-
commit.author
|
60
|
-
end
|
61
|
-
|
62
|
-
def commit_message
|
63
|
-
warn "Build#commit_message is deprecated, use Commit#message (#{caller[0]})"
|
64
|
-
commit.message
|
65
|
-
end
|
66
|
-
|
67
|
-
def commited_at
|
68
|
-
warn "Build#commited_at is deprecated, use Commit#committed_at (#{caller[0]})"
|
69
|
-
commit.committed_at
|
70
|
-
end
|
71
|
-
|
72
|
-
def project_id
|
73
|
-
warn "Build#project_id is deprecated, use Commit#project_id (#{caller[0]})"
|
74
|
-
commit.project_id
|
75
|
-
end
|
76
|
-
|
77
|
-
def commit_metadata
|
78
|
-
warn "Build#commit_metadata is deprecated, use the different methods in Commit instead (#{caller[0]})"
|
79
|
-
{ :message => commit.message,
|
80
|
-
:author => commit.author,
|
81
|
-
:date => commit.committed_at }
|
82
|
-
end
|
83
51
|
end
|
84
52
|
end
|
data/lib/integrity/commit.rb
CHANGED
@@ -10,15 +10,19 @@ module Integrity
|
|
10
10
|
property :created_at, DateTime
|
11
11
|
property :updated_at, DateTime
|
12
12
|
|
13
|
-
has 1, :build, :class_name => "Integrity::Build",
|
14
|
-
|
13
|
+
has 1, :build, :class_name => "Integrity::Build",
|
14
|
+
:order => [:created_at.desc]
|
15
|
+
|
16
|
+
belongs_to :project, :class_name => "Integrity::Project",
|
17
|
+
:child_key => [:project_id]
|
15
18
|
|
16
19
|
def message
|
17
20
|
attribute_get(:message) || "<Commit message not loaded>"
|
18
21
|
end
|
19
22
|
|
20
23
|
def author
|
21
|
-
attribute_get(:author) ||
|
24
|
+
attribute_get(:author) ||
|
25
|
+
Author.load('<Commit author not loaded> <<Commit author not loaded>>', :author)
|
22
26
|
end
|
23
27
|
|
24
28
|
def short_identifier
|
@@ -52,20 +56,5 @@ module Integrity
|
|
52
56
|
def output
|
53
57
|
build && build.output
|
54
58
|
end
|
55
|
-
|
56
|
-
def queue_build
|
57
|
-
self.build = Build.create(:commit_id => id)
|
58
|
-
self.save
|
59
|
-
|
60
|
-
# Build on foreground (this will move away, I promise)
|
61
|
-
ProjectBuilder.new(project).build(self)
|
62
|
-
end
|
63
|
-
|
64
|
-
# Deprecation layer
|
65
|
-
alias :short_commit_identifier :short_identifier
|
66
|
-
alias :commit_identifier :identifier
|
67
|
-
alias :commit_author :author
|
68
|
-
alias :commit_message :message
|
69
|
-
alias :commited_at :committed_at
|
70
59
|
end
|
71
60
|
end
|
@@ -16,12 +16,13 @@ module Integrity
|
|
16
16
|
attrs.update(extras)
|
17
17
|
end
|
18
18
|
|
19
|
-
def notifier_form
|
20
|
-
|
21
|
-
:
|
22
|
-
|
23
|
-
|
24
|
-
|
19
|
+
def notifier_form
|
20
|
+
Notifier.available.each_pair { |name, klass|
|
21
|
+
haml_concat haml(klass.to_haml, :layout => :notifier, :locals => {
|
22
|
+
:notifier => name,
|
23
|
+
:enabled => current_project.notifies?(name),
|
24
|
+
:config => current_project.config_for(name) })
|
25
|
+
}
|
25
26
|
end
|
26
27
|
end
|
27
28
|
end
|
@@ -11,7 +11,7 @@ module Integrity
|
|
11
11
|
|
12
12
|
def update_notifiers_of(project)
|
13
13
|
if params["notifiers"]
|
14
|
-
project.
|
14
|
+
project.update_notifiers(params["enabled_notifiers"] || [], params["notifiers"])
|
15
15
|
end
|
16
16
|
end
|
17
17
|
end
|
data/lib/integrity/installer.rb
CHANGED
@@ -21,7 +21,6 @@ module Integrity
|
|
21
21
|
create_dir_structure
|
22
22
|
copy_template_files
|
23
23
|
edit_template_files
|
24
|
-
migrate_db(root.join("config.yml"))
|
25
24
|
puts post_install_message
|
26
25
|
end
|
27
26
|
end
|
@@ -45,6 +44,7 @@ module Integrity
|
|
45
44
|
|
46
45
|
File.file?(options[:config].to_s) ?
|
47
46
|
Integrity.new(options[:config]) : Integrity.new
|
47
|
+
Integrity.config[:base_uri] = "http://0.0.0.0:#{options[:port]}"
|
48
48
|
|
49
49
|
DataMapper.auto_migrate!
|
50
50
|
|
@@ -109,6 +109,11 @@ EOF
|
|
109
109
|
<<EOF
|
110
110
|
Awesome! Integrity was installed successfully!
|
111
111
|
|
112
|
+
To complete the installation, please configure the `database_uri` in
|
113
|
+
#{root.join("config.yml")} and install the matching DataMapper adapter if
|
114
|
+
necessary. Then, run `integrity migrate_db #{root.join("config.yml")}
|
115
|
+
|
116
|
+
== Notifiers
|
112
117
|
If you want to enable notifiers, install the gems and then require them
|
113
118
|
in #{root}/config.ru
|
114
119
|
|
data/lib/integrity/migrations.rb
CHANGED
@@ -84,8 +84,8 @@ module Integrity
|
|
84
84
|
create_table :integrity_commits do
|
85
85
|
column :id, Integer, :serial => true
|
86
86
|
column :identifier, String, :nullable => false
|
87
|
-
column :message, String, :nullable =>
|
88
|
-
column :author, String, :nullable =>
|
87
|
+
column :message, String, :nullable => true, :length => 255
|
88
|
+
column :author, String, :nullable => true, :length => 255
|
89
89
|
column :committed_at, DateTime, :nullable => false
|
90
90
|
column :created_at, DateTime
|
91
91
|
column :updated_at, DateTime
|
@@ -136,5 +136,16 @@ module Integrity
|
|
136
136
|
end
|
137
137
|
end
|
138
138
|
end
|
139
|
+
|
140
|
+
migration 3, :add_enabled_column do
|
141
|
+
up do
|
142
|
+
modify_table(:integrity_notifiers) { add_column :enabled, Boolean }
|
143
|
+
end
|
144
|
+
|
145
|
+
down do
|
146
|
+
# TODO: sqlite doesn't support DROP COLUMN ...
|
147
|
+
# modify_table(:integrity_notifiers) { drop_column :enabled }
|
148
|
+
end
|
149
|
+
end
|
139
150
|
end
|
140
151
|
end
|
data/lib/integrity/notifier.rb
CHANGED
@@ -6,43 +6,39 @@ module Integrity
|
|
6
6
|
|
7
7
|
property :id, Integer, :serial => true
|
8
8
|
property :name, String, :nullable => false
|
9
|
-
property :
|
9
|
+
property :enabled, Boolean, :nullable => false, :default => false
|
10
|
+
property :config, Yaml, :nullable => false, :lazy => false
|
10
11
|
|
11
|
-
belongs_to :project, :class_name => "Integrity::Project"
|
12
|
+
belongs_to :project, :class_name => "Integrity::Project",
|
13
|
+
:child_key => [:project_id]
|
12
14
|
|
13
15
|
validates_is_unique :name, :scope => :project_id
|
14
16
|
validates_present :project_id
|
15
17
|
|
16
18
|
def self.available
|
17
|
-
|
19
|
+
@@_notifiers ||= {}
|
20
|
+
@@_notifiers
|
18
21
|
end
|
19
22
|
|
20
|
-
def self.
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
23
|
+
def self.register(klass)
|
24
|
+
raise ArgumentError unless valid?(klass)
|
25
|
+
|
26
|
+
available[klass.to_s.split(":").last] = klass
|
27
|
+
end
|
25
28
|
|
29
|
+
def self.valid?(notifier)
|
30
|
+
notifier.respond_to?(:to_haml) && notifier.respond_to?(:notify_of_build) &&
|
31
|
+
notifier != Notifier::Base
|
26
32
|
end
|
33
|
+
private_class_method :valid?
|
27
34
|
|
28
35
|
def notify_of_build(build)
|
29
36
|
to_const.notify_of_build(build, config)
|
30
37
|
end
|
31
38
|
|
32
39
|
private
|
33
|
-
|
34
40
|
def to_const
|
35
|
-
self.class.
|
36
|
-
end
|
37
|
-
|
38
|
-
def self.list_of_enabled_notifiers(names)
|
39
|
-
[*names].reject { |n| n.nil? }
|
40
|
-
end
|
41
|
-
private_class_method :list_of_enabled_notifiers
|
42
|
-
|
43
|
-
def self.valid_notifier?(notifier)
|
44
|
-
notifier.respond_to?(:to_haml) && notifier.respond_to?(:notify_of_build) && notifier != Notifier::Base
|
41
|
+
self.class.available[name]
|
45
42
|
end
|
46
|
-
private_class_method :valid_notifier?
|
47
43
|
end
|
48
44
|
end
|