heidi 0.0.3 → 0.0.4

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/Gemfile CHANGED
@@ -2,8 +2,6 @@ source "http://rubygems.org"
2
2
 
3
3
  gem "thin"
4
4
  gem "sinatra"
5
- # gem 'sinatra-assetpack'
6
- gem 'sinatra-assetpack', :require => 'sinatra/assetpack', :git => 'git://github.com/rstacruz/sinatra-assetpack.git'
7
5
  gem "simple_shell"
8
6
 
9
7
  group :development do
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/will-be used to do CI at OrganisedMinds.com
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.3
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 && project.integrate
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.3"
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-06"
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
@@ -31,9 +31,9 @@ class Heidi
31
31
  def load_hooks
32
32
  log :info, "Loading hooks"
33
33
  @hooks = {
34
+ :before => [],
34
35
  :build => [],
35
36
  :tests => [],
36
- :before => [],
37
37
  :success => [],
38
38
  :failure => [],
39
39
  }
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)
@@ -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
- # record the new succesful
37
- build.record(:success)
48
+ return failure if !run_hooks(:success)
38
49
 
39
50
  # create a tarball
40
- build.create_tar_ball
51
+ builder.create_tar_ball
41
52
 
42
- build.log :info, ("Integration took: %.2fs" % (Time.now - start))
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.3
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-06 00:00:00.000000000Z
12
+ date: 2012-02-07 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: thin
16
- requirement: &79065560 !ruby/object:Gem::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: *79065560
24
+ version_requirements: *88342980
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: sinatra
27
- requirement: &79065280 !ruby/object:Gem::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: *79065280
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: &79064650 !ruby/object:Gem::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: *79064650
46
+ version_requirements: *88342390
58
47
  - !ruby/object:Gem::Dependency
59
48
  name: rspec
60
- requirement: &79064400 !ruby/object:Gem::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: *79064400
57
+ version_requirements: *88342100
69
58
  - !ruby/object:Gem::Dependency
70
59
  name: rdoc
71
- requirement: &79064110 !ruby/object:Gem::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: *79064110
68
+ version_requirements: *88336620
80
69
  - !ruby/object:Gem::Dependency
81
70
  name: bundler
82
- requirement: &79063860 !ruby/object:Gem::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: *79063860
79
+ version_requirements: *88336290
91
80
  - !ruby/object:Gem::Dependency
92
81
  name: jeweler
93
- requirement: &79063620 !ruby/object:Gem::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: *79063620
90
+ version_requirements: *88335980
102
91
  - !ruby/object:Gem::Dependency
103
92
  name: rcov
104
- requirement: &79063320 !ruby/object:Gem::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: *79063320
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: -61331469
167
+ hash: 976853793
179
168
  required_rubygems_version: !ruby/object:Gem::Requirement
180
169
  none: false
181
170
  requirements: