devinstall 1.2.1 → 1.2.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +2 -0
- data/Rakefile +16 -1
- data/bin/pkg-tool +1 -3
- data/devinstall.gemspec +4 -2
- data/lib/devinstall.rb +0 -1
- data/lib/devinstall/cli.rb +61 -64
- data/lib/devinstall/pkg/pkg_rpm.rb +24 -0
- data/lib/devinstall/provider/provider_local.rb +38 -0
- data/lib/devinstall/settings.rb +16 -16
- data/lib/devinstall/version.rb +1 -1
- data/spec/assets/devinstall/debian/changelog +7 -0
- data/spec/assets/example_01.yml +73 -0
- data/spec/assets/example_02.yml +74 -0
- data/spec/spec_helper.rb +28 -0
- data/spec/support/01_settings_spec.rb +61 -0
- data/spec/support/02_pkg_spec.rb +44 -0
- data/spec/{provider_spec.rb → support/03_provider_spec.rb} +3 -3
- metadata +49 -11
- data/spec/pkg_spec.rb +0 -16
- data/spec/settings_spec.rb +0 -80
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4bb5beb672121e7653746c5657c2ab46bb7f92f0
|
4
|
+
data.tar.gz: f228e14e80ba1a181df53709035afda7831b0b3b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ff9e44b19f0197ade70359e1b34167bd5d112bf456b59d5ec20d580665360b764ab56cb6784f4825f6e440b54792105fa8571f22c3a08e18e008c86864cd6b54
|
7
|
+
data.tar.gz: 9000670caa9ab71c0240e950de774c0b416fc59002d7e7f5ac887511eb2531ef6aba8cf0fbba33c3b2d1cc3288a3e5fa7ff4d80b7fd6801ecb658609805a5fac
|
data/Gemfile
CHANGED
data/Rakefile
CHANGED
@@ -1 +1,16 @@
|
|
1
|
-
require
|
1
|
+
require 'bundler/gem_tasks'
|
2
|
+
require 'rspec/core/rake_task'
|
3
|
+
|
4
|
+
desc 'Run all examples'
|
5
|
+
RSpec::Core::RakeTask.new(:spec) do |t|
|
6
|
+
t.pattern = './spec/spec_helper.rb'
|
7
|
+
t.rspec_opts = %w{--colour --format documentation}
|
8
|
+
end
|
9
|
+
|
10
|
+
desc 'Run tests with SimpleCov'
|
11
|
+
task :coverage do
|
12
|
+
require 'simplecov'
|
13
|
+
require 'simplecov-gem-adapter'
|
14
|
+
SimpleCov.start 'gem'
|
15
|
+
Rake::Task[:spec].execute
|
16
|
+
end
|
data/bin/pkg-tool
CHANGED
data/devinstall.gemspec
CHANGED
@@ -20,7 +20,9 @@ Gem::Specification.new do |spec|
|
|
20
20
|
|
21
21
|
spec.add_development_dependency 'bundler'
|
22
22
|
spec.add_development_dependency 'rake'
|
23
|
-
spec.add_development_dependency 'getopt'
|
24
23
|
spec.add_development_dependency 'rspec'
|
25
|
-
spec.add_development_dependency '
|
24
|
+
spec.add_development_dependency 'simplecov'
|
25
|
+
spec.add_development_dependency 'simplecov-gem-adapter'
|
26
|
+
spec.add_dependency 'getopt'
|
27
|
+
spec.add_dependency 'commander'
|
26
28
|
end
|
data/lib/devinstall.rb
CHANGED
data/lib/devinstall/cli.rb
CHANGED
@@ -3,90 +3,87 @@ require 'getopt/long'
|
|
3
3
|
require 'devinstall/settings'
|
4
4
|
require 'commander/import'
|
5
5
|
|
6
|
-
|
6
|
+
program :name, 'DevInstall'
|
7
|
+
program :version, Devinstall::VERSION
|
8
|
+
program :description, 'Poor man builder/installer'
|
7
9
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
global_option('--config FILE' 'Configuration file to be used') do |file|
|
13
|
-
unless Devinstall::Settings.instance.load! file
|
14
|
-
puts "Couldn't find #{file}"
|
15
|
-
exit!
|
16
|
-
end
|
10
|
+
global_option('--config FILE' 'Configuration file to be used') do |file|
|
11
|
+
unless Devinstall::Settings.instance.load! file
|
12
|
+
puts "Couldn't find #{file}"
|
13
|
+
exit!
|
17
14
|
end
|
15
|
+
end
|
18
16
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
17
|
+
global_option('--verbose', 'Verbose output') { $verbose=true }
|
18
|
+
global_option('--dry-run', 'Dry-run; don\'t run commands, just pretend to') { $dry=true }
|
19
|
+
global_option('--type STRING', 'Package type (deb, rpm, tgz). Currently only deb')
|
20
|
+
global_option('--env STRING', 'Package environment to be built for')
|
23
21
|
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
end
|
28
|
-
puts "Couldn't find default config file and no --config option given at command line"
|
29
|
-
exit!
|
22
|
+
def load_defaults
|
23
|
+
%w(./devinstall.yml ./.devinstall.yml ~/.devinstall).each do |f|
|
24
|
+
Devinstall::Settings.instance.load! f and return true
|
30
25
|
end
|
26
|
+
puts "Couldn't find default config file and no --config option given at command line"
|
27
|
+
exit!
|
28
|
+
end
|
31
29
|
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
30
|
+
command :build do |c|
|
31
|
+
c.action do |args, options|
|
32
|
+
config=Devinstall::Settings.instance
|
33
|
+
load_defaults unless options.config
|
34
|
+
type = options.type ? options.type.to_sym : config.defaults(:type)
|
35
|
+
env = options.env ? options.env.to_sym : config.defaults(:env)
|
38
36
|
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
end
|
37
|
+
args.each do |p|
|
38
|
+
pk=Devinstall::Package.new(p, type, env)
|
39
|
+
pk.build
|
43
40
|
end
|
44
41
|
end
|
42
|
+
end
|
45
43
|
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
44
|
+
command :install do |c|
|
45
|
+
c.action do |args, options|
|
46
|
+
config=Devinstall::Settings.instance
|
47
|
+
load_defaults unless options.config
|
48
|
+
type = options.type ? options.type.to_sym : config.defaults(:type)
|
49
|
+
env = options.env ? options.env.to_sym : config.defaults(:env)
|
52
50
|
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
end
|
51
|
+
args.each do |p|
|
52
|
+
pk=Devinstall::Package.new(p, type, env)
|
53
|
+
pk.build
|
54
|
+
pk.install
|
58
55
|
end
|
59
56
|
end
|
57
|
+
end
|
60
58
|
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
59
|
+
command :test do |c|
|
60
|
+
c.action do |args, options|
|
61
|
+
config=Devinstall::Settings.instance
|
62
|
+
load_defaults unless options.config
|
63
|
+
type = options.type ? options.type.to_sym : config.defaults(:type)
|
64
|
+
env = options.env ? options.env.to_sym : config.defaults(:env)
|
67
65
|
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
end
|
66
|
+
args.each do |p|
|
67
|
+
pk=Devinstall::Package.new(p, type, env)
|
68
|
+
pk.run_tests
|
72
69
|
end
|
73
70
|
end
|
71
|
+
end
|
74
72
|
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
73
|
+
command :upload do |c|
|
74
|
+
c.action do |args, options|
|
75
|
+
config=Devinstall::Settings.instance
|
76
|
+
load_defaults unless options.config
|
77
|
+
type = options.type ? options.type.to_sym : config.defaults(:type)
|
78
|
+
env = options.env ? options.env.to_sym : config.defaults(:env)
|
81
79
|
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
end
|
80
|
+
args.each do |p|
|
81
|
+
pk=Devinstall::Package.new(p, type, env)
|
82
|
+
pk.build
|
83
|
+
pk.run_tests
|
84
|
+
pk.upload
|
88
85
|
end
|
89
86
|
end
|
90
|
-
|
91
87
|
end
|
92
88
|
|
89
|
+
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'devinstall/utils'
|
2
|
+
## Work in progress
|
3
|
+
module Pkg
|
4
|
+
module RpmWorking
|
5
|
+
# @type=:rpm
|
6
|
+
include Utils
|
7
|
+
|
8
|
+
def get_info(pkg, type, env)
|
9
|
+
config=Devinstall::Settings.instance
|
10
|
+
folder=config.local(:folder, pkg: pkg, type: type, env: env)
|
11
|
+
rpm_spec = File.expand_path "#{folder}/#{pkg}.rpm.spec"
|
12
|
+
unless File.exists? rpm_spec
|
13
|
+
exit! "No 'debian/changelog' found in specified :local:folder (#{folder})"
|
14
|
+
end
|
15
|
+
package_version = File.open(rpm_spec, 'r') { |f| f.gets.chomp.sub(/^.*\((.*)\).*$/, '\1') }
|
16
|
+
package_release = config.build(pkg: pkg, type: type, env: env)[:arch]
|
17
|
+
{version: package_version,
|
18
|
+
files: {rpm: "#{pkg}.#{package_version}.#{package_release}.rpm"},
|
19
|
+
to_install: [:rpm],
|
20
|
+
to_upload: [:rpm]
|
21
|
+
}
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require 'devinstall/utils'
|
2
|
+
require 'devinstall/settings'
|
3
|
+
|
4
|
+
module Provider
|
5
|
+
module Local
|
6
|
+
include Utils
|
7
|
+
|
8
|
+
SETTINGS = {
|
9
|
+
local: [:copy, :sudo],
|
10
|
+
}
|
11
|
+
|
12
|
+
def upload_sources(cfg, src, dst)
|
13
|
+
config =Devinstall::Settings.instance
|
14
|
+
copy_command=config.local[:copy]
|
15
|
+
command("#{copy_command} #{src} #{dst}") unless src == dst
|
16
|
+
end
|
17
|
+
|
18
|
+
def download_file(cfg, file, local)
|
19
|
+
config=Devinstall::Settings.instance
|
20
|
+
copy_command=config.local[:copy]
|
21
|
+
command("#{copy_command} #{cfg[:target]}/#{file.to_s} #{local}")
|
22
|
+
end
|
23
|
+
|
24
|
+
def upload_file(cfg, file, local)
|
25
|
+
config=Devinstall::Settings.instance
|
26
|
+
copy_command=config.local[:copy]
|
27
|
+
command("#{copy_command} #{local}/#{file} #{cfg[:folder]}")
|
28
|
+
end
|
29
|
+
|
30
|
+
def exec_command(cfg, command)
|
31
|
+
config=Devinstall::Settings.instance
|
32
|
+
sudo=config.local[:sudo]
|
33
|
+
command("#{sudo} #{command}")
|
34
|
+
end
|
35
|
+
|
36
|
+
end #Local
|
37
|
+
end #Provider
|
38
|
+
|
data/lib/devinstall/settings.rb
CHANGED
@@ -53,31 +53,31 @@ module Devinstall
|
|
53
53
|
end ## Class Action
|
54
54
|
|
55
55
|
def load! (filename)
|
56
|
-
if
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
SETTINGS.merge! data, &merger
|
56
|
+
if FILES.include? filename
|
57
|
+
true
|
58
|
+
else
|
59
|
+
FILES << filename
|
60
|
+
data = YAML::load_file(filename).deep_symbolize
|
61
|
+
merger = proc do |_, v1, v2|
|
62
|
+
Hash === v1 && Hash === v2 ? v1.merge(v2, &merger) : v2
|
64
63
|
end
|
65
|
-
|
64
|
+
SETTINGS.merge! data, &merger
|
65
|
+
end if File.exist?(File.expand_path(filename))
|
66
66
|
end
|
67
67
|
|
68
68
|
def method_missing (method, *args)
|
69
69
|
raise UnknownKeyError, "Undefined section '#{method}'" unless method_defined? method
|
70
70
|
key = (args.shift or {})
|
71
71
|
rest = (Hash === key) ? key : (args.shift or {})
|
72
|
-
pkg
|
72
|
+
pkg = rest[:pkg]
|
73
73
|
if pkg.nil?
|
74
|
-
|
75
|
-
|
74
|
+
raise UnknownKeyError, "Unknown key #{key}" unless key_defined? method, key
|
75
|
+
return SETTINGS[method][key] rescue raise "#{method}: Package must be defined"
|
76
76
|
end
|
77
77
|
type = rest[:type] || defaults(:type)
|
78
78
|
env = rest[:env] || defaults(:env)
|
79
79
|
return Action.new(method, pkg, type, env) if Hash === key
|
80
|
-
raise UnknownKeyError, "Unknown key #{key}" unless key_defined? method,key
|
80
|
+
raise UnknownKeyError, "Unknown key #{key}" unless key_defined? method, key
|
81
81
|
global_or_local(method, key, pkg, type, env) or
|
82
82
|
raise KeyNotDefinedError, "Undefined key '#{method}:#{key}' or alternate for ['#{pkg}' '#{type}' '#{env}']"
|
83
83
|
end
|
@@ -116,14 +116,14 @@ module Devinstall
|
|
116
116
|
def key_defined?(method, key)
|
117
117
|
method, key = (method.to_sym rescue method), (key.to_sym rescue key)
|
118
118
|
method_defined? method and
|
119
|
-
|
120
|
-
PROVIDERS.inject(false){|res,(_,v)| res or (v[method].include? key rescue false)}
|
119
|
+
(MDEFS[method].include? key rescue false) or
|
120
|
+
PROVIDERS.inject(false) { |res, (_, v)| res or (v[method].include? key rescue false) }
|
121
121
|
end
|
122
122
|
|
123
123
|
def method_defined?(method)
|
124
124
|
method = (method.to_sym rescue method)
|
125
125
|
(MDEFS.has_key?(method) or
|
126
|
-
PROVIDERS.inject(false){|res,(k,_)| res or PROVIDERS[k].has_key? method}) and
|
126
|
+
PROVIDERS.inject(false) { |res, (k, _)| res or PROVIDERS[k].has_key? method }) and
|
127
127
|
SETTINGS.has_key? method
|
128
128
|
end
|
129
129
|
|
data/lib/devinstall/version.rb
CHANGED
@@ -0,0 +1,73 @@
|
|
1
|
+
ssh:
|
2
|
+
rsync: /usr/bin/rsync
|
3
|
+
scp: /usr/bin/scp
|
4
|
+
sudo: sshsudo
|
5
|
+
ssh: /usr/bin/ssh
|
6
|
+
defaults:
|
7
|
+
package: devinstall
|
8
|
+
# env: dev
|
9
|
+
type: deb
|
10
|
+
tests:
|
11
|
+
# dev is the environment
|
12
|
+
provider: ssh
|
13
|
+
host: dboca.dev.local
|
14
|
+
folder: rs
|
15
|
+
target: rs ## this is a new addition
|
16
|
+
user: dboca
|
17
|
+
command: "cd %f && make devtest"
|
18
|
+
local:
|
19
|
+
# folder - source folder
|
20
|
+
# temp - temporary folder
|
21
|
+
folder: ~/projects/devinstall/spec/assets
|
22
|
+
temp: ~/.tmp
|
23
|
+
build:
|
24
|
+
# host - build machine
|
25
|
+
# folder - rsync to?
|
26
|
+
# target - the folder where packages will be generated (defaults to folder)
|
27
|
+
# user - for ssh / rsync
|
28
|
+
# arch is the architecture for the generated package (like amd64 or i686)
|
29
|
+
# provider can be ssh or local (in the future vagrant and openstack)
|
30
|
+
# note: the ssh in provider have nothing to do with ssh command in base
|
31
|
+
provider: ssh
|
32
|
+
user: dboca
|
33
|
+
host: vm-dboca.dev.local
|
34
|
+
folder: rs
|
35
|
+
target: rs
|
36
|
+
arch: all
|
37
|
+
type: deb
|
38
|
+
install:
|
39
|
+
# host - dev/prod deploy and install host
|
40
|
+
# user - for scp / ssh / rsync (defaults to base[user])
|
41
|
+
# environment - live/qa/dev/...
|
42
|
+
provider: ssh ## Not implemented but compulsory for build, install, repos, tests
|
43
|
+
user: dboca
|
44
|
+
host:
|
45
|
+
- server1.lan
|
46
|
+
- server2.lan
|
47
|
+
folder: /home/dboca ## folder for scp/dpkg -i
|
48
|
+
type: deb
|
49
|
+
arch: all
|
50
|
+
repos:
|
51
|
+
# for repository deployment
|
52
|
+
# in a repository should be all packages for all architectures so we don't have an 'arch:' field
|
53
|
+
provider: ssh
|
54
|
+
user: dboca
|
55
|
+
host: dboca.repo.lan
|
56
|
+
folder: /srv/repo/incoming
|
57
|
+
type: deb
|
58
|
+
packages:
|
59
|
+
devinstall:
|
60
|
+
# might contain all the sections above (local, build, install, repos, tests)
|
61
|
+
# type:build:command and type:install:command are mandatory
|
62
|
+
# in build_command the folowing expansions are made:
|
63
|
+
# %f build[folder]
|
64
|
+
# %t build[target]
|
65
|
+
# %p package (current package)
|
66
|
+
# %T type (deb, rpm, tar.gz ,...)
|
67
|
+
# %a only make sense for install and is the installed file
|
68
|
+
deb:
|
69
|
+
build:
|
70
|
+
command: "cd %f/%p && dpkg-buildpackage"
|
71
|
+
install:
|
72
|
+
command: "dpkg -i %a"
|
73
|
+
|
@@ -0,0 +1,74 @@
|
|
1
|
+
ssh:
|
2
|
+
rsync: /usr/bin/rsync
|
3
|
+
scp: /usr/bin/scp
|
4
|
+
sudo: sshsudo
|
5
|
+
ssh: /usr/bin/ssh
|
6
|
+
defaults:
|
7
|
+
package: devinstall
|
8
|
+
# env: dev
|
9
|
+
type: deb
|
10
|
+
tests:
|
11
|
+
# dev is the environment
|
12
|
+
# provider: ssh
|
13
|
+
dev:
|
14
|
+
host: dboca.dev.local
|
15
|
+
folder: rs
|
16
|
+
target: rs ## this is a new addition
|
17
|
+
user: dboca
|
18
|
+
# command: "cd %f && make devtest"
|
19
|
+
local:
|
20
|
+
# folder - source folder
|
21
|
+
# temp - temporary folder
|
22
|
+
folder: ~/projects/devinstall/spec/assets
|
23
|
+
temp: ~/.tmp
|
24
|
+
build:
|
25
|
+
# host - build machine
|
26
|
+
# folder - rsync to?
|
27
|
+
# target - the folder where packages will be generated (defaults to folder)
|
28
|
+
# user - for ssh / rsync
|
29
|
+
# arch is the architecture for the generated package (like amd64 or i686)
|
30
|
+
# provider can be ssh or local (in the future vagrant and openstack)
|
31
|
+
# note: the ssh in provider have nothing to do with ssh command in base
|
32
|
+
provider: local
|
33
|
+
user: dboca
|
34
|
+
host: vm-dboca.dev.local
|
35
|
+
folder: rs
|
36
|
+
target: rs
|
37
|
+
arch: all
|
38
|
+
type: deb
|
39
|
+
install:
|
40
|
+
# host - dev/prod deploy and install host
|
41
|
+
# user - for scp / ssh / rsync (defaults to base[user])
|
42
|
+
# environment - live/qa/dev/...
|
43
|
+
provider: ssh ## Not implemented but compulsory for build, install, repos, tests
|
44
|
+
user: dboca
|
45
|
+
host:
|
46
|
+
- server1.lan
|
47
|
+
- server2.lan
|
48
|
+
folder: /home/dboca ## folder for scp/dpkg -i
|
49
|
+
type: deb
|
50
|
+
arch: all
|
51
|
+
repos:
|
52
|
+
# for repository deployment
|
53
|
+
# in a repository should be all packages for all architectures so we don't have an 'arch:' field
|
54
|
+
provider: ssh
|
55
|
+
user: dboca
|
56
|
+
host: dboca.repo.lan
|
57
|
+
folder: /srv/repo/incoming
|
58
|
+
type: deb
|
59
|
+
packages:
|
60
|
+
devinstall:
|
61
|
+
# might contain all the sections above (local, build, install, repos, tests)
|
62
|
+
# type:build:command and type:install:command are mandatory
|
63
|
+
# in build_command the folowing expansions are made:
|
64
|
+
# %f build[folder]
|
65
|
+
# %t build[target]
|
66
|
+
# %p package (current package)
|
67
|
+
# %T type (deb, rpm, tar.gz ,...)
|
68
|
+
# %a only make sense for install and is the installed file
|
69
|
+
deb:
|
70
|
+
build:
|
71
|
+
command: "cd %f/%p && dpkg-buildpackage"
|
72
|
+
install:
|
73
|
+
command: "dpkg -i %a"
|
74
|
+
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'devinstall/settings'
|
2
|
+
|
3
|
+
def clean_config
|
4
|
+
Devinstall::Settings::FILES.clear
|
5
|
+
Devinstall::Settings::SETTINGS.clear
|
6
|
+
Devinstall::Settings::PROVIDERS.clear
|
7
|
+
end
|
8
|
+
|
9
|
+
def capture_output
|
10
|
+
old_output=$stdout
|
11
|
+
$stdout =StringIO.new
|
12
|
+
yield
|
13
|
+
res =$stdout.string
|
14
|
+
$stdout=old_output
|
15
|
+
res
|
16
|
+
end
|
17
|
+
|
18
|
+
RSpec.configure do |c|
|
19
|
+
c.before(:all) do
|
20
|
+
@config=Devinstall::Settings.instance
|
21
|
+
clean_config
|
22
|
+
@package, @type, @env, @action = :devinstall, :deb, nil, :install
|
23
|
+
$verbose =true
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
Dir[File.expand_path('../support/**/*_spec.rb', __FILE__)].sort.each { |f| require f }
|
28
|
+
|
@@ -0,0 +1,61 @@
|
|
1
|
+
require 'rspec'
|
2
|
+
require 'devinstall'
|
3
|
+
|
4
|
+
describe 'Settings' do
|
5
|
+
|
6
|
+
it 'should load an existig file' do
|
7
|
+
expect(@config.load!('./spec/assets/example_02.yml')).to be_true
|
8
|
+
end
|
9
|
+
|
10
|
+
it 'should not load an unexisting file' do
|
11
|
+
expect(@config.load!('doc/unexisting.yml')).to be_false
|
12
|
+
end
|
13
|
+
|
14
|
+
it 'should load at init' do
|
15
|
+
expect(@config).to be_an_instance_of(Devinstall::Settings)
|
16
|
+
[:defaults, :local, :build, :install, :tests, :repos].each do |p|
|
17
|
+
expect(@config.respond_to? p).to be_true
|
18
|
+
end # all sections loaded!
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'should have a method defaults' do
|
22
|
+
expect(@config.respond_to? :defaults).to be_true
|
23
|
+
end
|
24
|
+
|
25
|
+
it 'the method "defaults" should have only one argument' do
|
26
|
+
expect(@config.defaults(:type)).to eq 'deb'
|
27
|
+
end
|
28
|
+
|
29
|
+
it 'should instantiate a new "Action" when hashes are given' do
|
30
|
+
expect(@config.build(type: 'deb', env: 'dev', pkg: @package)).to be_an_instance_of(Devinstall::Settings::Action)
|
31
|
+
end
|
32
|
+
|
33
|
+
it 'should instantiata a new "Action" when partial hashes are given' do
|
34
|
+
expect(@config.build(pkg: @package)).to be_an_instance_of(Devinstall::Settings::Action)
|
35
|
+
end
|
36
|
+
|
37
|
+
it 'should raise "UnknownKeys" errors for unknown keys' do
|
38
|
+
expect { @config.defaults :none }.to raise_error(Devinstall::UnknownKeyError)
|
39
|
+
end
|
40
|
+
|
41
|
+
it 'should raise "KeyNotDefinedError" errors for undefined keys' do
|
42
|
+
expect { @config.tests(:provider, pkg: @package) }.to raise_error(Devinstall::KeyNotDefinedError)
|
43
|
+
end
|
44
|
+
|
45
|
+
it 'should produce a value if all arguments are valid' do
|
46
|
+
expect(@config.build(:command, pkg: @package)).to eq('cd %f/%p && dpkg-buildpackage')
|
47
|
+
end
|
48
|
+
|
49
|
+
describe 'Action' do
|
50
|
+
it 'should have a [] method' do
|
51
|
+
rr=@config.build(pkg: @package, type: @type, env: @env)
|
52
|
+
expect(rr[:target]).to eq('rs')
|
53
|
+
end
|
54
|
+
|
55
|
+
it 'should enumerate all defined values' do
|
56
|
+
ar=[]
|
57
|
+
@config.build(pkg: @package, type: @type, env: @env).each { |k, _| ar << k }
|
58
|
+
expect(ar.sort == [:folder, :command, :provider, :type, :arch, :target].sort).to be_true
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
require 'rspec'
|
2
|
+
require 'devinstall'
|
3
|
+
|
4
|
+
describe 'Packages' do
|
5
|
+
before(:all) do
|
6
|
+
Devinstall::Settings.instance.load! './spec/assets/example_01.yml' ## use defaults for type and env
|
7
|
+
end
|
8
|
+
|
9
|
+
it 'should include the correct file' do
|
10
|
+
pk=Devinstall::Package.new(@package, @type, @env)
|
11
|
+
expect(pk.singleton_class.include?(Pkg::Deb)).to be_true
|
12
|
+
end
|
13
|
+
|
14
|
+
describe 'pkg_deb' do
|
15
|
+
it 'should pretend to build a package' do
|
16
|
+
$dry=true
|
17
|
+
pk =Devinstall::Package.new(@package, @type, @env)
|
18
|
+
out = capture_output { pk.build(@package, @type, @env) }
|
19
|
+
expect(out).to match /^Building/
|
20
|
+
end
|
21
|
+
|
22
|
+
it 'should pretend to upload a package' do
|
23
|
+
$dry=true
|
24
|
+
pk =Devinstall::Package.new(@package, @type, @env)
|
25
|
+
out = capture_output { pk.upload(@package, @type, @env) }
|
26
|
+
expect(out).to match /^Upload/
|
27
|
+
end
|
28
|
+
|
29
|
+
it 'should pretend to test a package' do
|
30
|
+
$dry=true
|
31
|
+
pk =Devinstall::Package.new(@package, @type, @env)
|
32
|
+
out = capture_output { pk.run_tests(@package, @type, @env) }
|
33
|
+
expect(out).to match /^Running/
|
34
|
+
end
|
35
|
+
|
36
|
+
it 'should pretend to install a package' do
|
37
|
+
$dry=true
|
38
|
+
pk =Devinstall::Package.new(@package, @type, @env)
|
39
|
+
out = capture_output { pk.install(@package, @type, @env) }
|
40
|
+
expect(out).to match /^Installing/
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
44
|
+
end
|
@@ -2,9 +2,9 @@ require 'rspec'
|
|
2
2
|
require 'devinstall'
|
3
3
|
|
4
4
|
describe 'Provider' do
|
5
|
-
|
6
|
-
|
7
|
-
|
5
|
+
|
6
|
+
before(:all) do
|
7
|
+
Devinstall::Settings.instance.load! './spec/assets/example_01.yml' ## use defaults for type and env
|
8
8
|
end
|
9
9
|
|
10
10
|
it 'should load the correct (Provider::Ssh) plugin' do
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: devinstall
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.2.
|
4
|
+
version: 1.2.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dragos Boca
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-05-
|
11
|
+
date: 2013-05-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -39,7 +39,7 @@ dependencies:
|
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
42
|
+
name: rspec
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - '>='
|
@@ -53,7 +53,7 @@ dependencies:
|
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
56
|
+
name: simplecov
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
59
|
- - '>='
|
@@ -67,7 +67,7 @@ dependencies:
|
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
70
|
+
name: simplecov-gem-adapter
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
73
|
- - '>='
|
@@ -80,6 +80,34 @@ dependencies:
|
|
80
80
|
- - '>='
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: getopt
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - '>='
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :runtime
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - '>='
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: commander
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - '>='
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :runtime
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - '>='
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
83
111
|
description: package builder and installer
|
84
112
|
email:
|
85
113
|
- dboca@mail.com
|
@@ -102,14 +130,20 @@ files:
|
|
102
130
|
- lib/devinstall/deep_symbolize.rb
|
103
131
|
- lib/devinstall/package.rb
|
104
132
|
- lib/devinstall/pkg/pkg_deb.rb
|
133
|
+
- lib/devinstall/pkg/pkg_rpm.rb
|
105
134
|
- lib/devinstall/provider.rb
|
135
|
+
- lib/devinstall/provider/provider_local.rb
|
106
136
|
- lib/devinstall/provider/provider_ssh.rb
|
107
137
|
- lib/devinstall/settings.rb
|
108
138
|
- lib/devinstall/utils.rb
|
109
139
|
- lib/devinstall/version.rb
|
110
|
-
- spec/
|
111
|
-
- spec/
|
112
|
-
- spec/
|
140
|
+
- spec/assets/devinstall/debian/changelog
|
141
|
+
- spec/assets/example_01.yml
|
142
|
+
- spec/assets/example_02.yml
|
143
|
+
- spec/spec_helper.rb
|
144
|
+
- spec/support/01_settings_spec.rb
|
145
|
+
- spec/support/02_pkg_spec.rb
|
146
|
+
- spec/support/03_provider_spec.rb
|
113
147
|
homepage: http://github.com/dboca/devinstall
|
114
148
|
licenses:
|
115
149
|
- MIT
|
@@ -136,6 +170,10 @@ specification_version: 4
|
|
136
170
|
summary: Copy the source files to a build host, build the packages and install builded
|
137
171
|
packages
|
138
172
|
test_files:
|
139
|
-
- spec/
|
140
|
-
- spec/
|
141
|
-
- spec/
|
173
|
+
- spec/assets/devinstall/debian/changelog
|
174
|
+
- spec/assets/example_01.yml
|
175
|
+
- spec/assets/example_02.yml
|
176
|
+
- spec/spec_helper.rb
|
177
|
+
- spec/support/01_settings_spec.rb
|
178
|
+
- spec/support/02_pkg_spec.rb
|
179
|
+
- spec/support/03_provider_spec.rb
|
data/spec/pkg_spec.rb
DELETED
@@ -1,16 +0,0 @@
|
|
1
|
-
require 'rspec'
|
2
|
-
require 'devinstall'
|
3
|
-
|
4
|
-
describe 'Packages' do
|
5
|
-
config=Devinstall::Settings.instance
|
6
|
-
config.load! './doc/example.yml' ## use defaults for type and env
|
7
|
-
|
8
|
-
package=:devinstall
|
9
|
-
type=:deb
|
10
|
-
env=nil
|
11
|
-
|
12
|
-
it 'should include the correct file' do
|
13
|
-
pk=Devinstall::Package.new(package, type, env)
|
14
|
-
expect(pk.singleton_class.include?(Pkg::Deb)).to be_true
|
15
|
-
end
|
16
|
-
end
|
data/spec/settings_spec.rb
DELETED
@@ -1,80 +0,0 @@
|
|
1
|
-
require 'rspec'
|
2
|
-
|
3
|
-
require 'devinstall/settings'
|
4
|
-
|
5
|
-
describe 'Settings' do
|
6
|
-
config=Devinstall::Settings.instance
|
7
|
-
config.load! './doc/example.yml' ## use defaults for type and env
|
8
|
-
|
9
|
-
package=:devinstall
|
10
|
-
type=:deb
|
11
|
-
env=nil
|
12
|
-
|
13
|
-
$verbose=true
|
14
|
-
|
15
|
-
it 'should load an existig file' do
|
16
|
-
expect(config.load!('doc/example.yml')).to be_true
|
17
|
-
end
|
18
|
-
|
19
|
-
it 'should not load an unexisting file' do
|
20
|
-
expect(config.load!('doc/unexisting.yml')).to be_false
|
21
|
-
end
|
22
|
-
|
23
|
-
it 'should load at init' do
|
24
|
-
expect(config).to be_an_instance_of(Devinstall::Settings)
|
25
|
-
[:defaults, :local, :build, :install, :tests, :repos].each do |p|
|
26
|
-
expect(config.respond_to? p).to be_true
|
27
|
-
end # all sections loaded!
|
28
|
-
end
|
29
|
-
|
30
|
-
it 'should have a method defaults' do
|
31
|
-
expect(config.respond_to? :defaults).to be_true
|
32
|
-
end
|
33
|
-
|
34
|
-
it 'the method "defaults" should have only one argument' do
|
35
|
-
expect(config.defaults(:type)).to eq "deb"
|
36
|
-
end
|
37
|
-
|
38
|
-
it 'should instantiate a new "Action" when hashes are given' do
|
39
|
-
expect(config.build(type:'deb', env:'dev', pkg:package)).to be_an_instance_of(Devinstall::Settings::Action)
|
40
|
-
end
|
41
|
-
|
42
|
-
it 'should instantiata a new "Action" when partial hashes are given' do
|
43
|
-
expect(config.build(pkg:package)).to be_an_instance_of(Devinstall::Settings::Action)
|
44
|
-
end
|
45
|
-
|
46
|
-
it 'should raise "UnknownKeys" errors for unknown keys' do
|
47
|
-
expect{config.defaults :none}.to raise_error(Devinstall::UnknownKeyError)
|
48
|
-
end
|
49
|
-
|
50
|
-
it 'should raise "KeyNotDefinedError" errors for undefined keys' do
|
51
|
-
expect{config.tests(:provider, pkg:package)}.to raise_error(Devinstall::KeyNotDefinedError)
|
52
|
-
end
|
53
|
-
|
54
|
-
it 'should produce a value if all arguments are valid' do
|
55
|
-
expect(config.build(:command, pkg:package)).to eq('cd %f/%p && dpkg-buildpackage')
|
56
|
-
end
|
57
|
-
end
|
58
|
-
describe "Action" do
|
59
|
-
config=Devinstall::Settings.instance
|
60
|
-
config.load! './doc/example.yml' ## use defaults for type and env
|
61
|
-
|
62
|
-
package=:devinstall
|
63
|
-
type=:deb
|
64
|
-
env=nil
|
65
|
-
|
66
|
-
$verbose=true
|
67
|
-
|
68
|
-
it 'should have a [] method' do
|
69
|
-
rr=config.build(pkg:package, type:type, env:env)
|
70
|
-
expect(rr[:target]).to eq('rs')
|
71
|
-
end
|
72
|
-
|
73
|
-
it 'should enumerate all defined values' do
|
74
|
-
ar=[]
|
75
|
-
config.build(pkg:package, type:type, env:env).each do |k,_|
|
76
|
-
ar << k
|
77
|
-
end
|
78
|
-
expect(ar.sort == [:folder, :command, :provider, :type, :arch, :target].sort ).to be_true
|
79
|
-
end
|
80
|
-
end
|