vanagon 0.10.0 → 0.11.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/README.md +81 -37
- data/bin/build +1 -1
- data/lib/makefile.rb +8 -58
- data/lib/vanagon/component.rb +22 -8
- data/lib/vanagon/component/dsl.rb +7 -7
- data/lib/vanagon/component/rules.rb +7 -3
- data/lib/vanagon/component/source/local.rb +1 -1
- data/lib/vanagon/driver.rb +9 -3
- data/lib/vanagon/environment.rb +40 -29
- data/lib/vanagon/optparse.rb +1 -1
- data/lib/vanagon/platform.rb +40 -0
- data/lib/vanagon/platform/deb.rb +10 -0
- data/lib/vanagon/platform/dsl.rb +10 -12
- data/lib/vanagon/platform/rpm.rb +9 -0
- data/lib/vanagon/project.rb +9 -2
- data/lib/vanagon/project/dsl.rb +30 -9
- data/resources/Makefile.erb +3 -4
- data/resources/deb/rules.erb +4 -0
- data/resources/rpm/project.spec.erb +12 -1
- data/resources/windows/nuget/project.nuspec.erb +2 -2
- data/spec/lib/makefile_spec.rb +5 -5
- data/spec/lib/vanagon/component/dsl_spec.rb +9 -2
- data/spec/lib/vanagon/component/rules_spec.rb +12 -8
- data/spec/lib/vanagon/component/source/git_spec.rb +1 -1
- data/spec/lib/vanagon/component_spec.rb +36 -8
- data/spec/lib/vanagon/driver_spec.rb +3 -3
- data/spec/lib/vanagon/environment_spec.rb +10 -23
- data/spec/lib/vanagon/project/dsl_spec.rb +83 -0
- metadata +16 -17
- data/resources/metrics/profiling_shell.sh +0 -45
@@ -22,7 +22,7 @@ class Vanagon
|
|
22
22
|
# @return [Makefile::Rule] The $1 rule
|
23
23
|
def self.rule(target, &block)
|
24
24
|
define_method("#{target}_rule") do
|
25
|
-
Makefile::Rule.new("#{component.name}-#{target}"
|
25
|
+
Makefile::Rule.new("#{component.name}-#{target}") do |rule|
|
26
26
|
instance_exec(rule, &block)
|
27
27
|
end
|
28
28
|
end
|
@@ -70,7 +70,7 @@ class Vanagon
|
|
70
70
|
#
|
71
71
|
# @return [Makefile::Rule]
|
72
72
|
def component_rule
|
73
|
-
Makefile::Rule.new(component.name
|
73
|
+
Makefile::Rule.new(component.name) do |rule|
|
74
74
|
rule.dependencies = ["#{component.name}-install"]
|
75
75
|
end
|
76
76
|
end
|
@@ -81,7 +81,7 @@ class Vanagon
|
|
81
81
|
# @see [Vanagon::Component::Source]
|
82
82
|
rule("unpack") do |r|
|
83
83
|
r.dependencies = ['file-list-before-build']
|
84
|
-
r.recipe << component.extract_with
|
84
|
+
r.recipe << andand_multiline(component.environment_variables, component.extract_with)
|
85
85
|
r.recipe << "touch #{r.target}"
|
86
86
|
end
|
87
87
|
|
@@ -109,6 +109,7 @@ class Vanagon
|
|
109
109
|
|
110
110
|
unless component.configure.empty?
|
111
111
|
r.recipe << andand_multiline(
|
112
|
+
component.environment_variables,
|
112
113
|
"cd #{component.get_build_dir}",
|
113
114
|
component.configure
|
114
115
|
)
|
@@ -122,6 +123,7 @@ class Vanagon
|
|
122
123
|
r.dependencies = ["#{component.name}-configure"]
|
123
124
|
unless component.build.empty?
|
124
125
|
r.recipe << andand_multiline(
|
126
|
+
component.environment_variables,
|
125
127
|
"cd #{component.get_build_dir}",
|
126
128
|
component.build
|
127
129
|
)
|
@@ -135,6 +137,7 @@ class Vanagon
|
|
135
137
|
r.dependencies = ["#{component.name}-build"]
|
136
138
|
unless component.check.empty? || project.settings[:skipcheck]
|
137
139
|
r.recipe << andand_multiline(
|
140
|
+
component.environment_variables,
|
138
141
|
"cd #{component.get_build_dir}",
|
139
142
|
component.check
|
140
143
|
)
|
@@ -148,6 +151,7 @@ class Vanagon
|
|
148
151
|
r.dependencies = ["#{component.name}-check"]
|
149
152
|
unless component.install.empty?
|
150
153
|
r.recipe << andand_multiline(
|
154
|
+
component.environment_variables,
|
151
155
|
"cd #{component.get_build_dir}",
|
152
156
|
component.install
|
153
157
|
)
|
@@ -108,7 +108,7 @@ class Vanagon
|
|
108
108
|
when "xz"
|
109
109
|
%(unxz "#{file}")
|
110
110
|
when "zip"
|
111
|
-
"unzip '#{file}' || 7za x -r -tzip -o'#{File.basename(file, '.zip')}' '#{file}'"
|
111
|
+
"unzip -d '#{File.basename(file, '.zip')}' '#{file}' || 7za x -r -tzip -o'#{File.basename(file, '.zip')}' '#{file}'"
|
112
112
|
else
|
113
113
|
raise Vanagon::Error, "Don't know how to decompress #{extension} archives"
|
114
114
|
end
|
data/lib/vanagon/driver.rb
CHANGED
@@ -31,7 +31,7 @@ class Vanagon
|
|
31
31
|
filter_out_components(only_build) if only_build
|
32
32
|
loginit('vanagon_hosts.log')
|
33
33
|
|
34
|
-
@remote_workdir = options[:
|
34
|
+
@remote_workdir = options[:"remote-workdir"]
|
35
35
|
|
36
36
|
load_engine(engine, @platform, target)
|
37
37
|
rescue LoadError => e
|
@@ -120,14 +120,18 @@ class Vanagon
|
|
120
120
|
puts "Target is #{@engine.target}"
|
121
121
|
retry_task { install_build_dependencies }
|
122
122
|
retry_task { @project.fetch_sources(@workdir) }
|
123
|
+
|
123
124
|
@project.make_makefile(@workdir)
|
124
125
|
@project.make_bill_of_materials(@workdir)
|
125
126
|
@project.generate_packaging_artifacts(@workdir)
|
126
127
|
@engine.ship_workdir(@workdir)
|
127
128
|
@engine.dispatch("(cd #{@engine.remote_workdir}; #{@platform.make})")
|
128
129
|
@engine.retrieve_built_artifact
|
129
|
-
|
130
|
-
|
130
|
+
|
131
|
+
unless @preserve
|
132
|
+
@engine.teardown
|
133
|
+
cleanup_workdir
|
134
|
+
end
|
131
135
|
rescue => e
|
132
136
|
puts e
|
133
137
|
puts e.backtrace.join("\n")
|
@@ -146,6 +150,8 @@ class Vanagon
|
|
146
150
|
|
147
151
|
puts "rendering Makefile"
|
148
152
|
retry_task { @project.fetch_sources(@workdir) }
|
153
|
+
@project.make_bill_of_materials(@workdir)
|
154
|
+
@project.generate_packaging_artifacts(@workdir)
|
149
155
|
@project.make_makefile(@workdir)
|
150
156
|
end
|
151
157
|
|
data/lib/vanagon/environment.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'forwardable'
|
2
|
+
require 'vanagon/extensions/string'
|
2
3
|
|
3
4
|
class Vanagon
|
4
5
|
# Environment is a validating wrapper around a delegated Hash,
|
@@ -46,22 +47,21 @@ class Vanagon
|
|
46
47
|
@data = {}
|
47
48
|
end
|
48
49
|
|
49
|
-
# Associates the value given by value with the key given by key. Keys
|
50
|
-
# be
|
51
|
-
# shell variable names:
|
50
|
+
# Associates the value given by value with the key given by key. Keys will
|
51
|
+
# be cast to Strings, and should conform to the Open Group's guidelines for
|
52
|
+
# portable shell variable names:
|
52
53
|
# Environment variable names used by the utilities in the Shell and
|
53
54
|
# Utilities volume of IEEE Std 1003.1-2001 consist solely of uppercase
|
54
55
|
# letters, digits, and the '_' (underscore) from the characters defined
|
55
56
|
# in Portable Character Set and do not begin with a digit.
|
56
57
|
#
|
57
|
-
# Values
|
58
|
+
# Values will be cast to Strings, and will be stored precisely as given,
|
58
59
|
# so any escaped characters, single or double quotes, or whitespace will be
|
59
60
|
# preserved exactly as passed during assignment.
|
60
61
|
#
|
61
62
|
# @param key [String]
|
62
63
|
# @param value [String, Integer]
|
63
|
-
# @raise [ArgumentError] if key
|
64
|
-
# String or an Integer
|
64
|
+
# @raise [ArgumentError] if key or value cannot be cast to a String
|
65
65
|
def []=(key, value)
|
66
66
|
@data.update({ validate_key(key) => validate_value(value) })
|
67
67
|
end
|
@@ -133,32 +133,49 @@ class Vanagon
|
|
133
133
|
end
|
134
134
|
alias to_string to_s
|
135
135
|
|
136
|
-
def
|
137
|
-
|
136
|
+
def sanitize_subshells(str)
|
137
|
+
pattern = %r{\$\$\((.*?)\)}
|
138
|
+
escaped_variables = str.scan(pattern).flatten
|
138
139
|
return str if escaped_variables.empty?
|
139
140
|
|
140
|
-
warning = [%(Value "#{str}" looks like it's escaping one or more
|
141
|
-
escaped_variables.each { |v| warning.push
|
141
|
+
warning = [%(Value "#{str}" looks like it's escaping one or more values for subshell interpolation.)]
|
142
|
+
escaped_variables.each { |v| warning.push %(\t"$$(#{v})" will be coerced to "$(shell #{v})") }
|
142
143
|
warning.push <<-eos.undent
|
143
|
-
All environment variables will be resolved by Make
|
144
|
-
be
|
144
|
+
All environment variables will now be resolved by Make before they're executed
|
145
|
+
by the shell. These variables will be mangled for you for now, but you should
|
146
|
+
update your project's parameters.
|
145
147
|
eos
|
146
148
|
|
147
149
|
warn warning.join("\n")
|
148
|
-
str.gsub(
|
150
|
+
str.gsub(pattern, '$(shell \1)')
|
149
151
|
end
|
150
|
-
private :
|
152
|
+
private :sanitize_subshells
|
151
153
|
|
152
|
-
|
154
|
+
def sanitize_variables(str)
|
155
|
+
pattern = %r{\$\$([\w]+)}
|
156
|
+
escaped_variables = str.scan(pattern).flatten
|
157
|
+
return str if escaped_variables.empty?
|
158
|
+
|
159
|
+
warning = [%(Value "#{str}" looks like it's escaping one or more shell variable names for shell interpolation.)]
|
160
|
+
escaped_variables.each { |v| warning.push %(\t"$$#{v}" will be coerced to "$(#{v})") }
|
161
|
+
warning.push <<-eos.undent
|
162
|
+
All environment variables will now be resolved by Make before they're executed
|
163
|
+
by the shell. These variables will be mangled for you for now, but you should
|
164
|
+
update your project's parameters.
|
165
|
+
eos
|
166
|
+
|
167
|
+
warn warning.join("\n")
|
168
|
+
str.gsub(pattern, '$(\1)')
|
169
|
+
end
|
170
|
+
private :sanitize_variables
|
171
|
+
|
172
|
+
# Cast key to a String, and validate that it does not contain invalid
|
153
173
|
# characters, and that it does not begin with a digit
|
154
|
-
# @param key [
|
174
|
+
# @param key [Object]
|
155
175
|
# @raise [ArgumentError] if key is not a String, if key contains invalid
|
156
176
|
# characters, or if key begins with a digit
|
157
177
|
def validate_key(str)
|
158
|
-
|
159
|
-
raise ArgumentError,
|
160
|
-
'environment variable Name must be a String'
|
161
|
-
end
|
178
|
+
str = str.to_s
|
162
179
|
|
163
180
|
if str[0] =~ /\d/
|
164
181
|
raise ArgumentError,
|
@@ -175,19 +192,13 @@ class Vanagon
|
|
175
192
|
end
|
176
193
|
private :validate_key
|
177
194
|
|
178
|
-
#
|
195
|
+
# Cast str to a String, and validate that the value
|
179
196
|
# of str cannot be split into more than a single String by #shellsplit.
|
180
|
-
# @param value [
|
181
|
-
# @raise [ArgumentError] if key is not a String or an Integer
|
197
|
+
# @param value [Object]
|
182
198
|
def validate_value(str)
|
183
|
-
unless str.is_a?(String) || str.is_a?(Integer)
|
184
|
-
raise ArgumentError,
|
185
|
-
'Value must be a String or an Integer'
|
186
|
-
end
|
187
|
-
|
188
199
|
# sanitize the value, which should look for any Shell escaped
|
189
200
|
# variable names inside of the value.
|
190
|
-
|
201
|
+
sanitize_variables(sanitize_subshells(str.to_s))
|
191
202
|
end
|
192
203
|
private :validate_value
|
193
204
|
end
|
data/lib/vanagon/optparse.rb
CHANGED
@@ -4,7 +4,7 @@ class Vanagon
|
|
4
4
|
class OptParse
|
5
5
|
FLAGS = {
|
6
6
|
:workdir => ['-w DIR', '--workdir DIR', "Working directory where build source should be put (defaults to a tmpdir)"],
|
7
|
-
:
|
7
|
+
:"remote-workdir" => ['-r DIR', '--remote-workdir DIR', "Working directory where build source should be put on the remote host (defaults to a tmpdir)"],
|
8
8
|
:configdir => ['-c', '--configdir DIR', 'Configs dir (defaults to $pwd/configs)'],
|
9
9
|
:target => ['-t HOST', '--target HOST', 'Configure a target machine for build and packaging (defaults to grabbing one from the pooler)'],
|
10
10
|
:engine => ['-e ENGINE', '--engine ENGINE', "A custom engine to use (defaults to the pooler) [base, local, docker, pooler currently supported]"],
|
data/lib/vanagon/platform.rb
CHANGED
@@ -72,6 +72,11 @@ class Vanagon
|
|
72
72
|
# cross-compiled or natively compiled.
|
73
73
|
attr_accessor :cross_compiled
|
74
74
|
|
75
|
+
# Stores a string, pointing at the shell that should be used
|
76
|
+
# if a user needs to change the path or name of the shell that
|
77
|
+
# Make will run build recipes in.
|
78
|
+
attr_accessor :shell
|
79
|
+
|
75
80
|
# A string, containing the script that will be executed on
|
76
81
|
# the remote build target to determine how many CPU cores
|
77
82
|
# are available on that platform. Vanagon will use that count
|
@@ -208,9 +213,15 @@ class Vanagon
|
|
208
213
|
@find ||= "find"
|
209
214
|
@sort ||= "sort"
|
210
215
|
@copy ||= "cp"
|
216
|
+
|
217
|
+
# Our first attempt at defining metadata about a platform
|
211
218
|
@cross_compiled ||= false
|
212
219
|
end
|
213
220
|
|
221
|
+
def shell
|
222
|
+
@shell ||= "/bin/bash"
|
223
|
+
end
|
224
|
+
|
214
225
|
# This allows instance variables to be accessed using the hash lookup syntax
|
215
226
|
def [](key)
|
216
227
|
if instance_variable_get("@#{key}")
|
@@ -389,5 +400,34 @@ class Vanagon
|
|
389
400
|
def is_cross_compiled_linux?
|
390
401
|
return (is_cross_compiled? && is_linux?)
|
391
402
|
end
|
403
|
+
|
404
|
+
# Pass in a packaging override. This needs to be implemented for each
|
405
|
+
# individual platform so that this input ends up in the right place.
|
406
|
+
#
|
407
|
+
# @param project
|
408
|
+
# @param var the string that should be added to the build script.
|
409
|
+
def package_override(project, var)
|
410
|
+
fail "I don't know how to set package overrides for #{name}, teach me?"
|
411
|
+
end
|
412
|
+
|
413
|
+
# Generic adder for build repositories
|
414
|
+
#
|
415
|
+
# @param *args [Array<String>] List of arguments to pass on to the platform specific method
|
416
|
+
# @raise [Vanagon::Error] an arror is raised if the current platform does not define add_repository
|
417
|
+
def add_build_repository(*args)
|
418
|
+
if self.respond_to?(:add_repository)
|
419
|
+
self.provision_with self.send(:add_repository, *args)
|
420
|
+
else
|
421
|
+
raise Vanagon::Error, "Adding a build repository not defined for #{name}"
|
422
|
+
end
|
423
|
+
end
|
424
|
+
|
425
|
+
# Set the command to turn the target machine into a builder for vanagon
|
426
|
+
#
|
427
|
+
# @param command [String] Command to enable the target machine to build packages for the platform
|
428
|
+
def provision_with(command)
|
429
|
+
provisioning << command
|
430
|
+
provisioning.flatten!
|
431
|
+
end
|
392
432
|
end
|
393
433
|
end
|
data/lib/vanagon/platform/deb.rb
CHANGED
@@ -102,6 +102,16 @@ class Vanagon
|
|
102
102
|
provisioning << "apt-get -qq update"
|
103
103
|
end
|
104
104
|
|
105
|
+
|
106
|
+
# Pass in a packaging override. This will get added to the rules file, and
|
107
|
+
# is a good way to pass in arbitrary environment variables
|
108
|
+
#
|
109
|
+
# @param project
|
110
|
+
# @param var the string that should be added to the build script.
|
111
|
+
def package_override(project, var)
|
112
|
+
project.package_overrides << var
|
113
|
+
end
|
114
|
+
|
105
115
|
# Constructor. Sets up some defaults for the debian platform and calls the parent constructor
|
106
116
|
#
|
107
117
|
# @param name [String] name of the platform
|
data/lib/vanagon/platform/dsl.rb
CHANGED
@@ -26,7 +26,7 @@ class Vanagon
|
|
26
26
|
#
|
27
27
|
# @param name [String] name of the platform
|
28
28
|
# @param block [Proc] DSL definition of the platform to call
|
29
|
-
def platform(platform_name, &block)
|
29
|
+
def platform(platform_name, &block)
|
30
30
|
@platform = case platform_name
|
31
31
|
when /^aix-/
|
32
32
|
Vanagon::Platform::RPM::AIX.new(@name)
|
@@ -51,7 +51,6 @@ class Vanagon
|
|
51
51
|
end
|
52
52
|
|
53
53
|
yield(self)
|
54
|
-
environment 'VANAGON_PLATFORM', platform_name.tr('-', '.')
|
55
54
|
@platform
|
56
55
|
end
|
57
56
|
|
@@ -98,6 +97,13 @@ class Vanagon
|
|
98
97
|
@platform.make = make_cmd
|
99
98
|
end
|
100
99
|
|
100
|
+
# Set the path for Make's SHELL for the platform
|
101
|
+
#
|
102
|
+
# @param shell_path [String] Full path to the shell Make should use
|
103
|
+
def shell(shell_path)
|
104
|
+
@platform.shell = shell_path
|
105
|
+
end
|
106
|
+
|
101
107
|
# Set the path to tar for the platform
|
102
108
|
#
|
103
109
|
# @param tar [String] Full path to the tar command for the platform
|
@@ -138,7 +144,6 @@ class Vanagon
|
|
138
144
|
# @param xcc [Boolean] True if this is a cross-compiled platform
|
139
145
|
def cross_compiled(xcc_flag)
|
140
146
|
@platform.cross_compiled = !!xcc_flag
|
141
|
-
environment 'VANAGON_PLATFORM_XCC', @platform.cross_compiled.to_s
|
142
147
|
end
|
143
148
|
|
144
149
|
# define an explicit Dist for the platform (most likely used for RPM platforms)
|
@@ -179,8 +184,7 @@ class Vanagon
|
|
179
184
|
#
|
180
185
|
# @param command [String] Command to enable the target machine to build packages for the platform
|
181
186
|
def provision_with(command)
|
182
|
-
@platform.
|
183
|
-
@platform.provisioning.flatten!
|
187
|
+
@platform.provision_with(command)
|
184
188
|
end
|
185
189
|
|
186
190
|
# Set the command to install any needed build dependencies for the target machine
|
@@ -316,7 +320,6 @@ class Vanagon
|
|
316
320
|
# @param user[String] a user string to login with.
|
317
321
|
def target_user(user = "root")
|
318
322
|
@platform.target_user = user
|
319
|
-
environment 'VANAGON_PLATFORM_USER', user
|
320
323
|
end
|
321
324
|
|
322
325
|
# Set the target ip address or hostname to start build
|
@@ -339,7 +342,6 @@ class Vanagon
|
|
339
342
|
# @param codename [String] codename for this platform (squeeze for example)
|
340
343
|
def codename(codename)
|
341
344
|
@platform.codename = codename
|
342
|
-
environment 'VANAGON_PLATFORM_CODENAME', codename
|
343
345
|
end
|
344
346
|
|
345
347
|
def output_dir(directory)
|
@@ -379,11 +381,7 @@ class Vanagon
|
|
379
381
|
# @param *args [Array<String>] List of arguments to pass on to the platform specific method
|
380
382
|
# @raise [Vanagon::Error] an arror is raised if the current platform does not define add_repository
|
381
383
|
def add_build_repository(*args)
|
382
|
-
|
383
|
-
self.provision_with @platform.send(:add_repository, *args)
|
384
|
-
else
|
385
|
-
raise Vanagon::Error, "Adding a build repository not defined for #{@platform.name}"
|
386
|
-
end
|
384
|
+
@platform.add_build_repository(*args)
|
387
385
|
end
|
388
386
|
end
|
389
387
|
end
|
data/lib/vanagon/platform/rpm.rb
CHANGED
@@ -69,6 +69,15 @@ class Vanagon
|
|
69
69
|
commands
|
70
70
|
end
|
71
71
|
|
72
|
+
# Pass in a packaging override. This will get added to the spec file, and
|
73
|
+
# is a good way to pass in arbitrary `%_define` or `%_global`
|
74
|
+
#
|
75
|
+
# @param project
|
76
|
+
# @param var the string that should be added to the build script.
|
77
|
+
def package_override(project, var)
|
78
|
+
project.package_overrides << var
|
79
|
+
end
|
80
|
+
|
72
81
|
# Constructor. Sets up some defaults for the rpm platform and calls the parent constructor
|
73
82
|
#
|
74
83
|
# @param name [String] name of the platform
|
data/lib/vanagon/project.rb
CHANGED
@@ -73,6 +73,13 @@ class Vanagon
|
|
73
73
|
# project should pass to each platform
|
74
74
|
attr_accessor :environment
|
75
75
|
|
76
|
+
# Extra vars to be set in the spec file or debian rules.
|
77
|
+
# Good for setting extra %define or %global things for RPM, or env
|
78
|
+
# variables needed in the debian rules file
|
79
|
+
# No extra munging will be performed, so these should be set as you want
|
80
|
+
# them to appear in your spec/rules files!
|
81
|
+
attr_accessor :package_overrides
|
82
|
+
|
76
83
|
# Loads a given project from the configdir
|
77
84
|
#
|
78
85
|
# @param name [String] the name of the project
|
@@ -114,6 +121,7 @@ class Vanagon
|
|
114
121
|
@replaces = []
|
115
122
|
@provides = []
|
116
123
|
@conflicts = []
|
124
|
+
@package_overrides = []
|
117
125
|
end
|
118
126
|
|
119
127
|
# Magic getter to retrieve settings in the project
|
@@ -393,7 +401,7 @@ class Vanagon
|
|
393
401
|
files.push get_files.map(&:path)
|
394
402
|
files.push get_configfiles.map(&:path)
|
395
403
|
if @platform.is_windows?
|
396
|
-
files.flatten.map { |f| "
|
404
|
+
files.flatten.map { |f| "$(shell cygpath --mixed --long-name '#{f}')" }
|
397
405
|
else
|
398
406
|
files.flatten
|
399
407
|
end
|
@@ -462,7 +470,6 @@ class Vanagon
|
|
462
470
|
#
|
463
471
|
# @param workdir [String] workdir to put the packaging files into
|
464
472
|
def generate_packaging_artifacts(workdir)
|
465
|
-
FileUtils.install File.join(VANAGON_ROOT, "resources", "metrics", "profiling_shell.sh"), File.join(workdir, "profiling_shell.sh"), :mode => 0775
|
466
473
|
@platform.generate_packaging_artifacts(workdir, @name, binding)
|
467
474
|
end
|
468
475
|
end
|
data/lib/vanagon/project/dsl.rb
CHANGED
@@ -24,7 +24,6 @@ class Vanagon
|
|
24
24
|
# @param block [Proc] DSL definition of the project to call
|
25
25
|
def project(name, &block)
|
26
26
|
yield(self)
|
27
|
-
environment 'VANAGON_PROJECT', @name
|
28
27
|
end
|
29
28
|
|
30
29
|
# Accessor for the project.
|
@@ -70,6 +69,10 @@ class Vanagon
|
|
70
69
|
@project.settings[name] = value
|
71
70
|
end
|
72
71
|
|
72
|
+
def settings
|
73
|
+
@project.settings
|
74
|
+
end
|
75
|
+
|
73
76
|
# Sets the description of the project. Mainly for use in packaging.
|
74
77
|
#
|
75
78
|
# @param descr [String] description of the project
|
@@ -82,9 +85,6 @@ class Vanagon
|
|
82
85
|
# @param the_name [String] name of the project
|
83
86
|
def name(the_name)
|
84
87
|
@project.name = the_name
|
85
|
-
# Overwrite the environment variable name using the reset name
|
86
|
-
# of the project.
|
87
|
-
environment 'VANAGON_PROJECT_NAME', @project.name
|
88
88
|
end
|
89
89
|
|
90
90
|
# Sets the homepage for the project. Mainly for use in packaging.
|
@@ -99,7 +99,6 @@ class Vanagon
|
|
99
99
|
# @param page [Integer] timeout in seconds
|
100
100
|
def timeout(to)
|
101
101
|
@project.timeout = to
|
102
|
-
environment 'VANAGON_PROJECT_TIMEOUT', @project.timeout
|
103
102
|
end
|
104
103
|
|
105
104
|
# Sets the run time requirements for the project. Mainly for use in packaging.
|
@@ -140,7 +139,6 @@ class Vanagon
|
|
140
139
|
# @param ver [String] version of the project
|
141
140
|
def version(ver)
|
142
141
|
@project.version = ver.tr('-', '.')
|
143
|
-
environment 'VANAGON_PROJECT_VERSION', @project.version
|
144
142
|
end
|
145
143
|
|
146
144
|
# Sets the release for the project. Mainly for use in packaging.
|
@@ -148,7 +146,6 @@ class Vanagon
|
|
148
146
|
# @param rel [String] release of the project
|
149
147
|
def release(rel)
|
150
148
|
@project.release = rel
|
151
|
-
environment 'VANAGON_PROJECT_RELEASE', @project.release
|
152
149
|
end
|
153
150
|
|
154
151
|
# Sets the version for the project based on a git describe of the
|
@@ -162,12 +159,28 @@ class Vanagon
|
|
162
159
|
warn "Directory '#{dirname}' cannot be versioned by git. Maybe it hasn't been tagged yet?"
|
163
160
|
end
|
164
161
|
|
162
|
+
# Get the version string from a git branch name. This will look for a '.'
|
163
|
+
# delimited string of numbers of any length and return that as the version.
|
164
|
+
# For example, 'maint/1.7.0/fixing-some-bugs' will return '1.7.0' and '4.8.x'
|
165
|
+
# will return '4.8'.
|
166
|
+
#
|
167
|
+
# @return version string parsed from branch name, fails if unable to find version
|
168
|
+
def version_from_branch
|
169
|
+
branch = Git.open(File.expand_path("..", Vanagon::Driver.configdir)).current_branch
|
170
|
+
if branch =~ /(\d+(\.\d+)+)/
|
171
|
+
return $1
|
172
|
+
else
|
173
|
+
fail "Can't find a version in your branch, make sure it matches <number>.<number>, like maint/1.7.0/fixing-some-bugs"
|
174
|
+
end
|
175
|
+
rescue Git::GitExecuteError => e
|
176
|
+
fail "Something went wrong trying to find your git branch.\n#{e}"
|
177
|
+
end
|
178
|
+
|
165
179
|
# Sets the vendor for the project. Used in packaging artifacts.
|
166
180
|
#
|
167
181
|
# @param vend [String] vendor or author of the project
|
168
182
|
def vendor(vend)
|
169
183
|
@project.vendor = vend
|
170
|
-
environment 'VANAGON_PROJECT_VENDOR', @project.vendor
|
171
184
|
end
|
172
185
|
|
173
186
|
# Adds a directory to the list of directories provided by the project, to be included in any packages of the project
|
@@ -262,7 +275,15 @@ class Vanagon
|
|
262
275
|
# Counter for the number of times a project should retry a task
|
263
276
|
def retry_count(retry_count)
|
264
277
|
@project.retry_count = retry_count
|
265
|
-
|
278
|
+
end
|
279
|
+
|
280
|
+
# Set a package override. Will call the platform-specific implementation
|
281
|
+
# This will get set in the spec file, deb rules, etc.
|
282
|
+
#
|
283
|
+
# @param var the string to be included in the build script
|
284
|
+
def package_override(var)
|
285
|
+
platform = @project.platform
|
286
|
+
platform.package_override(self._project, var)
|
266
287
|
end
|
267
288
|
end
|
268
289
|
end
|