sprinkle 0.1.4 → 0.1.5

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/CREDITS CHANGED
@@ -3,12 +3,14 @@
3
3
  Many thanks to the following people who have submitted ideas, patches, helped with testing
4
4
  and/or generally provided support to Sprinke, I really appreciate your help:
5
5
 
6
- Kristin Baumann (http://crafterm.net/kristin/blog/)
7
- Ben Schwarz (http://germanforblack.com/)
8
- Jim Freeze (http://www.artima.com/rubycs/articles/ruby_as_dslP.html)
9
- Matthew Tanase (http://www.slicehost.com)
10
- Jared Kuolt (http://www.slicehost.com)
11
- Jamis Buck (http://www.capify.org)
12
- Matt Allen (http://blog.allen.com.au)
13
- Eric Hodel (http://blog.segment7.net)
14
- Pete Yandell (http://notahat.com)
6
+ Kristin Baumann (http://crafterm.net/kristin/blog/)
7
+ Ben Schwarz (http://germanforblack.com/)
8
+ Jim Freeze (http://www.artima.com/rubycs/articles/ruby_as_dslP.html)
9
+ Matthew Tanase (http://www.slicehost.com)
10
+ Jared Kuolt (http://www.slicehost.com)
11
+ Jamis Buck (http://www.capify.org)
12
+ Matt Allen (http://blog.allen.com.au)
13
+ Eric Hodel (http://blog.segment7.net)
14
+ Pete Yandell (http://notahat.com)
15
+ Adam Meehan (http://duckpunching.com)
16
+ Mitchell Hashimoto (http://mitchellhashimoto.com)
data/Manifest.txt CHANGED
@@ -4,7 +4,6 @@ MIT-LICENSE
4
4
  Manifest.txt
5
5
  README.rdoc
6
6
  Rakefile
7
- TODO
8
7
  bin/sprinkle
9
8
  config/hoe.rb
10
9
  config/requirements.rb
@@ -37,7 +36,6 @@ lib/sprinkle/installers/source.rb
37
36
  lib/sprinkle/package.rb
38
37
  lib/sprinkle/policy.rb
39
38
  lib/sprinkle/script.rb
40
- lib/sprinkle/sequence.rb
41
39
  lib/sprinkle/version.rb
42
40
  script/destroy
43
41
  script/generate
@@ -55,7 +53,6 @@ spec/sprinkle/installers/source_spec.rb
55
53
  spec/sprinkle/package_spec.rb
56
54
  spec/sprinkle/policy_spec.rb
57
55
  spec/sprinkle/script_spec.rb
58
- spec/sprinkle/sequence_spec.rb
59
56
  spec/sprinkle/sprinkle_spec.rb
60
57
  sprinkle.gemspec
61
58
  tasks/deployment.rake
@@ -3,16 +3,21 @@ module Sprinkle
3
3
  class Apt < Installer
4
4
  attr_accessor :packages
5
5
 
6
- def initialize(parent, packages, &block)
6
+ def initialize(parent, *packages, &block)
7
7
  super parent, &block
8
- packages = [packages] unless packages.is_a? Array
8
+ packages.flatten!
9
+
10
+ options = { :dependencies_only => false }
11
+ options.update(packages.pop) if packages.last.is_a?(Hash)
12
+
13
+ @command = options[:dependencies_only] ? 'build-dep' : 'install'
9
14
  @packages = packages
10
15
  end
11
16
 
12
17
  protected
13
18
 
14
19
  def install_commands
15
- "DEBCONF_TERSE='yes' DEBIAN_PRIORITY='critical' DEBIAN_FRONTEND=noninteractive apt-get -qyu install #{@packages.join(' ')}"
20
+ "DEBCONF_TERSE='yes' DEBIAN_PRIORITY='critical' DEBIAN_FRONTEND=noninteractive apt-get -qyu #{@command} #{@packages.join(' ')}"
16
21
  end
17
22
 
18
23
  end
@@ -106,7 +106,7 @@ module Sprinkle
106
106
  end
107
107
 
108
108
  def build_dir
109
- "#{@options[:builds]}/#{base_dir}"
109
+ "#{@options[:builds]}/#{options[:custom_dir] || base_dir}"
110
110
  end
111
111
 
112
112
  def base_dir
@@ -115,6 +115,7 @@ module Sprinkle
115
115
  end
116
116
  raise "Unknown base path for source archive: #{@source}, please update code knowledge"
117
117
  end
118
+
118
119
  end
119
120
  end
120
121
  end
@@ -27,12 +27,12 @@ module Sprinkle
27
27
  self.instance_eval &block
28
28
  end
29
29
 
30
- def apt(*names)
31
- @installer = Sprinkle::Installers::Apt.new(self, *names)
30
+ def apt(*names, &block)
31
+ @installer = Sprinkle::Installers::Apt.new(self, *names, &block)
32
32
  end
33
33
 
34
- def rpm(*names)
35
- @installer = Sprinkle::Installers::Rpm.new(self, *names)
34
+ def rpm(*names, &block)
35
+ @installer = Sprinkle::Installers::Rpm.new(self, *names, &block)
36
36
  end
37
37
 
38
38
  def gem(name, options = {}, &block)
@@ -2,7 +2,7 @@ module Sprinkle #:nodoc:
2
2
  module VERSION #:nodoc:
3
3
  MAJOR = 0
4
4
  MINOR = 1
5
- TINY = 4
5
+ TINY = 5
6
6
 
7
7
  STRING = [MAJOR, MINOR, TINY].join('.')
8
8
  end
@@ -6,8 +6,8 @@ describe Sprinkle::Installers::Apt do
6
6
  @package = mock(Sprinkle::Package, :name => 'package')
7
7
  end
8
8
 
9
- def create_apt(debs, &block)
10
- Sprinkle::Installers::Apt.new(@package, debs, &block)
9
+ def create_apt(*debs, &block)
10
+ Sprinkle::Installers::Apt.new(@package, *debs, &block)
11
11
  end
12
12
 
13
13
  describe 'when created' do
@@ -24,6 +24,15 @@ describe Sprinkle::Installers::Apt do
24
24
 
25
25
  end
26
26
 
27
+ describe 'when created for dependencies only install' do
28
+
29
+ it 'should remove options from packages list' do
30
+ @installer = create_apt 'ruby', :dependencies_only => true
31
+ @installer.packages.should == [ 'ruby' ]
32
+ end
33
+
34
+ end
35
+
27
36
  describe 'during installation' do
28
37
 
29
38
  before do
@@ -49,5 +58,17 @@ describe Sprinkle::Installers::Apt do
49
58
  it 'should install a specific version if defined'
50
59
 
51
60
  end
61
+
62
+ describe 'during dependencies only installation' do
52
63
 
64
+ before do
65
+ @installer = create_apt 'ruby', :dependencies_only => true
66
+ @install_commands = @installer.send :install_commands
67
+ end
68
+
69
+ it 'should invoke the apt installer with build-dep command for all specified packages' do
70
+ @install_commands.should =~ /apt-get -qyu build-dep ruby/
71
+ end
72
+
73
+ end
53
74
  end
@@ -171,10 +171,10 @@ describe Sprinkle::Installers::Source do
171
171
  @installer.defaults(@deployment)
172
172
  end
173
173
 
174
- it 'should store the custom insatll commands' do
174
+ it 'should store the custom install commands' do
175
175
  @installer.options[:custom_install].should == 'ruby setup.rb'
176
176
  end
177
-
177
+
178
178
  it 'should identify as having a custom install command' do
179
179
  @installer.should be_custom_install
180
180
  end
@@ -188,12 +188,28 @@ describe Sprinkle::Installers::Source do
188
188
  end
189
189
 
190
190
  it 'should install the source using a custom installation command' do
191
- @installer.send(:custom_install_commands).should == [ "bash -c 'cd /usr/builds/ruby-1.8.6-p111 && ruby setup.rb >> package-install.log 2>&1'" ]
191
+ @installer.send(:custom_install_commands).first.should =~ /ruby setup.rb/
192
192
  end
193
-
193
+
194
194
  it 'should be run relative to the source build area' do
195
195
  @installer.send(:custom_install_commands).first.should =~ %r{cd /usr/builds/ruby-1.8.6-p111}
196
196
  end
197
+
198
+ describe 'with a customized directory' do
199
+
200
+ before do
201
+ @installer.options[:custom_dir] = 'test'
202
+ end
203
+
204
+ it 'should install the source from the custom dir path' do
205
+ @installer.send(:custom_install_commands).first.should =~ /test/
206
+ end
207
+
208
+ it 'should store the custom build dir path' do
209
+ @installer.options[:custom_dir].should == 'test'
210
+ end
211
+
212
+ end
197
213
 
198
214
  end
199
215
 
@@ -8,6 +8,24 @@ describe Sprinkle::Package do
8
8
  @empty = Proc.new { }
9
9
  @opts = { }
10
10
  end
11
+
12
+ # Kind of a messy way to do this but it works and DRYs out
13
+ # the specs. Checks to make sure an installer is receiving
14
+ # the block passed to it throught the package block.
15
+ def check_block_forwarding_on(installer)
16
+ eval(<<CODE)
17
+ pre_count = 0
18
+ lambda {
19
+ pkg = package @name do
20
+ #{installer} 'archive' do
21
+ pre :install, 'preOp'
22
+ end
23
+ end
24
+
25
+ pre_count = pkg.installer.instance_variable_get(:@pre)[:install].length
26
+ }.should change { pre_count }.by(1)
27
+ CODE
28
+ end
11
29
 
12
30
  describe 'when created' do
13
31
 
@@ -126,6 +144,10 @@ describe Sprinkle::Package do
126
144
  pkg.should respond_to(:source)
127
145
  pkg.installer.class.should == Sprinkle::Installers::Source
128
146
  end
147
+
148
+ it 'should forward block to installer superclass' do
149
+ check_block_forwarding_on(:source)
150
+ end
129
151
 
130
152
  it 'should automatically add a build essential recommendation' do
131
153
  pkg = package @name do
@@ -135,6 +157,18 @@ describe Sprinkle::Package do
135
157
  end
136
158
 
137
159
  end
160
+
161
+ describe 'with an apt installer' do
162
+ it 'should forward block to installer superclass' do
163
+ check_block_forwarding_on(:apt)
164
+ end
165
+ end
166
+
167
+ describe 'with an rpm installer' do
168
+ it 'should forward block to installer superclass' do
169
+ check_block_forwarding_on(:rpm)
170
+ end
171
+ end
138
172
 
139
173
  describe 'with an gem installer' do
140
174
 
@@ -144,6 +178,10 @@ describe Sprinkle::Package do
144
178
  end
145
179
  pkg.recommends.should include(:rubygems)
146
180
  end
181
+
182
+ it 'should forward block to installer superclass' do
183
+ check_block_forwarding_on(:gem)
184
+ end
147
185
 
148
186
  end
149
187
 
data/sprinkle.gemspec CHANGED
@@ -1,16 +1,16 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = %q{sprinkle}
3
- s.version = "0.1.4"
3
+ s.version = "0.1.5"
4
4
 
5
5
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
6
6
  s.authors = ["Marcus Crafter"]
7
- s.date = %q{2008-07-13}
7
+ s.date = %q{2008-07-16}
8
8
  s.default_executable = %q{sprinkle}
9
9
  s.description = %q{Ruby DSL based software provisioning tool}
10
10
  s.email = ["crafterm@redartisan.com"]
11
11
  s.executables = ["sprinkle"]
12
- s.extra_rdoc_files = ["History.txt", "Manifest.txt", "README.txt"]
13
- s.files = ["CREDITS", "History.txt", "MIT-LICENSE", "Manifest.txt", "README.txt", "Rakefile", "bin/sprinkle", "config/hoe.rb", "config/requirements.rb", "examples/merb/deploy.rb", "examples/rails/README", "examples/rails/deploy.rb", "examples/rails/packages/database.rb", "examples/rails/packages/essential.rb", "examples/rails/packages/rails.rb", "examples/rails/packages/search.rb", "examples/rails/packages/server.rb", "examples/rails/rails.rb", "examples/sprinkle/sprinkle.rb", "lib/sprinkle.rb", "lib/sprinkle/actors/capistrano.rb", "lib/sprinkle/actors/vlad.rb", "lib/sprinkle/deployment.rb", "lib/sprinkle/extensions/arbitrary_options.rb", "lib/sprinkle/extensions/array.rb", "lib/sprinkle/extensions/blank_slate.rb", "lib/sprinkle/extensions/dsl_accessor.rb", "lib/sprinkle/extensions/string.rb", "lib/sprinkle/extensions/symbol.rb", "lib/sprinkle/installers/apt.rb", "lib/sprinkle/installers/gem.rb", "lib/sprinkle/installers/installer.rb", "lib/sprinkle/installers/rake.rb", "lib/sprinkle/installers/rpm.rb", "lib/sprinkle/installers/source.rb", "lib/sprinkle/package.rb", "lib/sprinkle/policy.rb", "lib/sprinkle/script.rb", "lib/sprinkle/version.rb", "script/destroy", "script/generate", "spec/spec.opts", "spec/spec_helper.rb", "spec/sprinkle/actors/capistrano_spec.rb", "spec/sprinkle/deployment_spec.rb", "spec/sprinkle/extensions/array_spec.rb", "spec/sprinkle/extensions/string_spec.rb", "spec/sprinkle/installers/apt_spec.rb", "spec/sprinkle/installers/gem_spec.rb", "spec/sprinkle/installers/installer_spec.rb", "spec/sprinkle/installers/rpm_spec.rb", "spec/sprinkle/installers/source_spec.rb", "spec/sprinkle/package_spec.rb", "spec/sprinkle/policy_spec.rb", "spec/sprinkle/script_spec.rb", "spec/sprinkle/sprinkle_spec.rb", "sprinkle.gemspec", "tasks/deployment.rake", "tasks/environment.rake", "tasks/rspec.rake"]
12
+ s.extra_rdoc_files = ["History.txt", "Manifest.txt"]
13
+ s.files = ["CREDITS", "History.txt", "MIT-LICENSE", "Manifest.txt", "README.rdoc", "Rakefile", "bin/sprinkle", "config/hoe.rb", "config/requirements.rb", "examples/merb/deploy.rb", "examples/rails/README", "examples/rails/deploy.rb", "examples/rails/packages/database.rb", "examples/rails/packages/essential.rb", "examples/rails/packages/rails.rb", "examples/rails/packages/search.rb", "examples/rails/packages/server.rb", "examples/rails/rails.rb", "examples/sprinkle/sprinkle.rb", "lib/sprinkle.rb", "lib/sprinkle/actors/capistrano.rb", "lib/sprinkle/actors/vlad.rb", "lib/sprinkle/deployment.rb", "lib/sprinkle/extensions/arbitrary_options.rb", "lib/sprinkle/extensions/array.rb", "lib/sprinkle/extensions/blank_slate.rb", "lib/sprinkle/extensions/dsl_accessor.rb", "lib/sprinkle/extensions/string.rb", "lib/sprinkle/extensions/symbol.rb", "lib/sprinkle/installers/apt.rb", "lib/sprinkle/installers/gem.rb", "lib/sprinkle/installers/installer.rb", "lib/sprinkle/installers/rake.rb", "lib/sprinkle/installers/rpm.rb", "lib/sprinkle/installers/source.rb", "lib/sprinkle/package.rb", "lib/sprinkle/policy.rb", "lib/sprinkle/script.rb", "lib/sprinkle/version.rb", "script/destroy", "script/generate", "spec/spec.opts", "spec/spec_helper.rb", "spec/sprinkle/actors/capistrano_spec.rb", "spec/sprinkle/deployment_spec.rb", "spec/sprinkle/extensions/array_spec.rb", "spec/sprinkle/extensions/string_spec.rb", "spec/sprinkle/installers/apt_spec.rb", "spec/sprinkle/installers/gem_spec.rb", "spec/sprinkle/installers/installer_spec.rb", "spec/sprinkle/installers/rpm_spec.rb", "spec/sprinkle/installers/source_spec.rb", "spec/sprinkle/package_spec.rb", "spec/sprinkle/policy_spec.rb", "spec/sprinkle/script_spec.rb", "spec/sprinkle/sprinkle_spec.rb", "sprinkle.gemspec", "tasks/deployment.rake", "tasks/environment.rake", "tasks/rspec.rake"]
14
14
  s.has_rdoc = true
15
15
  s.homepage = %q{http://sprinkle.rubyforge.org}
16
16
  s.rdoc_options = ["--main", "README.txt"]
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sprinkle
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 0.1.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Marcus Crafter
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2008-07-14 00:00:00 +10:00
12
+ date: 2008-07-16 00:00:00 +10:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -69,7 +69,6 @@ files:
69
69
  - Manifest.txt
70
70
  - README.rdoc
71
71
  - Rakefile
72
- - TODO
73
72
  - bin/sprinkle
74
73
  - config/hoe.rb
75
74
  - config/requirements.rb
@@ -102,7 +101,6 @@ files:
102
101
  - lib/sprinkle/package.rb
103
102
  - lib/sprinkle/policy.rb
104
103
  - lib/sprinkle/script.rb
105
- - lib/sprinkle/sequence.rb
106
104
  - lib/sprinkle/version.rb
107
105
  - script/destroy
108
106
  - script/generate
@@ -120,7 +118,6 @@ files:
120
118
  - spec/sprinkle/package_spec.rb
121
119
  - spec/sprinkle/policy_spec.rb
122
120
  - spec/sprinkle/script_spec.rb
123
- - spec/sprinkle/sequence_spec.rb
124
121
  - spec/sprinkle/sprinkle_spec.rb
125
122
  - sprinkle.gemspec
126
123
  - tasks/deployment.rake
data/TODO DELETED
@@ -1,56 +0,0 @@
1
- Version 0.1 plan
2
- ================
3
-
4
- INSTALLER
5
- * Fix up apt so that we can handle it if it asks questions, or fail? Check with Ben
6
- * Support alternate gem package sources - DONE
7
- * MD5/SHA1 checking on the installation files?
8
-
9
- MISC
10
- * Growl support
11
- * Do a merb example
12
- * Fix up printing of output so that its nice and a bit more like ports - DONE
13
- * print ports style output for stages (installing, configuring, etc...)
14
- * Add an option to print the hierarchy tree of packages to be installed only - DONE
15
- * BlankSlate - active support has one
16
- * CREDITS file - DONE
17
- * Get #!/usr/bin/env sprinkle working - DONE
18
-
19
- OPERATING SYSTEM
20
- * OS abstraction
21
- * build essential on Ubuntu only for example
22
-
23
- TESTING
24
- * Test on a base system Ubuntu system - DONE
25
- * Multiple runs, check system that's partially installed - DONE
26
- * Resuming downloads with wget ok - DONE
27
-
28
- ERRORS
29
- * Need to think about handling errors nicely
30
- * Recovering from an error, and or successive runs of sprinkle
31
- * store installed state on the remote server so we can skip installed packages?
32
- * what about self healing things later? need to think about it
33
-
34
- DOCUMENTATION
35
- * Document the code somewhat, at least review that its all ok
36
- * Wiki
37
- * Home page somewhere? point to github
38
- * Blog post
39
- * Screencast - use that cool screenflow tool?
40
-
41
- Post Version 0.1 plan
42
- =====================
43
-
44
- CONFIGURATION
45
- * Think about it - talk to Lincoln and Ben
46
- * Use cap 2.3 send/download file helpers, might be useful somehow for transporting config files
47
-
48
- ACTOR
49
- * Investigate a pure net:ssh/gateway delivery mechanism, ie. without cap?
50
- * Generate a cap task file as output? not sure if people would be interested in this?
51
- * use ruby2ruby to generate the file, nice :)
52
-
53
- MISC
54
- * Slicehost API support for creating a slice on the way
55
- * active resource
56
- * SSH keys, have to deploy them somehow?
@@ -1,21 +0,0 @@
1
- module Sprinkle
2
- class Sequence
3
- attr_accessor :stages
4
-
5
- def initialize(&block)
6
- self.instance_eval &block if block
7
- end
8
-
9
- def method_missing(sym, *args, &block)
10
- @stages ||= ActiveSupport::OrderedHash.new
11
- @stages[sym] = block
12
- end
13
-
14
- def each(&block)
15
- @stages.each do |section, commands|
16
- block.call section, commands.call
17
- end
18
- end
19
-
20
- end
21
- end
@@ -1,44 +0,0 @@
1
- require File.dirname(__FILE__) + '/../spec_helper'
2
-
3
- describe Sprinkle::Sequence do
4
-
5
- before do
6
- @sequence = Sprinkle::Sequence.new do
7
- section1 do
8
- 'command1'
9
- end
10
-
11
- section2 do
12
- 'command2'
13
- end
14
- end
15
- end
16
-
17
- describe 'during initialization' do
18
-
19
- it 'should yield the block, storing all section definitions provided' do
20
- @sequence.stages.size.should == 2
21
- end
22
-
23
- end
24
-
25
- describe 'during iteration' do
26
-
27
- before do
28
- @stages = { }
29
- @sequence.each do |stage, commands|
30
- @stages[stage] = commands
31
- end
32
- end
33
-
34
- it 'should yield to a given block with the stage and commands for that stage' do
35
- @stages.size.should == 2
36
- @stages.keys.should include(:section1)
37
- @stages[:section1].should == 'command1'
38
- @stages.keys.should include(:section2)
39
- @stages[:section2].should == 'command2'
40
- end
41
-
42
- end
43
-
44
- end