devinstall 0.0.4 → 0.0.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/bin/pkg-tool +24 -22
- data/doc/example.yml +5 -0
- data/lib/devinstall/version.rb +1 -1
- data/lib/devinstall.rb +78 -74
- metadata +2 -2
data/bin/pkg-tool
CHANGED
@@ -5,49 +5,51 @@ require 'devinstall'
|
|
5
5
|
require 'devinstall/settings'
|
6
6
|
|
7
7
|
begin
|
8
|
-
opt =Getopt::Long.getopts(
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
)
|
8
|
+
opt =Getopt::Long.getopts(
|
9
|
+
['--version', '-v',],
|
10
|
+
['--package', '-p', Getopt::REQUIRED],
|
11
|
+
['--config', '-c', Getopt::REQUIRED],
|
12
|
+
['--type', '-t', Getopt::REQUIRED],
|
13
|
+
['--env', '-e', Getopt::REQUIRED],
|
14
|
+
['--build', '-b',],
|
15
|
+
['--upload', '-u',],
|
16
|
+
['--install', '-i',],
|
17
|
+
['--help', '-h',],
|
18
|
+
)
|
19
19
|
rescue
|
20
|
-
puts
|
21
|
-
|
20
|
+
puts 'Invalid option in command line'
|
21
|
+
help!
|
22
22
|
exit!(1)
|
23
23
|
end
|
24
24
|
|
25
|
+
def help!
|
26
|
+
puts 'Usage: pkg-install --config|-c <file> --package|-p <package> --type|-t <package_type> --env|-e <environment> --build|--upload|--install'
|
27
|
+
end
|
28
|
+
|
25
29
|
if opt['version']
|
26
30
|
puts "devinstall version #{Devinstall::VERSION}"
|
27
31
|
puts "pkg-tool version #{Devinstall::VERSION}"
|
28
32
|
exit(0)
|
29
33
|
end
|
34
|
+
|
30
35
|
if opt['help']
|
31
|
-
|
36
|
+
help!
|
32
37
|
exit!(0)
|
33
38
|
end
|
34
|
-
|
39
|
+
|
40
|
+
unless opt['package'] && opt['config'] && opt['type'] && opt['env'] && (opt['build'] || opt['upload'] || opt['install'])
|
35
41
|
puts 'You must speciffy --config file, --package, --type and --env and one of the actions (--build, --install, --upload)'
|
36
42
|
exit!(0)
|
37
43
|
end
|
38
44
|
Settings.load!(opt['config'])
|
39
45
|
package=Pkg.new(opt['package'])
|
40
46
|
|
41
|
-
if opt[
|
47
|
+
if opt['build']
|
42
48
|
package.build!(opt['type'].to_sym)
|
43
|
-
|
44
|
-
|
45
|
-
if opt[:install]
|
49
|
+
elsif opt['install']
|
46
50
|
package.build!(opt['type'].to_sym)
|
47
51
|
package.install!(opt['env'].to_sym)
|
48
|
-
|
49
|
-
|
50
|
-
if opt[:upload]
|
52
|
+
elsif opt['upload']
|
51
53
|
package.build!(opt['type'].to_sym)
|
52
54
|
package.upload!(opt['env'].to_sym)
|
53
55
|
end
|
data/doc/example.yml
CHANGED
@@ -13,10 +13,12 @@ build:
|
|
13
13
|
# folder - rsync to?
|
14
14
|
# target - the folder where packages will be generated (defaults to folder)
|
15
15
|
# user - for ssh / rsync
|
16
|
+
# arch is the architecture for the generated package (like amd64 or i686)
|
16
17
|
user: dboca
|
17
18
|
host: vm.development.lan
|
18
19
|
folder: rs
|
19
20
|
target: rs
|
21
|
+
arch: all
|
20
22
|
install:
|
21
23
|
# host - dev/prod deploy and install host
|
22
24
|
# user - for scp / ssh / rsync (defaults to base[user])
|
@@ -28,12 +30,15 @@ install:
|
|
28
30
|
type: deb
|
29
31
|
folder: ~ ## folder for scp
|
30
32
|
user: dboca1
|
33
|
+
arch: all
|
31
34
|
prod:
|
32
35
|
host: prod01.server.lan
|
33
36
|
type: rpm
|
37
|
+
arch: all
|
34
38
|
# user defaults to install[:user]
|
35
39
|
repos:
|
36
40
|
# for repository deployment
|
41
|
+
# in a repository should be all packages for all architectures so we don't have an 'arch:' field
|
37
42
|
environments:
|
38
43
|
dev:
|
39
44
|
type: deb
|
data/lib/devinstall/version.rb
CHANGED
data/lib/devinstall.rb
CHANGED
@@ -7,96 +7,100 @@ require 'devinstall/settings' ## in near future we will have to abandon Setting
|
|
7
7
|
module Devinstall
|
8
8
|
class Pkg
|
9
9
|
|
10
|
+
|
11
|
+
# @param [Symbol] type
|
10
12
|
def get_version(type)
|
11
|
-
if type == :deb
|
12
|
-
deb_changelog ="#{Settings.local[:folder]}
|
13
|
+
if type == :deb
|
14
|
+
deb_changelog = "#{Settings.local[:folder]}/debian/changelog" # This is the folder that should be checked
|
13
15
|
deb_package_version =File.open(deb_changelog, 'r').gets.chomp.sub(/^.*\((.*)\).*$/, "\1")
|
14
16
|
@_package_version[:deb]=deb_package_version
|
15
17
|
end
|
16
18
|
end
|
19
|
+
end
|
17
20
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
def upload! (environment)
|
31
|
-
scp =Settings.base[:scp]
|
32
|
-
repo =Hash.new
|
33
|
-
type =Settings.repos[environment][:type]
|
34
|
-
[:user, :host, :folder].each do |k|
|
35
|
-
fail("Unexistent key repos:#{environment}:#{k}") unless Settings.repos[environment].has_key?(k)
|
36
|
-
repo[k]=Settings.repos[environment][k]
|
37
|
-
end
|
38
|
-
build(type)
|
39
|
-
@package_files[type].each do |p|
|
40
|
-
system("#{scp} #{Settings.local[:temp]}/#{p} #{repo[:user]}@#{repo[:host]}:#{repo[:folder]}")
|
41
|
-
end
|
21
|
+
def new (package)
|
22
|
+
# curently implemented only for .deb packages (for .rpm later :D)
|
23
|
+
@package =package.to_sym
|
24
|
+
@_package_version =Hash.new # versions for types:
|
25
|
+
@package_files =Hash.new
|
26
|
+
arch =Settings.build[:arch]
|
27
|
+
pname ="#{package}_#{get_version :deb}"
|
28
|
+
@package_files[:deb] ={deb: "#{pname}_#{arch}.deb",
|
29
|
+
tgz: "#{pname}.tar.gz",
|
30
|
+
dsc: "#{pname}.dsc",
|
31
|
+
chg: "#{pname}_debian.changes"}
|
32
|
+
end
|
42
33
|
|
34
|
+
def upload! (environment)
|
35
|
+
scp =Settings.base[:scp]
|
36
|
+
repo =Hash.new
|
37
|
+
type =Settings.repos[environment][:type]
|
38
|
+
[:user, :host, :folder].each do |k|
|
39
|
+
fail("Unexistent key repos:#{environment}:#{k}") unless Settings.repos[environment].has_key?(k)
|
40
|
+
repo[k]=Settings.repos[environment][k]
|
41
|
+
end
|
42
|
+
build(type)
|
43
|
+
@package_files[type].each do |p|
|
44
|
+
system("#{scp} #{Settings.local[:temp]}/#{p} #{repo[:user]}@#{repo[:host]}:#{repo[:folder]}")
|
43
45
|
end
|
46
|
+
end
|
44
47
|
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
48
|
+
# @param [Symbol] type
|
49
|
+
def build! (type)
|
50
|
+
unless Settings.packages[@package].has_key?(type)
|
51
|
+
puts("Package '#{@package}' cannot be built for the required environment")
|
52
|
+
puts("undefined build configuration for '#{type.to_s}'")
|
53
|
+
exit!(1)
|
54
|
+
end
|
55
|
+
build =Hash.new
|
56
|
+
[:user, :host, :folder, :target].each do |k|
|
57
|
+
unless Settings.build.has_key?(k)
|
58
|
+
puts("Undefined key 'build:#{k.to_s}:'")
|
50
59
|
exit!(1)
|
51
60
|
end
|
52
|
-
build
|
53
|
-
|
54
|
-
unless Settings.build.has_key?(k)
|
55
|
-
puts("Undefined key 'build:#{k.to_s}:'")
|
56
|
-
exit!(1)
|
57
|
-
end
|
58
|
-
build[k]=Settings.build[k]
|
59
|
-
end
|
60
|
-
ssh =Settings.base[:ssh]
|
61
|
-
build_command=Settings.packages[@package][type][:build_command]
|
62
|
-
rsync =Settings.base[:rsync]
|
63
|
-
local_folder =Settings.local[:folder]
|
64
|
-
local_temp =Settings.local[:temp]
|
65
|
-
build_command.sub('%f', Settings.build[:folder]).
|
66
|
-
sub('%t', Settings.build[:target]).
|
67
|
-
sub('%p', @package.to_s).
|
68
|
-
sub('%T', type.to_s)
|
61
|
+
build[k]=Settings.build[k]
|
62
|
+
end
|
69
63
|
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
64
|
+
ssh =Settings.base[:ssh]
|
65
|
+
build_command=Settings.packages[@package][type][:build_command]
|
66
|
+
rsync =Settings.base[:rsync]
|
67
|
+
local_folder =Settings.local[:folder]
|
68
|
+
local_temp =Settings.local[:temp]
|
69
|
+
build_command.sub('%f', Settings.build[:folder]).
|
70
|
+
sub('%t', Settings.build[:target]).
|
71
|
+
sub('%p', @package.to_s).
|
72
|
+
sub('%T', type.to_s)
|
73
|
+
|
74
|
+
system("#{rsync} -az #{local_folder}/ #{build[:user]}@#{build[:host]}:#{build[:folder]}")
|
75
|
+
system("#{ssh} #{build[:user]}@#{build[:host]} -c \"#{build_command}\"")
|
76
|
+
@package_files[type].each do |p|
|
77
|
+
system("#{rsync} -az #{build[:user]}@#{build[:host]}/#{build[:target]}/#{p} #{local_temp}")
|
75
78
|
end
|
79
|
+
end
|
76
80
|
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
end
|
89
|
-
install[k]=Settings[environment][k]
|
90
|
-
end
|
91
|
-
case type.to_sym
|
92
|
-
when :deb
|
93
|
-
system("#{scp} #{local_temp}/#{@package_files[type][:deb]} #{install[:user]}@#{install[:host]}/#{install[:folder]}")
|
94
|
-
system("#{sudo} #{build![:user]}@#{build[:host]} \"dpkg -i #{install[:folder]}/#{@package_files[type][:deb]}")
|
95
|
-
else
|
96
|
-
puts "unknown package type '#{type.to_s}'"
|
97
|
-
exit!(1)
|
81
|
+
def install! (environment)
|
82
|
+
sudo =Settings.base[:sudo]
|
83
|
+
scp =Settings.base[:scp]
|
84
|
+
type =Settings.install[environment][:type]
|
85
|
+
local_temp =Settings.local[:temp]
|
86
|
+
build!(type)
|
87
|
+
install=Hash.new
|
88
|
+
[:user, :host, :folder].each do |k|
|
89
|
+
unless Settings.install[environment].has_key?(k)
|
90
|
+
puts "Undefined key 'install:#{environment.to_s}:#{k.to_s}'"
|
91
|
+
exit!(1)
|
98
92
|
end
|
93
|
+
install[k]=Settings[environment][k]
|
94
|
+
end
|
95
|
+
case type.to_sym
|
96
|
+
when :deb
|
97
|
+
system("#{scp} #{local_temp}/#{@package_files[type][:deb]} #{install[:user]}@#{install[:host]}/#{install[:folder]}")
|
98
|
+
system("#{sudo} #{build![:user]}@#{build[:host]} \"dpkg -i #{install[:folder]}/#{@package_files[type][:deb]}")
|
99
|
+
else
|
100
|
+
puts "unknown package type '#{type.to_s}'"
|
101
|
+
exit!(1)
|
99
102
|
end
|
100
103
|
end
|
101
104
|
end
|
102
105
|
|
106
|
+
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: devinstall
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.5
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-04-14 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|