vanagon 0.6.3 → 0.7.0
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.
- checksums.yaml +4 -4
- data/lib/makefile.rb +1 -3
- data/lib/vanagon/common/pathname.rb +2 -2
- data/lib/vanagon/common/user.rb +1 -1
- data/lib/vanagon/component.rb +1 -1
- data/lib/vanagon/component/dsl.rb +8 -15
- data/lib/vanagon/component/rules.rb +1 -2
- data/lib/vanagon/component/source.rb +1 -1
- data/lib/vanagon/component/source/http.rb +3 -3
- data/lib/vanagon/component/source/local.rb +3 -4
- data/lib/vanagon/driver.rb +4 -4
- data/lib/vanagon/engine/base.rb +1 -1
- data/lib/vanagon/engine/ec2.rb +1 -1
- data/lib/vanagon/engine/hardware.rb +0 -1
- data/lib/vanagon/engine/local.rb +1 -3
- data/lib/vanagon/engine/pooler.rb +1 -1
- data/lib/vanagon/errors.rb +0 -1
- data/lib/vanagon/optparse.rb +1 -2
- data/lib/vanagon/patch.rb +0 -1
- data/lib/vanagon/platform.rb +13 -3
- data/lib/vanagon/platform/deb.rb +1 -9
- data/lib/vanagon/platform/dsl.rb +5 -1
- data/lib/vanagon/platform/osx.rb +7 -14
- data/lib/vanagon/platform/rpm.rb +2 -10
- data/lib/vanagon/platform/rpm/wrl.rb +1 -1
- data/lib/vanagon/platform/solaris_10.rb +9 -15
- data/lib/vanagon/platform/solaris_11.rb +1 -9
- data/lib/vanagon/platform/windows.rb +18 -28
- data/lib/vanagon/project.rb +2 -2
- data/lib/vanagon/project/dsl.rb +3 -3
- data/lib/vanagon/utilities.rb +3 -4
- data/resources/rpm/project.spec.erb +2 -1
- data/spec/lib/vanagon/platform/deb_spec.rb +0 -36
- data/spec/lib/vanagon/platform/rpm_spec.rb +0 -16
- data/spec/lib/vanagon/platform/windows_spec.rb +11 -23
- data/spec/lib/vanagon/platform_spec.rb +39 -12
- metadata +3 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 00aa7997dec07d58c44cb6d6076dd2560822d042
|
4
|
+
data.tar.gz: 79b4904349d110f3eb55f007db5b8cd3c907ae37
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: db753395aaf5db11fff64523b0ae2385e1d0919d53612e4b8d6a4402817bb4ee56919adf918845078e5c6459ac91dbdaa3429131495febc50111e6e1a313760f
|
7
|
+
data.tar.gz: 1521d569ad2be537fb72dd56ea21b4907c4bd365205312682b933b16262a5b456470f40799a76b9c782c2dc6f0dfb2c095f64e2a57b8c491c4d89da2f3e19cfe
|
data/lib/makefile.rb
CHANGED
@@ -1,10 +1,8 @@
|
|
1
1
|
class Makefile
|
2
|
-
|
3
2
|
# The Rule class defines a single Makefile rule.
|
4
3
|
#
|
5
4
|
# @see http://www.gnu.org/software/make/manual/make.html#Rule-Introduction
|
6
5
|
class Rule
|
7
|
-
|
8
6
|
# @!attribute [rw] target
|
9
7
|
# @return [String] The target generated by this rule.
|
10
8
|
attr_accessor :target
|
@@ -43,7 +41,7 @@ class Makefile
|
|
43
41
|
@dependencies = dependencies
|
44
42
|
@recipe = recipe
|
45
43
|
|
46
|
-
|
44
|
+
yield(self) if block
|
47
45
|
end
|
48
46
|
|
49
47
|
# Format this rule as a Makefile rule.
|
@@ -44,7 +44,7 @@ class Vanagon
|
|
44
44
|
# @example Create a new Vanagon::Common::Pathname, marked as a file.
|
45
45
|
# Vanagon::Common::Pathname.file('/etc/puppet/puppet/puppet.conf')
|
46
46
|
def self.file(path, **args)
|
47
|
-
new(path, **args.merge!({ config: false}))
|
47
|
+
new(path, **args.merge!({ config: false }))
|
48
48
|
end
|
49
49
|
|
50
50
|
# An alias to {Vanagon::Common::Pathname}'s constructor method,
|
@@ -54,7 +54,7 @@ class Vanagon
|
|
54
54
|
# @example Create a new configuration file, marked as a configuration file.
|
55
55
|
# Vanagon::Common::Pathname.configfile('/etc/puppet/puppet/puppet.conf')
|
56
56
|
def self.configfile(path, **args)
|
57
|
-
new(path, **args.merge!({ config: true}))
|
57
|
+
new(path, **args.merge!({ config: true }))
|
58
58
|
end
|
59
59
|
|
60
60
|
# @return [Boolean] true if a self is marked as a configuration file.
|
data/lib/vanagon/common/user.rb
CHANGED
@@ -13,7 +13,7 @@ class Vanagon
|
|
13
13
|
# Equality. How does it even work?
|
14
14
|
#
|
15
15
|
# @return [true, false] true if all attributes have equal values. false otherwise.
|
16
|
-
def ==(other)
|
16
|
+
def ==(other) # rubocop:disable Metrics/AbcSize
|
17
17
|
other.name == self.name && \
|
18
18
|
other.group == self.group && \
|
19
19
|
other.shell == self.shell && \
|
data/lib/vanagon/component.rb
CHANGED
@@ -41,7 +41,7 @@ class Vanagon
|
|
41
41
|
# @param settings [Hash] the settings to be used in the component
|
42
42
|
# @param platform [Vanagon::Platform] the platform to build the component for
|
43
43
|
# @return [Vanagon::Component] the component with the given settings and platform
|
44
|
-
def initialize(name, settings, platform)
|
44
|
+
def initialize(name, settings, platform) # rubocop:disable Metrics/AbcSize
|
45
45
|
@name = name
|
46
46
|
@settings = settings
|
47
47
|
@platform = platform
|
@@ -22,7 +22,7 @@ class Vanagon
|
|
22
22
|
# @param name [String] name of the componennt
|
23
23
|
# @param block [Proc] DSL definition of the component to call
|
24
24
|
def component(name, &block)
|
25
|
-
|
25
|
+
yield(self, @component.settings, @component.platform)
|
26
26
|
end
|
27
27
|
|
28
28
|
# Accessor for the component.
|
@@ -54,35 +54,28 @@ class Vanagon
|
|
54
54
|
#
|
55
55
|
# @param block [Proc] the command(s) required to configure the component
|
56
56
|
def configure(&block)
|
57
|
-
@component.configure <<
|
57
|
+
@component.configure << yield
|
58
58
|
end
|
59
59
|
|
60
60
|
# Set or add to the build call for the component. The commands required to build the component before testing/installing it.
|
61
61
|
#
|
62
62
|
# @param block [Proc] the command(s) required to build the component
|
63
63
|
def build(&block)
|
64
|
-
@component.build <<
|
64
|
+
@component.build << yield
|
65
65
|
end
|
66
66
|
|
67
67
|
# Set or add to the check call for the component. The commands required to test the component before installing it.
|
68
68
|
#
|
69
69
|
# @param block [Proc] the command(s) required to test the component
|
70
70
|
def check(&block)
|
71
|
-
@component.check <<
|
71
|
+
@component.check << yield
|
72
72
|
end
|
73
73
|
|
74
74
|
# Set or add to the install call for the component. The commands required to install the component.
|
75
75
|
#
|
76
76
|
# @param block [Proc] the command(s) required to install the component
|
77
77
|
def install(&block)
|
78
|
-
@component.install <<
|
79
|
-
end
|
80
|
-
|
81
|
-
# Setup any specific environment required to configure, build or install the component
|
82
|
-
#
|
83
|
-
# @param block [Proc] the environment required to configure, build or install the component
|
84
|
-
def environment(&block)
|
85
|
-
@component.environment = block.call
|
78
|
+
@component.install << yield
|
86
79
|
end
|
87
80
|
|
88
81
|
# Add a patch to the list of patches to apply to the component's source after unpacking
|
@@ -168,7 +161,7 @@ class Vanagon
|
|
168
161
|
# @param default_file [String] path to the default file relative to the source
|
169
162
|
# @param service_name [String] name of the service
|
170
163
|
# @param service_type [String] type of the service (network, application, system, etc)
|
171
|
-
def install_service(service_file, default_file = nil, service_name = @component.name, service_type: nil)
|
164
|
+
def install_service(service_file, default_file = nil, service_name = @component.name, service_type: nil) # rubocop:disable Metrics/AbcSize
|
172
165
|
case @component.platform.servicetype
|
173
166
|
when "sysv"
|
174
167
|
target_service_file = File.join(@component.platform.servicedir, service_name)
|
@@ -223,7 +216,7 @@ class Vanagon
|
|
223
216
|
# @param target [String] path to the desired target of the file
|
224
217
|
# @param owner [String] owner of the file
|
225
218
|
# @param group [String] group owner of the file
|
226
|
-
def install_file(source, target, mode: '0644', owner: nil, group:
|
219
|
+
def install_file(source, target, mode: '0644', owner: nil, group: nil)
|
227
220
|
@component.install << "#{@component.platform.install} -d '#{File.dirname(target)}'"
|
228
221
|
@component.install << "#{@component.platform.copy} -p '#{source}' '#{target}'"
|
229
222
|
@component.add_file Vanagon::Common::Pathname.file(target, mode: mode, owner: owner, group: group)
|
@@ -235,7 +228,7 @@ class Vanagon
|
|
235
228
|
# @param file [String] name of the configfile
|
236
229
|
def configfile(file)
|
237
230
|
# I AM SO SORRY
|
238
|
-
@component.delete_file
|
231
|
+
@component.delete_file file
|
239
232
|
if @component.platform.name =~ /solaris-10|osx/
|
240
233
|
@component.install << "mv '#{file}' '#{file}.pristine'"
|
241
234
|
@component.add_file Vanagon::Common::Pathname.configfile("#{file}.pristine")
|
@@ -6,7 +6,6 @@ class Vanagon
|
|
6
6
|
class Component
|
7
7
|
# Vanagon::Component::Rules creates all Makefile rules for a given component.
|
8
8
|
class Rules
|
9
|
-
|
10
9
|
include Vanagon::Utilities::ShellUtilities
|
11
10
|
|
12
11
|
# Create methods that generate Makefile rules.
|
@@ -67,7 +66,7 @@ class Vanagon
|
|
67
66
|
#
|
68
67
|
# @return [Makefile::Rule]
|
69
68
|
def component_rule
|
70
|
-
Makefile::Rule.new(
|
69
|
+
Makefile::Rule.new(@component.name, dependencies: ["#{@component.name}-install"])
|
71
70
|
end
|
72
71
|
|
73
72
|
# Unpack the source for this component. The unpacking behavior depends on
|
@@ -5,7 +5,7 @@ require 'vanagon/component/source/local'
|
|
5
5
|
class Vanagon
|
6
6
|
class Component
|
7
7
|
class Source
|
8
|
-
SUPPORTED_PROTOCOLS = ['file', 'http', 'git']
|
8
|
+
SUPPORTED_PROTOCOLS = ['file', 'http', 'git'].freeze
|
9
9
|
@@rewrite_rule = {}
|
10
10
|
|
11
11
|
def self.register_rewrite_rule(protocol, rule)
|
@@ -10,7 +10,7 @@ class Vanagon
|
|
10
10
|
attr_accessor :url, :sum, :file, :extension, :workdir, :cleanup
|
11
11
|
|
12
12
|
# Extensions for files we intend to unpack during the build
|
13
|
-
ARCHIVE_EXTENSIONS = '.tar.gz', '.tgz', '.zip'
|
13
|
+
ARCHIVE_EXTENSIONS = ['.tar.gz', '.tgz', '.zip'].freeze
|
14
14
|
|
15
15
|
# Constructor for the Http source type
|
16
16
|
#
|
@@ -48,7 +48,7 @@ class Vanagon
|
|
48
48
|
# Downloads the file from @url into the @workdir
|
49
49
|
# @param target_url [String, URI, Addressable::URI] url of an http source to retrieve with GET
|
50
50
|
# @raise [RuntimeError, Vanagon::Error] an exception is raised if the URI scheme cannot be handled
|
51
|
-
def download(target_url, target_file = nil)
|
51
|
+
def download(target_url, target_file = nil) # rubocop:disable Metrics/AbcSize
|
52
52
|
uri = URI.parse(target_url.to_s)
|
53
53
|
target_file ||= File.basename(uri.path)
|
54
54
|
|
@@ -93,7 +93,7 @@ class Vanagon
|
|
93
93
|
when ".tar.gz", ".tgz"
|
94
94
|
return "gunzip -c '#{@file}' | '#{tar}' xf -"
|
95
95
|
when ".zip"
|
96
|
-
return "unzip '#{@file}' || 7za x -r -tzip -o'#{File.basename(@file,
|
96
|
+
return "unzip '#{@file}' || 7za x -r -tzip -o'#{File.basename(@file, '.zip')}' '#{@file}'"
|
97
97
|
end
|
98
98
|
else
|
99
99
|
# Extension does not appear to be an archive
|
@@ -10,7 +10,7 @@ class Vanagon
|
|
10
10
|
attr_accessor :url, :file, :extension, :workdir, :cleanup
|
11
11
|
|
12
12
|
# Extensions for files we intend to unpack during the build
|
13
|
-
ARCHIVE_EXTENSIONS = '.tar.gz', '.tgz', '.zip'
|
13
|
+
ARCHIVE_EXTENSIONS = ['.tar.gz', '.tgz', '.zip'].freeze
|
14
14
|
|
15
15
|
# Constructor for the File source type
|
16
16
|
#
|
@@ -51,7 +51,6 @@ class Vanagon
|
|
51
51
|
end
|
52
52
|
|
53
53
|
target_file
|
54
|
-
|
55
54
|
end
|
56
55
|
|
57
56
|
# Gets the command to extract the archive given if needed (uses @extension)
|
@@ -65,7 +64,7 @@ class Vanagon
|
|
65
64
|
when ".tar.gz", ".tgz"
|
66
65
|
return "gunzip -c '#{@file}' | '#{tar}' xf -"
|
67
66
|
when ".zip"
|
68
|
-
return "unzip '#{@file}' || 7za x -r -tzip -o'#{File.basename(@file,
|
67
|
+
return "unzip '#{@file}' || 7za x -r -tzip -o'#{File.basename(@file, '.zip')}' '#{@file}'"
|
69
68
|
end
|
70
69
|
else
|
71
70
|
# Extension does not appear to be an archive
|
@@ -116,4 +115,4 @@ class Vanagon
|
|
116
115
|
end
|
117
116
|
end
|
118
117
|
end
|
119
|
-
end
|
118
|
+
end
|
data/lib/vanagon/driver.rb
CHANGED
@@ -13,7 +13,7 @@ class Vanagon
|
|
13
13
|
attr_accessor :platform, :project, :target, :workdir, :verbose, :preserve
|
14
14
|
attr_accessor :timeout, :retry_count
|
15
15
|
|
16
|
-
def initialize(platform, project, options = { :configdir => nil, :target => nil, :engine => nil, :components => nil, :skipcheck => false, :verbose => false, :preserve => false })
|
16
|
+
def initialize(platform, project, options = { :configdir => nil, :target => nil, :engine => nil, :components => nil, :skipcheck => false, :verbose => false, :preserve => false }) # rubocop:disable Metrics/AbcSize
|
17
17
|
@verbose = options[:verbose]
|
18
18
|
@preserve = options[:preserve]
|
19
19
|
|
@@ -74,7 +74,7 @@ class Vanagon
|
|
74
74
|
@project.components.map(&:build_requires).flatten.uniq - @project.components.map(&:name)
|
75
75
|
end
|
76
76
|
|
77
|
-
def install_build_dependencies
|
77
|
+
def install_build_dependencies # rubocop:disable Metrics/AbcSize
|
78
78
|
unless list_build_dependencies.empty?
|
79
79
|
if @platform.build_dependencies && @platform.build_dependencies.command && !@platform.build_dependencies.command.empty?
|
80
80
|
@engine.dispatch("#{@platform.build_dependencies.command} #{list_build_dependencies.join(' ')} #{@platform.build_dependencies.suffix}")
|
@@ -86,7 +86,7 @@ class Vanagon
|
|
86
86
|
end
|
87
87
|
end
|
88
88
|
|
89
|
-
def run
|
89
|
+
def run # rubocop:disable Metrics/AbcSize
|
90
90
|
# Simple sanity check for the project
|
91
91
|
if @project.version.nil? or @project.version.empty?
|
92
92
|
raise Vanagon::Error, "Project requires a version set, all is lost."
|
@@ -115,7 +115,7 @@ class Vanagon
|
|
115
115
|
end
|
116
116
|
end
|
117
117
|
|
118
|
-
def prepare(workdir = nil)
|
118
|
+
def prepare(workdir = nil) # rubocop:disable Metrics/AbcSize
|
119
119
|
@workdir = workdir ? FileUtils.mkdir_p(workdir).first : Dir.mktmpdir
|
120
120
|
@engine.startup(@workdir)
|
121
121
|
|
data/lib/vanagon/engine/base.rb
CHANGED
@@ -76,7 +76,7 @@ class Vanagon
|
|
76
76
|
def validate_platform
|
77
77
|
missing_attrs = []
|
78
78
|
@required_attributes.each do |attr|
|
79
|
-
if
|
79
|
+
if !@platform.instance_variables.include?("@#{attr}".to_sym) || @platform.instance_variable_get("@#{attr}".to_sym).nil?
|
80
80
|
missing_attrs << attr
|
81
81
|
end
|
82
82
|
end
|
data/lib/vanagon/engine/ec2.rb
CHANGED
@@ -9,7 +9,7 @@ class Vanagon
|
|
9
9
|
attr_accessor :ami, :key_name, :userdata, :key, :key_name, :shutdown_behavior
|
10
10
|
attr_accessor :subnet_id, :instance_type
|
11
11
|
|
12
|
-
def initialize(platform, target = nil)
|
12
|
+
def initialize(platform, target = nil) # rubocop:disable Metrics/AbcSize
|
13
13
|
super
|
14
14
|
|
15
15
|
@ami = @platform.aws_ami
|
@@ -12,7 +12,6 @@ class Vanagon
|
|
12
12
|
# Class to use when building on a hardware device (e.g. AIX, Switch, etc)
|
13
13
|
#
|
14
14
|
class Hardware < Base
|
15
|
-
|
16
15
|
# This method is used to obtain a vm to build upon
|
17
16
|
# For the base class we just return the target that was passed in
|
18
17
|
def select_target
|
data/lib/vanagon/engine/local.rb
CHANGED
@@ -5,7 +5,6 @@ require 'vanagon/errors'
|
|
5
5
|
class Vanagon
|
6
6
|
class Engine
|
7
7
|
class Local < Base
|
8
|
-
|
9
8
|
def initialize(platform, target = nil)
|
10
9
|
# local engine can't be used with a target
|
11
10
|
super(platform, 'local machine')
|
@@ -38,14 +37,13 @@ class Vanagon
|
|
38
37
|
end
|
39
38
|
|
40
39
|
def ship_workdir(workdir)
|
41
|
-
FileUtils.cp_r(Dir.glob("#{workdir}/*"),
|
40
|
+
FileUtils.cp_r(Dir.glob("#{workdir}/*"), @remote_workdir)
|
42
41
|
end
|
43
42
|
|
44
43
|
def retrieve_built_artifact
|
45
44
|
FileUtils.mkdir_p("output")
|
46
45
|
FileUtils.cp_r(Dir.glob("#{@remote_workdir}/output/*"), "output/")
|
47
46
|
end
|
48
|
-
|
49
47
|
end
|
50
48
|
end
|
51
49
|
end
|
@@ -46,7 +46,7 @@ class Vanagon
|
|
46
46
|
# This method is used to obtain a vm to build upon using the Puppet Labs'
|
47
47
|
# vmpooler (https://github.com/puppetlabs/vmpooler)
|
48
48
|
# @raise [Vanagon::Error] if a target cannot be obtained
|
49
|
-
def select_target
|
49
|
+
def select_target # rubocop:disable Metrics/AbcSize
|
50
50
|
response = Vanagon::Utilities.http_request(
|
51
51
|
"#{@pooler}/vm",
|
52
52
|
'POST',
|
data/lib/vanagon/errors.rb
CHANGED
data/lib/vanagon/optparse.rb
CHANGED
@@ -2,7 +2,6 @@ require 'optparse'
|
|
2
2
|
|
3
3
|
class Vanagon
|
4
4
|
class OptParse
|
5
|
-
|
6
5
|
FLAGS = {
|
7
6
|
:workdir => ['-w DIR', '--workdir DIR', "Working directory where build source should be put (defaults to a tmpdir)"],
|
8
7
|
:configdir => ['-c', '--configdir DIR', 'Configs dir (defaults to $pwd/configs)'],
|
@@ -11,7 +10,7 @@ class Vanagon
|
|
11
10
|
:skipcheck => ['--skipcheck', 'Skip the `check` stage when building components'],
|
12
11
|
:preserve => ['-p', '--preserve', 'Whether to tear down the VM on success or not (defaults to false)'],
|
13
12
|
:verbose => ['-v', '--verbose', 'Verbose output (does nothing)'],
|
14
|
-
}
|
13
|
+
}.freeze
|
15
14
|
|
16
15
|
def initialize(banner, options = [])
|
17
16
|
@options = Hash[options.map { |v| [v, nil] }]
|
data/lib/vanagon/patch.rb
CHANGED
data/lib/vanagon/platform.rb
CHANGED
@@ -8,7 +8,7 @@ class Vanagon
|
|
8
8
|
attr_accessor :docker_image, :ssh_port, :rpmbuild, :install, :platform_triple
|
9
9
|
attr_accessor :target_user, :package_type, :find, :sort, :build_hosts, :copy, :cross_compiled
|
10
10
|
attr_accessor :aws_ami, :aws_user_data, :aws_shutdown_behavior, :aws_key_name, :aws_region, :aws_key
|
11
|
-
attr_accessor :aws_instance_type, :aws_vpc_id, :aws_subnet_id
|
11
|
+
attr_accessor :aws_instance_type, :aws_vpc_id, :aws_subnet_id, :output_dir
|
12
12
|
|
13
13
|
# Platform names currently contain some information about the platform. Fields
|
14
14
|
# within the name are delimited by the '-' character, and this regex can be used to
|
@@ -60,7 +60,7 @@ class Vanagon
|
|
60
60
|
#
|
61
61
|
# @param user [Vanagon::Common::User] the user to create
|
62
62
|
# @return [String] the commands required to add a user to the system
|
63
|
-
def add_user(user)
|
63
|
+
def add_user(user) # rubocop:disable Metrics/AbcSize
|
64
64
|
cmd_args = ["'#{user.name}'"]
|
65
65
|
cmd_args.unshift "--home '#{user.homedir}'" if user.homedir
|
66
66
|
if user.shell
|
@@ -95,7 +95,7 @@ class Vanagon
|
|
95
95
|
#
|
96
96
|
# @param name [String] name of the platform
|
97
97
|
# @return [Vanagon::Platform] the platform with the given name
|
98
|
-
def initialize(name)
|
98
|
+
def initialize(name) # rubocop:disable Metrics/AbcSize
|
99
99
|
@name = name
|
100
100
|
@os_name = os_name
|
101
101
|
@os_version = os_version
|
@@ -117,6 +117,16 @@ class Vanagon
|
|
117
117
|
end
|
118
118
|
end
|
119
119
|
|
120
|
+
# Get the output dir for packages. If the output_dir was defined already (by
|
121
|
+
# the platform config) then don't change it.
|
122
|
+
#
|
123
|
+
# @param target_repo [String] optional repo target for built packages defined
|
124
|
+
# at the project level
|
125
|
+
# @return [String] relative path to where packages should be output to
|
126
|
+
def output_dir(target_repo = "")
|
127
|
+
@output_dir ||= File.join(@os_name, @os_version, target_repo, @architecture)
|
128
|
+
end
|
129
|
+
|
120
130
|
# Sets and gets the name of the operating system for the platform.
|
121
131
|
# Also has the side effect of setting the @os_name instance attribute
|
122
132
|
#
|
data/lib/vanagon/platform/deb.rb
CHANGED
@@ -5,7 +5,7 @@ class Vanagon
|
|
5
5
|
#
|
6
6
|
# @param project [Vanagon::Project] project to build a debian package of
|
7
7
|
# @return [Array] list of commands required to build a debian package for the given project from a tarball
|
8
|
-
def generate_package(project)
|
8
|
+
def generate_package(project) # rubocop:disable Metrics/AbcSize
|
9
9
|
target_dir = project.repo ? output_dir(project.repo) : output_dir
|
10
10
|
pkg_arch_opt = project.noarch ? "" : "-a#{@architecture}"
|
11
11
|
["mkdir -p output/#{target_dir}",
|
@@ -47,14 +47,6 @@ class Vanagon
|
|
47
47
|
"#{project.name}_#{project.version}-#{project.release}#{@codename}_#{project.noarch ? 'all' : @architecture}.deb"
|
48
48
|
end
|
49
49
|
|
50
|
-
# Get the expected output dir for the debian packages. This allows us to
|
51
|
-
# use some standard tools to ship internally.
|
52
|
-
#
|
53
|
-
# @return [String] relative path to where debian packages should be staged
|
54
|
-
def output_dir(target_repo = "")
|
55
|
-
File.join("deb", @codename, target_repo)
|
56
|
-
end
|
57
|
-
|
58
50
|
# Returns the string to add a target repo to the platforms' provisioning
|
59
51
|
#
|
60
52
|
# @param definition [URI] A URI to a deb or list file
|
data/lib/vanagon/platform/dsl.rb
CHANGED
@@ -50,7 +50,7 @@ class Vanagon
|
|
50
50
|
fail "Platform not implemented for '#{@name}' yet. Please go do so..."
|
51
51
|
end
|
52
52
|
|
53
|
-
|
53
|
+
yield(self)
|
54
54
|
@platform
|
55
55
|
end
|
56
56
|
|
@@ -313,6 +313,10 @@ class Vanagon
|
|
313
313
|
@platform.codename = name
|
314
314
|
end
|
315
315
|
|
316
|
+
def output_dir(directory)
|
317
|
+
@platform.output_dir = directory
|
318
|
+
end
|
319
|
+
|
316
320
|
# Helper to setup a apt repository on a target system
|
317
321
|
#
|
318
322
|
# @param definition [String] the repo setup file, must be a valid uri, fetched with curl
|
data/lib/vanagon/platform/osx.rb
CHANGED
@@ -5,7 +5,7 @@ class Vanagon
|
|
5
5
|
#
|
6
6
|
# @param project [Vanagon::Project] project to build a osx package of
|
7
7
|
# @return [Array] list of commands required to build a osx package for the given project from a tarball
|
8
|
-
def generate_package(project)
|
8
|
+
def generate_package(project) # rubocop:disable Metrics/AbcSize
|
9
9
|
target_dir = project.repo ? output_dir(project.repo) : output_dir
|
10
10
|
|
11
11
|
# Here we maintain backward compatibility with older vanagon versions
|
@@ -13,10 +13,11 @@ class Vanagon
|
|
13
13
|
# in favor of just letting the makefile deliver the bill-of-materials
|
14
14
|
# to the correct directory. This shouldn't be required at all then.
|
15
15
|
if project.bill_of_materials.nil?
|
16
|
-
bom_install = [
|
17
|
-
|
18
|
-
|
19
|
-
|
16
|
+
bom_install = [
|
17
|
+
# Move bill-of-materials into a docdir
|
18
|
+
"mkdir -p $(tempdir)/osx/build/root/#{project.name}-#{project.version}/usr/local/share/doc/#{project.name}",
|
19
|
+
"mv $(tempdir)/osx/build/root/#{project.name}-#{project.version}/bill-of-materials $(tempdir)/osx/build/root/#{project.name}-#{project.version}/usr/local/share/doc/#{project.name}/bill-of-materials",
|
20
|
+
]
|
20
21
|
else
|
21
22
|
bom_install = []
|
22
23
|
end
|
@@ -63,7 +64,7 @@ class Vanagon
|
|
63
64
|
# @param workdir [String] working directory to stage the evaluated templates in
|
64
65
|
# @param name [String] name of the project
|
65
66
|
# @param binding [Binding] binding to use in evaluating the packaging templates
|
66
|
-
def generate_packaging_artifacts(workdir, name, binding)
|
67
|
+
def generate_packaging_artifacts(workdir, name, binding) # rubocop:disable Metrics/AbcSize
|
67
68
|
resources_dir = File.join(workdir, "resources", "osx")
|
68
69
|
FileUtils.mkdir_p(resources_dir)
|
69
70
|
script_dir = File.join(workdir, "scripts")
|
@@ -91,14 +92,6 @@ class Vanagon
|
|
91
92
|
"#{project.name}-#{project.version}-#{project.release}.#{@os_name}#{@os_version}.dmg"
|
92
93
|
end
|
93
94
|
|
94
|
-
# Get the expected output dir for the osx packages. This allows us to
|
95
|
-
# use some standard tools to ship internally.
|
96
|
-
#
|
97
|
-
# @return [String] relative path to where osx packages should be staged
|
98
|
-
def output_dir(target_repo = "")
|
99
|
-
File.join("apple", @os_version, target_repo, @architecture)
|
100
|
-
end
|
101
|
-
|
102
95
|
# Constructor. Sets up some defaults for the osx platform and calls the parent constructor
|
103
96
|
#
|
104
97
|
# @param name [String] name of the platform
|
data/lib/vanagon/platform/rpm.rb
CHANGED
@@ -36,22 +36,14 @@ class Vanagon
|
|
36
36
|
"#{project.name}-#{project.version}-#{project.release}.#{project.noarch ? 'noarch' : @architecture}.rpm"
|
37
37
|
end
|
38
38
|
|
39
|
-
# Get the expected output dir for the rpm packages. This allows us to
|
40
|
-
# use some standard tools to ship internally.
|
41
|
-
#
|
42
|
-
# @return [String] relative path to where rpm packages should be staged
|
43
|
-
def output_dir(target_repo = "products")
|
44
|
-
File.join(@os_name, @os_version, target_repo, @architecture)
|
45
|
-
end
|
46
|
-
|
47
39
|
def rpm_defines
|
48
40
|
defines = %(--define '_topdir $(tempdir)/rpmbuild' )
|
49
41
|
# RPM doesn't allow dashes in the os_name. This was added to
|
50
42
|
# convert cisco-wrlinux to cisco_wrlinux
|
51
|
-
defines << %(--define 'dist .#{@os_name.
|
43
|
+
defines << %(--define 'dist .#{@os_name.tr('-', '_')}#{@os_version}' )
|
52
44
|
end
|
53
45
|
|
54
|
-
def add_repository(definition)
|
46
|
+
def add_repository(definition) # rubocop:disable Metrics/AbcSize
|
55
47
|
definition = URI.parse(definition)
|
56
48
|
|
57
49
|
commands = ["rpm -q curl > /dev/null || yum -y install curl"]
|
@@ -21,7 +21,7 @@ class Vanagon
|
|
21
21
|
commands << "tmpdir=$(mktemp -p /var/tmp -d)"
|
22
22
|
commands << "cd ${tmpdir}"
|
23
23
|
build_dependencies.each do |build_dependency|
|
24
|
-
if build_dependency
|
24
|
+
if build_dependency =~ /^http.*\.rpm$/
|
25
25
|
# We're downloading each package individually so
|
26
26
|
# failures are easier to troubleshoot
|
27
27
|
commands << %(curl --remote-name --location --fail --silent #{build_dependency} && echo "Successfully downloaded #{build_dependency}")
|
@@ -5,7 +5,7 @@ class Vanagon
|
|
5
5
|
#
|
6
6
|
# @param project [Vanagon::Project] project to build a solaris package of
|
7
7
|
# @return [Array] list of commands required to build a solaris package for the given project from a tarball
|
8
|
-
def generate_package(project)
|
8
|
+
def generate_package(project) # rubocop:disable Metrics/AbcSize
|
9
9
|
target_dir = project.repo ? output_dir(project.repo) : output_dir
|
10
10
|
name_and_version = "#{project.name}-#{project.version}"
|
11
11
|
pkg_name = package_name(project)
|
@@ -28,9 +28,11 @@ class Vanagon
|
|
28
28
|
# in favor of just letting the makefile deliver the bill-of-materials
|
29
29
|
# to the correct directory. This shouldn't be required at all then.
|
30
30
|
if project.bill_of_materials.nil?
|
31
|
-
bom_install = [
|
32
|
-
|
33
|
-
|
31
|
+
bom_install = [
|
32
|
+
# Move bill-of-materials into a docdir
|
33
|
+
"mkdir -p $(tempdir)/#{name_and_version}/usr/share/doc/#{project.name}",
|
34
|
+
"mv $(tempdir)/#{name_and_version}/bill-of-materials $(tempdir)/#{name_and_version}/usr/share/doc/#{project.name}/bill-of-materials",
|
35
|
+
]
|
34
36
|
else
|
35
37
|
bom_install = []
|
36
38
|
end
|
@@ -106,7 +108,7 @@ class Vanagon
|
|
106
108
|
#
|
107
109
|
# @param user [Vanagon::Common::User] the user to create
|
108
110
|
# @return [String] the commands required to add a user to the system
|
109
|
-
def add_user(user)
|
111
|
+
def add_user(user) # rubocop:disable Metrics/AbcSize
|
110
112
|
# NB: system users aren't supported on solaris 10
|
111
113
|
# Solaris 10 also doesn't support long flags
|
112
114
|
cmd_args = ["'#{user.name}'"]
|
@@ -138,28 +140,20 @@ class Vanagon
|
|
138
140
|
"#{project.name}-#{project.version}-#{project.release}.#{@architecture}.pkg.gz"
|
139
141
|
end
|
140
142
|
|
141
|
-
# Get the expected output dir for the solaris 10 packages. This allows us to
|
142
|
-
# use some standard tools to ship internally.
|
143
|
-
#
|
144
|
-
# @return [String] relative path to where solaris 10 packages should be staged
|
145
|
-
def output_dir(target_repo = "")
|
146
|
-
File.join("solaris", @os_version, target_repo)
|
147
|
-
end
|
148
|
-
|
149
143
|
# Because solaris has multiple terrible ways to install packages, we have
|
150
144
|
# this method which generates a shell script to be executed on the system
|
151
145
|
# which will install all of the build dependencies
|
152
146
|
#
|
153
147
|
# @param build_dependencies [Array] list of all build dependencies to install
|
154
148
|
# @return [String] a command to install all of the build dependencies
|
155
|
-
def install_build_dependencies(build_dependencies)
|
149
|
+
def install_build_dependencies(build_dependencies) # rubocop:disable Metrics/AbcSize
|
156
150
|
http = []
|
157
151
|
pkgutil = []
|
158
152
|
noasks = ["instance=overwrite", "partial=nocheck", "runlevel=nocheck", "idepend=nocheck", "rdepend=nocheck", "space=nocheck", "setuid=nocheck", "conflict=nocheck", "action=nocheck", "basedir=default"]
|
159
153
|
noask_command = noasks.map { |noask| "echo '#{noask}' >> /var/tmp/noask" }.join('; ')
|
160
154
|
|
161
155
|
build_dependencies.each do |build_dependency|
|
162
|
-
if build_dependency
|
156
|
+
if build_dependency =~ /^http.*\.gz/
|
163
157
|
# Fetch, unpack, install...this assumes curl is present.
|
164
158
|
package = build_dependency.sub(/^http.*\//, '')
|
165
159
|
http << "tmpdir=$(mktemp -p /var/tmp -d); (cd ${tmpdir} && curl -O #{build_dependency} && gunzip -c #{package} | pkgadd -d /dev/stdin -a /var/tmp/noask all)"
|
@@ -5,7 +5,7 @@ class Vanagon
|
|
5
5
|
#
|
6
6
|
# @param project [Vanagon::Project] project to build a solaris package of
|
7
7
|
# @return [Array] list of commands required to build a solaris package for the given project from a tarball
|
8
|
-
def generate_package(project)
|
8
|
+
def generate_package(project) # rubocop:disable Metrics/AbcSize
|
9
9
|
target_dir = project.repo ? output_dir(project.repo) : output_dir
|
10
10
|
name_and_version = "#{project.name}-#{project.version}"
|
11
11
|
pkg_name = package_name(project)
|
@@ -106,14 +106,6 @@ class Vanagon
|
|
106
106
|
"#{version},5.11-#{release}"
|
107
107
|
end
|
108
108
|
|
109
|
-
# Get the expected output dir for the solaris 11 packages. This allows us to
|
110
|
-
# use some standard tools to ship internally.
|
111
|
-
#
|
112
|
-
# @return [String] relative path to where solaris 11 packages should be staged
|
113
|
-
def output_dir(target_repo = "")
|
114
|
-
File.join("solaris", @os_version, target_repo)
|
115
|
-
end
|
116
|
-
|
117
109
|
# Constructor. Sets up some defaults for the solaris 11 platform and calls the parent constructor
|
118
110
|
#
|
119
111
|
# @param name [String] name of the platform
|
@@ -77,7 +77,7 @@ class Vanagon
|
|
77
77
|
# @param vanagon_root [String] Vanagon wix resources directory
|
78
78
|
# @param destination [String] Destination directory
|
79
79
|
# @param verbose [String] True or false
|
80
|
-
def merge_defaults_from_vanagon(vanagon_root, destination, verbose: false)
|
80
|
+
def merge_defaults_from_vanagon(vanagon_root, destination, verbose: false) # rubocop:disable Metrics/AbcSize
|
81
81
|
# Will use this Pathname object for relative path calculations in loop below.
|
82
82
|
vanagon_path = Pathname.new(vanagon_root)
|
83
83
|
files = Dir.glob(File.join(vanagon_root, "**/*.*"))
|
@@ -140,7 +140,7 @@ class Vanagon
|
|
140
140
|
# @param project [Vanagon::Project] project to build a nuget package of
|
141
141
|
# @return [Array] list of commands required to build a nuget package for
|
142
142
|
# the given project from a tarball
|
143
|
-
def generate_nuget_package(project)
|
143
|
+
def generate_nuget_package(project) # rubocop:disable Metrics/AbcSize
|
144
144
|
target_dir = project.repo ? output_dir(project.repo) : output_dir
|
145
145
|
["mkdir -p output/#{target_dir}",
|
146
146
|
"mkdir -p $(tempdir)/#{project.name}/tools",
|
@@ -161,7 +161,7 @@ class Vanagon
|
|
161
161
|
#
|
162
162
|
# @param project [Vanagon::Project] project to build a msi package of
|
163
163
|
# @return [Array] list of commands required to build an msi package for the given project from a tarball
|
164
|
-
def generate_msi_package(project)
|
164
|
+
def generate_msi_package(project) # rubocop:disable Metrics/AbcSize
|
165
165
|
target_dir = project.repo ? output_dir(project.repo) : output_dir
|
166
166
|
wix_extensions = "-ext WiXUtilExtension -ext WixUIExtension"
|
167
167
|
# Heat command documentation at: http://wixtoolset.org/documentation/manual/v3/overview/heat.html
|
@@ -186,7 +186,8 @@ class Vanagon
|
|
186
186
|
# "Misc Dir for versions.txt, License file and Icon file"
|
187
187
|
misc_dir = "SourceDir/#{project.settings[:base_dir]}/#{project.settings[:company_id]}/#{project.settings[:product_id]}/misc"
|
188
188
|
# Actual array of commands to be written to the Makefile
|
189
|
-
[
|
189
|
+
[
|
190
|
+
"mkdir -p output/#{target_dir}",
|
190
191
|
"mkdir -p $(tempdir)/{SourceDir,wix/wixobj}",
|
191
192
|
"#{@copy} -r wix/* $(tempdir)/wix/",
|
192
193
|
"gunzip -c #{project.name}-#{project.version}.tar.gz | '#{@tar}' -C '$(tempdir)/SourceDir' --strip-components 1 -xf -",
|
@@ -204,7 +205,7 @@ class Vanagon
|
|
204
205
|
# the -b flag simply points light to where the SourceDir location is
|
205
206
|
# -loc is required for the UI localization it points to the actual localization .wxl
|
206
207
|
"cd $(tempdir)/wix/wixobj; \"$$WIX/bin/light.exe\" #{light_flags} -b $$(cygpath -aw $(tempdir)) -loc $$(cygpath -aw $(tempdir)/wix/localization/puppet_en-us.wxl) -out $$(cygpath -aw $(workdir)/output/#{target_dir}/#{msi_package_name(project)}) *.wixobj",
|
207
|
-
|
208
|
+
]
|
208
209
|
end
|
209
210
|
|
210
211
|
# Method to derive the msi (Windows Installer) package name for the project.
|
@@ -213,10 +214,7 @@ class Vanagon
|
|
213
214
|
# @return [String] name of the windows package for this project
|
214
215
|
def msi_package_name(project)
|
215
216
|
# Decided to use native project version in hope msi versioning doesn't have same resrictions as nuget
|
216
|
-
#
|
217
|
-
# pftw and vanagon, we are putting in VANAGON to the filename so the names will
|
218
|
-
# be different. When pftw is deprecated, so should this convention
|
219
|
-
"#{project.name}-#{project.version}.#{project.release}-#{@architecture}_VANAGON.msi"
|
217
|
+
"#{project.name}-#{project.version}.#{project.release}-#{@architecture}.msi"
|
220
218
|
end
|
221
219
|
|
222
220
|
# Method to derive the package name for the project.
|
@@ -287,7 +285,7 @@ class Vanagon
|
|
287
285
|
if File.extname(definition.path) == '.ps1'
|
288
286
|
commands << %(powershell.exe -NoProfile -ExecutionPolicy Bypass -Command 'iex ((new-object net.webclient).DownloadString(\"#{definition}\"))')
|
289
287
|
else
|
290
|
-
commands << %(C:/ProgramData/chocolatey/bin/choco.exe source add -n #{definition.host}-#{definition.path.
|
288
|
+
commands << %(C:/ProgramData/chocolatey/bin/choco.exe source add -n #{definition.host}-#{definition.path.tr('/', '-')} -s "#{definition}" --debug || echo "Oops, it seems that you don't have chocolatey installed on this system. Please ensure it's there by adding something like 'plat.add_repository 'https://chocolatey.org/install.ps1'' to your platform definition.")
|
291
289
|
end
|
292
290
|
else
|
293
291
|
raise Vanagon::Error, "Invalid repo specification #{definition}"
|
@@ -296,16 +294,6 @@ class Vanagon
|
|
296
294
|
commands
|
297
295
|
end
|
298
296
|
|
299
|
-
# Get the expected output dir for the windows packages. This allows us to
|
300
|
-
# use some standard tools to ship internally.
|
301
|
-
#
|
302
|
-
# @param target_repo [String] optional repo target for built packages defined
|
303
|
-
# at the project level
|
304
|
-
# @return [String] relative path to where windows packages should be staged
|
305
|
-
def output_dir(target_repo = "")
|
306
|
-
File.join("windows", target_repo, @architecture)
|
307
|
-
end
|
308
|
-
|
309
297
|
# Generate the underlying directory structure of
|
310
298
|
# any binary files referenced in services. note that
|
311
299
|
# this function does not generate the structure of
|
@@ -335,12 +323,14 @@ class Vanagon
|
|
335
323
|
# iterate over all paths specified and break each one
|
336
324
|
# in to its specific directories. This will generate_wix_dirs
|
337
325
|
# an n-ary tree structure matching the specs from the input
|
338
|
-
items.
|
326
|
+
items.each_with_index do |item, item_idx|
|
339
327
|
# Always start at the beginning
|
340
328
|
curr = root
|
341
329
|
names = item[:path].split(File::SEPARATOR)
|
342
|
-
names.
|
343
|
-
|
330
|
+
names.each_with_index do |name, names_idx|
|
331
|
+
# We concat the indexes of each loop to name to ensure the ids of all
|
332
|
+
# elements will be unique.
|
333
|
+
curr = insert_child(curr, name, "#{name}_#{item_idx}_#{names_idx}")
|
344
334
|
end
|
345
335
|
# at this point, curr will be the top dir, override the id if
|
346
336
|
# id exists
|
@@ -356,9 +346,9 @@ class Vanagon
|
|
356
346
|
# @param [HASH] curr, current object we are on
|
357
347
|
# @param [string] name, name of new object we are to search for and
|
358
348
|
# create if necessary
|
359
|
-
def insert_child(curr, name)
|
349
|
+
def insert_child(curr, name, id)
|
360
350
|
#The Id field will default to name, but be overridden later
|
361
|
-
new_obj = { :name => name, :id =>
|
351
|
+
new_obj = { :name => name, :id => id, :elements_to_add => [], :children => [] }
|
362
352
|
if (child_index = index_of_child(new_obj, curr[:children]))
|
363
353
|
curr = curr[:children][child_index]
|
364
354
|
else
|
@@ -374,7 +364,7 @@ class Vanagon
|
|
374
364
|
# @param [string] path string of directory
|
375
365
|
# @param [@project] project object
|
376
366
|
def strip_and_format_path(path, project)
|
377
|
-
formatted_path = path.
|
367
|
+
formatted_path = path.tr('\\', '\/')
|
378
368
|
path_regex = /\/?SourceDir\/#{project.settings[:base_dir]}\/#{project.settings[:company_id]}\/#{project.settings[:product_id]}\//
|
379
369
|
File.dirname(formatted_path.sub(path_regex, ''))
|
380
370
|
end
|
@@ -394,14 +384,14 @@ class Vanagon
|
|
394
384
|
string = ''
|
395
385
|
unless root[:children].empty?
|
396
386
|
root[:children].each do |child|
|
397
|
-
string +=
|
387
|
+
string += "<Directory Name=\"#{child[:name]}\" Id=\"#{child[:id]}\">\n"
|
398
388
|
unless child[:elements_to_add].empty?
|
399
389
|
child[:elements_to_add].each do |element|
|
400
390
|
string += element
|
401
391
|
end
|
402
392
|
end
|
403
393
|
string += generate_wix_from_graph(child)
|
404
|
-
string +=
|
394
|
+
string += "</Directory>\n"
|
405
395
|
end
|
406
396
|
return string
|
407
397
|
end
|
data/lib/vanagon/project.rb
CHANGED
@@ -55,7 +55,7 @@ class Vanagon
|
|
55
55
|
|
56
56
|
# Magic getter to retrieve settings in the project
|
57
57
|
def method_missing(method, *args)
|
58
|
-
if @settings.
|
58
|
+
if @settings.key?(method)
|
59
59
|
return @settings[method]
|
60
60
|
end
|
61
61
|
end
|
@@ -236,7 +236,7 @@ class Vanagon
|
|
236
236
|
# Gets the highest level directories declared by the project
|
237
237
|
#
|
238
238
|
# @return [Array] the highest level directories that have been declared by the project
|
239
|
-
def get_root_directories
|
239
|
+
def get_root_directories # rubocop:disable Metrics/AbcSize
|
240
240
|
dirs = get_directories.map { |dir| dir.path.split('/') }
|
241
241
|
dirs.sort! { |dir1, dir2| dir1.length <=> dir2.length }
|
242
242
|
ret_dirs = []
|
data/lib/vanagon/project/dsl.rb
CHANGED
@@ -23,7 +23,7 @@ class Vanagon
|
|
23
23
|
# @param name [String] name of the project
|
24
24
|
# @param block [Proc] DSL definition of the project to call
|
25
25
|
def project(name, &block)
|
26
|
-
|
26
|
+
yield(self)
|
27
27
|
end
|
28
28
|
|
29
29
|
# Accessor for the project.
|
@@ -49,7 +49,7 @@ class Vanagon
|
|
49
49
|
if attribute_match
|
50
50
|
attribute = attribute_match.captures.first
|
51
51
|
@project.send(attribute)
|
52
|
-
elsif @project.settings.
|
52
|
+
elsif @project.settings.key?(method)
|
53
53
|
return @project.settings[method]
|
54
54
|
else
|
55
55
|
super
|
@@ -129,7 +129,7 @@ class Vanagon
|
|
129
129
|
#
|
130
130
|
# @param ver [String] version of the project
|
131
131
|
def version(ver)
|
132
|
-
@project.version = ver.
|
132
|
+
@project.version = ver.tr('-', '.')
|
133
133
|
end
|
134
134
|
|
135
135
|
# Sets the release for the project. Mainly for use in packaging.
|
data/lib/vanagon/utilities.rb
CHANGED
@@ -9,7 +9,6 @@ require 'vanagon/extensions/string'
|
|
9
9
|
|
10
10
|
class Vanagon
|
11
11
|
module Utilities
|
12
|
-
|
13
12
|
# Utility to get the md5 sum of a file
|
14
13
|
#
|
15
14
|
# @param file [String] file to md5sum
|
@@ -46,7 +45,7 @@ class Vanagon
|
|
46
45
|
# @raise [RuntimeError, Vanagon::Error] an exception is raised if the
|
47
46
|
# action is not supported, or if there is a problem with the http request,
|
48
47
|
# or if the response is not JSON
|
49
|
-
def http_request(url, type, payload = {}.to_json, header = nil)
|
48
|
+
def http_request(url, type, payload = {}.to_json, header = nil) # rubocop:disable Metrics/AbcSize
|
50
49
|
uri = URI.parse(url)
|
51
50
|
http = Net::HTTP.new(uri.host, uri.port)
|
52
51
|
|
@@ -93,7 +92,7 @@ class Vanagon
|
|
93
92
|
# @return [String] The standard output of the executed command
|
94
93
|
# @raise [Vanagon::Error] If the command fails an exception is raised
|
95
94
|
def ex(command)
|
96
|
-
ret =
|
95
|
+
ret = %x(#{command})
|
97
96
|
unless $?.success?
|
98
97
|
raise Vanagon::Error, "'#{command}' did not succeed"
|
99
98
|
end
|
@@ -133,7 +132,7 @@ class Vanagon
|
|
133
132
|
tries.to_i.times do
|
134
133
|
Timeout::timeout(timeout.to_i) do
|
135
134
|
begin
|
136
|
-
|
135
|
+
yield
|
137
136
|
return true
|
138
137
|
rescue => e
|
139
138
|
warn 'An error was encountered evaluating block. Retrying..'
|
@@ -2,11 +2,12 @@
|
|
2
2
|
|
3
3
|
# Turn off the brp-python-bytecompile script
|
4
4
|
%global __os_install_post %(echo '%{__os_install_post}' | sed -e 's!/usr/lib[^[:space:]]*/brp-python-bytecompile[[:space:]].*$!!g')
|
5
|
+
<% if @platform.is_cross_compiled_linux? -%>
|
5
6
|
# Disable brp-strip-static-archive, which on EL platforms causes
|
6
7
|
# cross-compiled static libs to end up with "no machine" as their
|
7
8
|
# architure, breaking builds:
|
8
9
|
%global __os_install_post %(echo '%{__os_install_post}' | sed -e 's!/usr/lib[^[:space:]]*/brp-strip-static-archive[[:space:]].*$!!g')
|
9
|
-
|
10
|
+
<% end -%>
|
10
11
|
|
11
12
|
Name: <%= @name %>
|
12
13
|
Version: <%= @version %>
|
@@ -8,8 +8,6 @@ describe "Vanagon::Platform::DEB" do
|
|
8
8
|
:os_name => "ubuntu",
|
9
9
|
:os_version => "10.04",
|
10
10
|
:architecture => "i386",
|
11
|
-
:output_dir => "deb/lucid/",
|
12
|
-
:output_dir_with_target => "deb/lucid/thing",
|
13
11
|
:codename => "lucid",
|
14
12
|
},
|
15
13
|
{
|
@@ -17,44 +15,10 @@ describe "Vanagon::Platform::DEB" do
|
|
17
15
|
:os_name => "debian",
|
18
16
|
:os_version => "7",
|
19
17
|
:architecture => "amd64",
|
20
|
-
:output_dir => "deb/wheezy/",
|
21
|
-
:output_dir_with_target => "deb/wheezy/thing",
|
22
18
|
:codename => "wheezy",
|
23
19
|
},
|
24
20
|
]
|
25
21
|
end
|
26
|
-
|
27
|
-
describe "#output_dir" do
|
28
|
-
it "returns an output dir consistent with the packaging repo" do
|
29
|
-
platforms.each do |plat|
|
30
|
-
|
31
|
-
plat_block = %Q[
|
32
|
-
platform "#{plat[:name]}" do |plat|
|
33
|
-
plat.codename "#{plat[:codename]}"
|
34
|
-
end
|
35
|
-
]
|
36
|
-
|
37
|
-
cur_plat = Vanagon::Platform::DSL.new(plat[:name])
|
38
|
-
cur_plat.instance_eval(plat_block)
|
39
|
-
expect(cur_plat._platform.output_dir).to eq(plat[:output_dir])
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
it "adds the target repo in the right place" do
|
44
|
-
platforms.each do |plat|
|
45
|
-
|
46
|
-
plat_block = %Q[
|
47
|
-
platform "#{plat[:name]}" do |plat|
|
48
|
-
plat.codename "#{plat[:codename]}"
|
49
|
-
end
|
50
|
-
]
|
51
|
-
|
52
|
-
cur_plat = Vanagon::Platform::DSL.new(plat[:name])
|
53
|
-
cur_plat.instance_eval(plat_block)
|
54
|
-
expect(cur_plat._platform.output_dir('thing')).to eq(plat[:output_dir_with_target])
|
55
|
-
end
|
56
|
-
end
|
57
|
-
end
|
58
22
|
end
|
59
23
|
|
60
24
|
|
@@ -7,8 +7,6 @@ describe "Vanagon::Platform::RPM" do
|
|
7
7
|
:os_name => "el",
|
8
8
|
:os_version => "5",
|
9
9
|
:architecture => "i386",
|
10
|
-
:output_dir => "el/5/products/i386",
|
11
|
-
:output_dir_with_target => "el/5/thing/i386",
|
12
10
|
:block => %Q[ platform "el-5-i386" do |plat| end ]
|
13
11
|
},
|
14
12
|
{
|
@@ -16,8 +14,6 @@ describe "Vanagon::Platform::RPM" do
|
|
16
14
|
:os_name => "fedora",
|
17
15
|
:os_version => "21",
|
18
16
|
:architecture => "x86_64",
|
19
|
-
:output_dir => "fedora/21/products/x86_64",
|
20
|
-
:output_dir_with_target => "fedora/21/thing/x86_64",
|
21
17
|
:block => %Q[ platform "fedora-21-x86_64" do |plat| end ]
|
22
18
|
},
|
23
19
|
{
|
@@ -25,8 +21,6 @@ describe "Vanagon::Platform::RPM" do
|
|
25
21
|
:os_name => "fedora",
|
26
22
|
:os_version => "21",
|
27
23
|
:architecture => "x86_64",
|
28
|
-
:output_dir => "cisco-wrlinux/7/products/x86_64",
|
29
|
-
:output_dir_with_target => "cisco-wrlinux/7/thing/x86_64",
|
30
24
|
:block => %Q[ platform "cisco-wrlinux-7-x86_64" do |plat| end ]
|
31
25
|
},
|
32
26
|
]
|
@@ -40,16 +34,6 @@ describe "Vanagon::Platform::RPM" do
|
|
40
34
|
cur_plat.instance_eval(plat[:block])
|
41
35
|
end
|
42
36
|
|
43
|
-
describe "#output_dir" do
|
44
|
-
it "returns an output dir consistent with the packaging repo" do
|
45
|
-
expect(cur_plat._platform.output_dir).to eq(plat[:output_dir])
|
46
|
-
end
|
47
|
-
|
48
|
-
it "adds the target repo in the right way" do
|
49
|
-
expect(cur_plat._platform.output_dir('thing')).to eq(plat[:output_dir_with_target])
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
37
|
describe '#rpm_defines' do
|
54
38
|
it "removes dashes from the dist macro" do
|
55
39
|
expected_dist = "--define 'dist .#{cur_plat._platform.os_name.gsub('-', '_')}#{cur_plat._platform.os_version}'"
|
@@ -25,8 +25,6 @@ describe "Vanagon::Platform::Windows" do
|
|
25
25
|
:os_name => "windows",
|
26
26
|
:os_version => "2012r2",
|
27
27
|
:architecture => "x64",
|
28
|
-
:output_dir => "windows/x64",
|
29
|
-
:output_dir_with_target => "windows/thing/x64",
|
30
28
|
:target_user => "Administrator",
|
31
29
|
:projname => "test-proj",
|
32
30
|
:block => %Q[ platform "windows-2012r2-x64" do |plat| plat.servicetype 'windows' end ]
|
@@ -52,16 +50,6 @@ HERE
|
|
52
50
|
cur_plat.instance_eval(plat[:block])
|
53
51
|
end
|
54
52
|
|
55
|
-
describe "#output_dir" do
|
56
|
-
it "returns an output dir consistent with the packaging repo" do
|
57
|
-
expect(cur_plat._platform.output_dir).to eq(plat[:output_dir])
|
58
|
-
end
|
59
|
-
|
60
|
-
it "adds the target repo in the right way" do
|
61
|
-
expect(cur_plat._platform.output_dir('thing')).to eq(plat[:output_dir_with_target])
|
62
|
-
end
|
63
|
-
end
|
64
|
-
|
65
53
|
describe '#target_user' do
|
66
54
|
it "sets the target_user to 'Administrator'" do
|
67
55
|
expect(cur_plat._platform.target_user).to eq(plat[:target_user])
|
@@ -194,7 +182,7 @@ HERE
|
|
194
182
|
comp.install_service('SourceDir/ProgramFilesFolder/TestID/TestProduct/opt/bin.exe')
|
195
183
|
expect(cur_plat._platform.generate_service_bin_dirs([comp._component.service].flatten.compact, proj._project)).to eq( \
|
196
184
|
<<-HERE
|
197
|
-
<Directory Name="opt" Id="
|
185
|
+
<Directory Name="opt" Id="opt_0_0">
|
198
186
|
<Directory Id="SERVICETESTBINDIR" />
|
199
187
|
</Directory>
|
200
188
|
HERE
|
@@ -210,7 +198,7 @@ HERE
|
|
210
198
|
expect(cur_plat._platform.generate_service_bin_dirs([comp._component.service].flatten.compact, proj._project)).to eq( \
|
211
199
|
|
212
200
|
<<-HERE
|
213
|
-
<Directory Name="opt" Id="
|
201
|
+
<Directory Name="opt" Id="opt_0_0">
|
214
202
|
<Directory Id="SERVICETEST2BINDIR" />
|
215
203
|
</Directory>
|
216
204
|
HERE
|
@@ -226,8 +214,8 @@ HERE
|
|
226
214
|
expect(cur_plat._platform.generate_service_bin_dirs([comp._component.service].flatten.compact, proj._project)).to eq( \
|
227
215
|
|
228
216
|
<<-HERE
|
229
|
-
<Directory Name="somedir" Id="
|
230
|
-
<Directory Name="someotherdir" Id="
|
217
|
+
<Directory Name="somedir" Id="somedir_0_0">
|
218
|
+
<Directory Name="someotherdir" Id="someotherdir_0_1">
|
231
219
|
<Directory Id="SERVICETESTBINDIR" />
|
232
220
|
</Directory>
|
233
221
|
</Directory>
|
@@ -247,7 +235,7 @@ HERE
|
|
247
235
|
comp2.install_service('SourceDir\\ProgramFilesFolder\\TestID\\TestProduct\\somedir\\bin.exe')
|
248
236
|
expect(cur_plat._platform.generate_service_bin_dirs([comp._component.service, comp2._component.service].flatten.compact, proj._project)).to eq( \
|
249
237
|
<<-HERE
|
250
|
-
<Directory Name="somedir" Id="
|
238
|
+
<Directory Name="somedir" Id="somedir_0_0">
|
251
239
|
<Directory Id="SERVICETESTBINDIR" />
|
252
240
|
<Directory Id="SERVICETEST2BINDIR" />
|
253
241
|
</Directory>
|
@@ -267,17 +255,17 @@ HERE
|
|
267
255
|
comp3.install_service('SourceDir\\ProgramFilesFolder\\TestID\\TestProduct\\somedir\\oneUpAgain\\twoUpAgain\\bin.exe')
|
268
256
|
expect(cur_plat._platform.generate_service_bin_dirs([comp._component.service, comp2._component.service, comp3._component.service].flatten.compact, proj._project)).to eq( \
|
269
257
|
<<-HERE
|
270
|
-
<Directory Name="somedir" Id="
|
271
|
-
<Directory Name="oneUp" Id="
|
272
|
-
<Directory Name="twoUp" Id="
|
258
|
+
<Directory Name="somedir" Id="somedir_0_0">
|
259
|
+
<Directory Name="oneUp" Id="oneUp_0_1">
|
260
|
+
<Directory Name="twoUp" Id="twoUp_0_2">
|
273
261
|
<Directory Id="SERVICETEST1BINDIR" />
|
274
262
|
</Directory>
|
275
263
|
</Directory>
|
276
|
-
<Directory Name="oneUpAgain" Id="
|
277
|
-
<Directory Name="twoUp" Id="
|
264
|
+
<Directory Name="oneUpAgain" Id="oneUpAgain_1_1">
|
265
|
+
<Directory Name="twoUp" Id="twoUp_1_2">
|
278
266
|
<Directory Id="SERVICETEST2BINDIR" />
|
279
267
|
</Directory>
|
280
|
-
<Directory Name="twoUpAgain" Id="
|
268
|
+
<Directory Name="twoUpAgain" Id="twoUpAgain_2_2">
|
281
269
|
<Directory Id="SERVICETEST3BINDIR" />
|
282
270
|
</Directory>
|
283
271
|
</Directory>
|
@@ -4,22 +4,31 @@ describe "Vanagon::Platform" do
|
|
4
4
|
let(:platforms) do
|
5
5
|
[
|
6
6
|
{
|
7
|
-
:name
|
8
|
-
:os_name
|
9
|
-
:os_version
|
10
|
-
:architecture
|
7
|
+
:name => "debian-6-i386",
|
8
|
+
:os_name => "debian",
|
9
|
+
:os_version => "6",
|
10
|
+
:architecture => "i386",
|
11
|
+
:output_dir => "debian/6/i386",
|
12
|
+
:output_dir_with_target => "debian/6/thing/i386",
|
13
|
+
:block => %Q[ platform "debian-6-i386" do |plat| end ],
|
11
14
|
},
|
12
15
|
{
|
13
|
-
:name
|
14
|
-
:os_name
|
15
|
-
:os_version
|
16
|
-
:architecture
|
16
|
+
:name => "el-5-i386",
|
17
|
+
:os_name => "el",
|
18
|
+
:os_version => "5",
|
19
|
+
:architecture => "i386",
|
20
|
+
:output_dir => "el/5/i386",
|
21
|
+
:output_dir_with_target => "el/5/thing/i386",
|
22
|
+
:block => %Q[ platform "el-5-i386" do |plat| end ],
|
17
23
|
},
|
18
24
|
{
|
19
|
-
:name
|
20
|
-
:os_name
|
21
|
-
:os_version
|
22
|
-
:architecture
|
25
|
+
:name => "debian-6-i386",
|
26
|
+
:os_name => "debian",
|
27
|
+
:os_version => "6",
|
28
|
+
:architecture => "i386",
|
29
|
+
:output_dir => "updated/output",
|
30
|
+
:output_dir_with_target => "updated/output",
|
31
|
+
:block => %Q[ platform "debian-6-i386" do |plat| plat.output_dir "updated/output" end ],
|
23
32
|
},
|
24
33
|
]
|
25
34
|
end
|
@@ -42,6 +51,24 @@ describe "Vanagon::Platform" do
|
|
42
51
|
end
|
43
52
|
end
|
44
53
|
|
54
|
+
describe "#output_dir" do
|
55
|
+
it "returns correct output dir" do
|
56
|
+
platforms.each do |plat|
|
57
|
+
cur_plat = Vanagon::Platform::DSL.new(plat[:name])
|
58
|
+
cur_plat.instance_eval(plat[:block])
|
59
|
+
expect(cur_plat._platform.output_dir).to eq(plat[:output_dir])
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
it "adds the target repo in the right way" do
|
64
|
+
platforms.each do |plat|
|
65
|
+
cur_plat = Vanagon::Platform::DSL.new(plat[:name])
|
66
|
+
cur_plat.instance_eval(plat[:block])
|
67
|
+
expect(cur_plat._platform.output_dir('thing')).to eq(plat[:output_dir_with_target])
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
45
72
|
describe "#architecture" do
|
46
73
|
it "returns the architecture for the platform" do
|
47
74
|
platforms.each do |plat|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vanagon
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Puppet Labs
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-07-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec
|
@@ -214,7 +214,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
214
214
|
version: '0'
|
215
215
|
requirements: []
|
216
216
|
rubyforge_project:
|
217
|
-
rubygems_version: 2.
|
217
|
+
rubygems_version: 2.4.6
|
218
218
|
signing_key:
|
219
219
|
specification_version: 3
|
220
220
|
summary: All of your packages will fit into this van with this one simple trick.
|
@@ -251,4 +251,3 @@ test_files:
|
|
251
251
|
- spec/lib/vanagon/project_spec.rb
|
252
252
|
- spec/lib/vanagon/utilities/shell_utilities_spec.rb
|
253
253
|
- spec/lib/vanagon/utilities_spec.rb
|
254
|
-
has_rdoc:
|