heidi 0.0.3 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +0 -2
- data/Gemfile.lock +0 -14
- data/README.rdoc +87 -1
- data/VERSION +1 -1
- data/bin/heidi +15 -1
- data/heidi.gemspec +2 -5
- data/lib/heidi/build.rb +1 -1
- data/lib/heidi/builder.rb +10 -1
- data/lib/heidi/integrator.rb +17 -7
- metadata +19 -30
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,13 +1,3 @@
|
|
1
|
-
GIT
|
2
|
-
remote: git://github.com/rstacruz/sinatra-assetpack.git
|
3
|
-
revision: ab2a413026099492807bd19affd60bd3d3bc1cca
|
4
|
-
specs:
|
5
|
-
sinatra-assetpack (0.0.10)
|
6
|
-
jsmin
|
7
|
-
rack-test
|
8
|
-
sinatra
|
9
|
-
tilt (>= 1.3.0)
|
10
|
-
|
11
1
|
GEM
|
12
2
|
remote: http://rubygems.org/
|
13
3
|
specs:
|
@@ -20,13 +10,10 @@ GEM
|
|
20
10
|
git (>= 1.2.5)
|
21
11
|
rake
|
22
12
|
rdoc
|
23
|
-
jsmin (1.0.1)
|
24
13
|
json (1.6.5)
|
25
14
|
rack (1.4.1)
|
26
15
|
rack-protection (1.2.0)
|
27
16
|
rack
|
28
|
-
rack-test (0.6.1)
|
29
|
-
rack (>= 1.0)
|
30
17
|
rake (0.9.2.2)
|
31
18
|
rcov (0.9.10)
|
32
19
|
rdoc (3.12)
|
@@ -61,5 +48,4 @@ DEPENDENCIES
|
|
61
48
|
rspec (~> 2.8.0)
|
62
49
|
simple_shell
|
63
50
|
sinatra
|
64
|
-
sinatra-assetpack!
|
65
51
|
thin
|
data/README.rdoc
CHANGED
@@ -4,9 +4,95 @@ A Continious Integration thingy. Naive, and therefor called Heidi.
|
|
4
4
|
|
5
5
|
http://www.tv-nostalgie.de/sound/Heidi2.jpg
|
6
6
|
|
7
|
-
Heidi is still taking form and is
|
7
|
+
Heidi is still taking form and is used to do CI at OrganisedMinds.com
|
8
8
|
(http://organisedminds.com) - Why don't you sign up there? It's free!
|
9
9
|
|
10
|
+
== The basics
|
11
|
+
|
12
|
+
Install heidi
|
13
|
+
|
14
|
+
# gem install heidi
|
15
|
+
|
16
|
+
Create a new CI projects root
|
17
|
+
|
18
|
+
% heidi new ci_root
|
19
|
+
creating ci_root
|
20
|
+
creating ci_root/projects
|
21
|
+
creating ci_root/bin
|
22
|
+
creating ci_root/Gemfile
|
23
|
+
running bundle install
|
24
|
+
|
25
|
+
Create a first project to track
|
26
|
+
|
27
|
+
% cd ci_root
|
28
|
+
% heidi project simple_shell git://github.com/coffeeaddict/simple_shell
|
29
|
+
creating projects/simple_shell
|
30
|
+
creating projects/simple_shell/logs
|
31
|
+
creating projects/simple_shell/hooks/build
|
32
|
+
creating projects/simple_shell/hooks/tests
|
33
|
+
creating projects/simple_shell/hooks/failure
|
34
|
+
creating projects/simple_shell/hooks/success
|
35
|
+
creating projects/simple_shell/hooks/before
|
36
|
+
filling simple_shell cache
|
37
|
+
git clone git://github.com/coffeeaddict/simple_shell
|
38
|
+
setting the name of the project to: simple_shell
|
39
|
+
|
40
|
+
Now define some hooks in projects/simple_shell/hooks/tests
|
41
|
+
|
42
|
+
== Configuration
|
43
|
+
|
44
|
+
The configuration for each project is stored in it's cached clone.
|
45
|
+
(projects/$project/cached). This is done using git-config(1). See
|
46
|
+
projects/$project/cached/.git/config to find the heidi name.
|
47
|
+
|
48
|
+
The following are available for you to edit:
|
49
|
+
|
50
|
+
[heidi]
|
51
|
+
name = Human Readable Name
|
52
|
+
[heidi "build"]
|
53
|
+
branch = branch_to_use_for_integration
|
54
|
+
|
55
|
+
And these are being set (and used) by Heidi. Please dont edit (unless...)
|
56
|
+
|
57
|
+
[heidi]
|
58
|
+
commit = acc53b9c5
|
59
|
+
[heidi "build"]
|
60
|
+
status = failed
|
61
|
+
current = acc53b9c5
|
62
|
+
|
63
|
+
== Hooks
|
64
|
+
|
65
|
+
There is a hooks directory inside your projects directory, and it has the
|
66
|
+
following directories:
|
67
|
+
|
68
|
+
- before/
|
69
|
+
- build/
|
70
|
+
- test/
|
71
|
+
- success/
|
72
|
+
- failure/
|
73
|
+
|
74
|
+
If you place shell scripts in these directories and make them executable,
|
75
|
+
these scripts will be executed inside the build directory at a given time.
|
76
|
+
|
77
|
+
[before] Runs before the build starts
|
78
|
+
[build] After the git-project has been checked out at the right branch
|
79
|
+
[test] To perform tests. You must have at least 1 test hook
|
80
|
+
[success] Is run when the tests where performed in good order. Send huray
|
81
|
+
emails here
|
82
|
+
[failure] Is run when the tests failed. Send he-or-she-broke-it emails here.
|
83
|
+
|
84
|
+
== History
|
85
|
+
|
86
|
+
Heidi keeps history; projects/$projects/logs/* is where all the integration
|
87
|
+
attempts live. You can remove old attempts without any problem.
|
88
|
+
|
89
|
+
Any build is named after it's commit hash (5f6db178c for instance)
|
90
|
+
|
91
|
+
== Tar balls
|
92
|
+
|
93
|
+
Any successful integration attempt is stored in a tar-ball with the name of
|
94
|
+
the build (5f6db178c.tar.bz2) inside projects/$project/logs/$build/
|
95
|
+
|
10
96
|
== Contributing to heidi
|
11
97
|
|
12
98
|
* Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet.
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.4
|
data/bin/heidi
CHANGED
@@ -22,6 +22,16 @@ when "new"
|
|
22
22
|
shell.mkdir %W(-p #{for_a}/projects)
|
23
23
|
puts "creating #{for_a}/bin"
|
24
24
|
shell.mkdir %W(-p #{for_a}/bin)
|
25
|
+
puts "creating #{for_a}/Gemfile"
|
26
|
+
File.open("#{for_a}/Gemfile", File::CREAT|File::WRONLY) do |f|
|
27
|
+
f.puts 'source "http://rubygems.org"'
|
28
|
+
f.puts 'gem "heidi"'
|
29
|
+
end
|
30
|
+
|
31
|
+
puts "running bundle install"
|
32
|
+
shell.in(for_a) do |sh|
|
33
|
+
sh.bundle "install"
|
34
|
+
end
|
25
35
|
|
26
36
|
when "project"
|
27
37
|
check_heidi_root
|
@@ -68,7 +78,11 @@ when "integrate"
|
|
68
78
|
heidi = Heidi.new
|
69
79
|
heidi.projects.each do |project|
|
70
80
|
next if !for_a.nil? && project.name != for_a
|
71
|
-
project.fetch
|
81
|
+
project.fetch
|
82
|
+
msg = project.integrate
|
83
|
+
unless msg.nil?
|
84
|
+
$stderr.puts "#{project.name}: #{msg}"
|
85
|
+
end
|
72
86
|
end
|
73
87
|
|
74
88
|
end
|
data/heidi.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "heidi"
|
8
|
-
s.version = "0.0.
|
8
|
+
s.version = "0.0.4"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Hartog C. de Mik"]
|
12
|
-
s.date = "2012-02-
|
12
|
+
s.date = "2012-02-07"
|
13
13
|
s.description = "CI-Joe alike CI system called Heidi."
|
14
14
|
s.email = "hartog@organisedminds.com"
|
15
15
|
s.executables = ["heidi", "heidi_console", "heidi_cron", "heidi_web"]
|
@@ -69,7 +69,6 @@ Gem::Specification.new do |s|
|
|
69
69
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
70
70
|
s.add_runtime_dependency(%q<thin>, [">= 0"])
|
71
71
|
s.add_runtime_dependency(%q<sinatra>, [">= 0"])
|
72
|
-
s.add_runtime_dependency(%q<sinatra-assetpack>, [">= 0"])
|
73
72
|
s.add_runtime_dependency(%q<simple_shell>, [">= 0"])
|
74
73
|
s.add_development_dependency(%q<rspec>, ["~> 2.8.0"])
|
75
74
|
s.add_development_dependency(%q<rdoc>, ["~> 3.12"])
|
@@ -79,7 +78,6 @@ Gem::Specification.new do |s|
|
|
79
78
|
else
|
80
79
|
s.add_dependency(%q<thin>, [">= 0"])
|
81
80
|
s.add_dependency(%q<sinatra>, [">= 0"])
|
82
|
-
s.add_dependency(%q<sinatra-assetpack>, [">= 0"])
|
83
81
|
s.add_dependency(%q<simple_shell>, [">= 0"])
|
84
82
|
s.add_dependency(%q<rspec>, ["~> 2.8.0"])
|
85
83
|
s.add_dependency(%q<rdoc>, ["~> 3.12"])
|
@@ -90,7 +88,6 @@ Gem::Specification.new do |s|
|
|
90
88
|
else
|
91
89
|
s.add_dependency(%q<thin>, [">= 0"])
|
92
90
|
s.add_dependency(%q<sinatra>, [">= 0"])
|
93
|
-
s.add_dependency(%q<sinatra-assetpack>, [">= 0"])
|
94
91
|
s.add_dependency(%q<simple_shell>, [">= 0"])
|
95
92
|
s.add_dependency(%q<rspec>, ["~> 2.8.0"])
|
96
93
|
s.add_dependency(%q<rdoc>, ["~> 3.12"])
|
data/lib/heidi/build.rb
CHANGED
data/lib/heidi/builder.rb
CHANGED
@@ -39,7 +39,6 @@ class Heidi
|
|
39
39
|
return true
|
40
40
|
end
|
41
41
|
|
42
|
-
|
43
42
|
def setup_build_dir
|
44
43
|
if File.exists? build.build_root
|
45
44
|
build.log(:info, "Removing previous build")
|
@@ -81,6 +80,16 @@ class Heidi
|
|
81
80
|
return true
|
82
81
|
end
|
83
82
|
|
83
|
+
def create_tar_ball
|
84
|
+
shell = SimpleShell.new(build.root)
|
85
|
+
shell.mv %W(build, #{build.commit})
|
86
|
+
tar = shell.tar %W(-cjf #{build.commit}.tar.bz2 #{build.commit})
|
87
|
+
if tar.S?.to_i == 0
|
88
|
+
shell.rm %W(-rf #{build.commit}/)
|
89
|
+
else
|
90
|
+
build.log(:error, "Creating tar-ball failed: #{tar.err}")
|
91
|
+
end
|
92
|
+
end
|
84
93
|
|
85
94
|
def log(string)
|
86
95
|
build.logs["builder.log"].raw(string)
|
data/lib/heidi/integrator.rb
CHANGED
@@ -15,11 +15,24 @@ class Heidi
|
|
15
15
|
|
16
16
|
def failure
|
17
17
|
@failed = true
|
18
|
+
run_hooks(:failure)
|
19
|
+
build.log :info, ("Integration failed after: %.2fs" % (Time.now - @start))
|
20
|
+
|
18
21
|
build.record(:failure)
|
22
|
+
|
23
|
+
return false
|
24
|
+
end
|
25
|
+
|
26
|
+
def success
|
27
|
+
# record the new succesful
|
28
|
+
build.record(:success)
|
29
|
+
build.log :info, ("Integration took: %.2fs" % (Time.now - @start))
|
30
|
+
|
31
|
+
return true
|
19
32
|
end
|
20
33
|
|
21
34
|
def integrate
|
22
|
-
start = Time.now
|
35
|
+
@start = Time.now
|
23
36
|
build.lock
|
24
37
|
build.load_hooks
|
25
38
|
build.clean
|
@@ -31,16 +44,13 @@ class Heidi
|
|
31
44
|
|
32
45
|
return failure if !builder.build!
|
33
46
|
return failure if !tester.test!
|
34
|
-
return failure if !run_hooks(:after)
|
35
47
|
|
36
|
-
|
37
|
-
build.record(:success)
|
48
|
+
return failure if !run_hooks(:success)
|
38
49
|
|
39
50
|
# create a tarball
|
40
|
-
|
51
|
+
builder.create_tar_ball
|
41
52
|
|
42
|
-
|
43
|
-
return true
|
53
|
+
return success
|
44
54
|
|
45
55
|
rescue Exception => e
|
46
56
|
$stderr.puts e.message
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: heidi
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-02-
|
12
|
+
date: 2012-02-07 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: thin
|
16
|
-
requirement: &
|
16
|
+
requirement: &88342980 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *88342980
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: sinatra
|
27
|
-
requirement: &
|
27
|
+
requirement: &88342660 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,21 +32,10 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
36
|
-
- !ruby/object:Gem::Dependency
|
37
|
-
name: sinatra-assetpack
|
38
|
-
requirement: &79064970 !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: *79064970
|
35
|
+
version_requirements: *88342660
|
47
36
|
- !ruby/object:Gem::Dependency
|
48
37
|
name: simple_shell
|
49
|
-
requirement: &
|
38
|
+
requirement: &88342390 !ruby/object:Gem::Requirement
|
50
39
|
none: false
|
51
40
|
requirements:
|
52
41
|
- - ! '>='
|
@@ -54,10 +43,10 @@ dependencies:
|
|
54
43
|
version: '0'
|
55
44
|
type: :runtime
|
56
45
|
prerelease: false
|
57
|
-
version_requirements: *
|
46
|
+
version_requirements: *88342390
|
58
47
|
- !ruby/object:Gem::Dependency
|
59
48
|
name: rspec
|
60
|
-
requirement: &
|
49
|
+
requirement: &88342100 !ruby/object:Gem::Requirement
|
61
50
|
none: false
|
62
51
|
requirements:
|
63
52
|
- - ~>
|
@@ -65,10 +54,10 @@ dependencies:
|
|
65
54
|
version: 2.8.0
|
66
55
|
type: :development
|
67
56
|
prerelease: false
|
68
|
-
version_requirements: *
|
57
|
+
version_requirements: *88342100
|
69
58
|
- !ruby/object:Gem::Dependency
|
70
59
|
name: rdoc
|
71
|
-
requirement: &
|
60
|
+
requirement: &88336620 !ruby/object:Gem::Requirement
|
72
61
|
none: false
|
73
62
|
requirements:
|
74
63
|
- - ~>
|
@@ -76,10 +65,10 @@ dependencies:
|
|
76
65
|
version: '3.12'
|
77
66
|
type: :development
|
78
67
|
prerelease: false
|
79
|
-
version_requirements: *
|
68
|
+
version_requirements: *88336620
|
80
69
|
- !ruby/object:Gem::Dependency
|
81
70
|
name: bundler
|
82
|
-
requirement: &
|
71
|
+
requirement: &88336290 !ruby/object:Gem::Requirement
|
83
72
|
none: false
|
84
73
|
requirements:
|
85
74
|
- - ~>
|
@@ -87,10 +76,10 @@ dependencies:
|
|
87
76
|
version: 1.0.0
|
88
77
|
type: :development
|
89
78
|
prerelease: false
|
90
|
-
version_requirements: *
|
79
|
+
version_requirements: *88336290
|
91
80
|
- !ruby/object:Gem::Dependency
|
92
81
|
name: jeweler
|
93
|
-
requirement: &
|
82
|
+
requirement: &88335980 !ruby/object:Gem::Requirement
|
94
83
|
none: false
|
95
84
|
requirements:
|
96
85
|
- - ~>
|
@@ -98,10 +87,10 @@ dependencies:
|
|
98
87
|
version: 1.8.3
|
99
88
|
type: :development
|
100
89
|
prerelease: false
|
101
|
-
version_requirements: *
|
90
|
+
version_requirements: *88335980
|
102
91
|
- !ruby/object:Gem::Dependency
|
103
92
|
name: rcov
|
104
|
-
requirement: &
|
93
|
+
requirement: &88335610 !ruby/object:Gem::Requirement
|
105
94
|
none: false
|
106
95
|
requirements:
|
107
96
|
- - ! '>='
|
@@ -109,7 +98,7 @@ dependencies:
|
|
109
98
|
version: '0'
|
110
99
|
type: :development
|
111
100
|
prerelease: false
|
112
|
-
version_requirements: *
|
101
|
+
version_requirements: *88335610
|
113
102
|
description: CI-Joe alike CI system called Heidi.
|
114
103
|
email: hartog@organisedminds.com
|
115
104
|
executables:
|
@@ -175,7 +164,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
175
164
|
version: '0'
|
176
165
|
segments:
|
177
166
|
- 0
|
178
|
-
hash:
|
167
|
+
hash: 976853793
|
179
168
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
180
169
|
none: false
|
181
170
|
requirements:
|