vanagon 0.5.3 → 0.5.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/vanagon/platform/deb.rb +2 -1
- data/lib/vanagon/platform/windows.rb +69 -55
- data/resources/osx/postinstall.erb +9 -6
- data/resources/osx/preinstall.erb +10 -2
- data/resources/windows/wix/componentgroup.wxs.erb +33 -0
- data/resources/windows/wix/directorylist.wxs.erb +10 -2
- data/resources/windows/wix/filter.xslt.erb +7 -1
- data/resources/windows/wix/project.wxs.erb +7 -15
- data/resources/windows/wix/registryEntries.wxs.erb +35 -6
- data/spec/lib/vanagon/platform/windows_spec.rb +41 -47
- metadata +24 -26
- data/spec/lib/vanagon/driver_spec.rb +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d9ab396670efad7619b917bf141a6663f46b263c
|
4
|
+
data.tar.gz: 434efe6733bca07c8784502bb4d4191cd0af42cb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1a0b2555e93cc7f808b53f58ce5d2a98709e99ebb1775ccaeaf9c8625d7255793e3f4179673ff567816982c8a952b5477bcde76e4056b654854e59014906f53e
|
7
|
+
data.tar.gz: 5b4be2a7a70c6452ad19cca584488b7e9eb77f03504d310b68fd934b53b3a8eb67167af5dc625f3cd4242c4a7e219f7b732f70917398f3848d122bee7d3fa883
|
data/lib/vanagon/platform/deb.rb
CHANGED
@@ -7,6 +7,7 @@ class Vanagon
|
|
7
7
|
# @return [Array] list of commands required to build a debian package for the given project from a tarball
|
8
8
|
def generate_package(project)
|
9
9
|
target_dir = project.repo ? output_dir(project.repo) : output_dir
|
10
|
+
pkg_arch_opt = project.noarch ? "" : "-a #{@architecture}"
|
10
11
|
["mkdir -p output/#{target_dir}",
|
11
12
|
"mkdir -p $(tempdir)/#{project.name}-#{project.version}",
|
12
13
|
"cp #{project.name}-#{project.version}.tar.gz $(tempdir)/#{project.name}_#{project.version}.orig.tar.gz",
|
@@ -14,7 +15,7 @@ class Vanagon
|
|
14
15
|
"cp -pr debian $(tempdir)/#{project.name}-#{project.version}",
|
15
16
|
"gunzip -c #{project.name}-#{project.version}.tar.gz | '#{@tar}' -C '$(tempdir)/#{project.name}-#{project.version}' --strip-components 1 -xf -",
|
16
17
|
"sed -i 's/\ /?/g' $(tempdir)/#{project.name}-#{project.version}/debian/install",
|
17
|
-
"(cd $(tempdir)/#{project.name}-#{project.version}; debuild --no-lintian -uc -us)",
|
18
|
+
"(cd $(tempdir)/#{project.name}-#{project.version}; debuild --no-lintian #{pkg_arch_opt} -uc -us)",
|
18
19
|
"cp $(tempdir)/*.deb ./output/#{target_dir}"]
|
19
20
|
end
|
20
21
|
|
@@ -163,9 +163,25 @@ class Vanagon
|
|
163
163
|
# @return [Array] list of commands required to build an msi package for the given project from a tarball
|
164
164
|
def generate_msi_package(project)
|
165
165
|
target_dir = project.repo ? output_dir(project.repo) : output_dir
|
166
|
-
|
167
|
-
|
168
|
-
|
166
|
+
wix_extensions = "-ext WiXUtilExtension -ext WixUIExtension"
|
167
|
+
# Heat command documentation at: http://wixtoolset.org/documentation/manual/v3/overview/heat.html
|
168
|
+
# dir <directory> - Traverse directory to find all sub-files and directories.
|
169
|
+
# -ke - Keep Empty directories
|
170
|
+
# -cg - Component Group Name
|
171
|
+
# -gg - Generate GUIDS now
|
172
|
+
# -srd - Suppress root element generation, we want to reference one of the default root elements
|
173
|
+
# INSTALLDIR or APPDATADIR in the directorylist.wxs file, not a newly generated one.
|
174
|
+
# -sreg - Suppress registry harvesting.
|
175
|
+
# -dr - Root DirectoryRef to point all components to
|
176
|
+
# -var - Replace "SourceDir" in the @source attributes of all components with a preprocessor variable
|
177
|
+
app_heat_flags = " -dr INSTALLDIR -v -ke -indent 2 -cg AppComponentGroup -gg -srd -t wix/filter.xslt -sreg -var var.AppSourcePath "
|
178
|
+
app_source_path = "SourceDir/#{project.settings[:base_dir]}/#{project.settings[:company_id]}/#{project.settings[:product_id]}"
|
179
|
+
appdata_heat_flags = " -dr APPDATADIR -v -ke -indent 2 -cg AppDataComponentGroup -gg -srd -t wix/filter.xslt -sreg -var var.AppDataSourcePath "
|
180
|
+
appdata_source_path = "SourceDir/CommonAppDataFolder/#{project.settings[:company_id]}"
|
181
|
+
# Candle.exe preprocessor vars are required due to the above double run of heat.exe, both runs of heat use
|
182
|
+
# preprocessor variables
|
183
|
+
candle_preprocessor = "-dAppSourcePath=\"#{app_source_path}\" -dAppDataSourcePath=\"#{appdata_source_path}\""
|
184
|
+
candle_flags = "-dPlatform=#{@architecture} -arch #{@architecture} #{wix_extensions}"
|
169
185
|
# Enable verbose mode for the moment (will be removed for production)
|
170
186
|
# localisation flags to be added
|
171
187
|
light_flags = "-v -cultures:en-us #{wix_extensions}"
|
@@ -174,22 +190,17 @@ class Vanagon
|
|
174
190
|
"mkdir -p $(tempdir)/{SourceDir,wix/wixobj}",
|
175
191
|
"#{@copy} -r wix/* $(tempdir)/wix/",
|
176
192
|
"gunzip -c #{project.name}-#{project.version}.tar.gz | '#{@tar}' -C '$(tempdir)/SourceDir' --strip-components 1 -xf -",
|
177
|
-
|
178
|
-
|
179
|
-
# dir <directory> - Traverse directory to find all sub-files and directories.
|
180
|
-
# -ke - Keep Empty directories
|
181
|
-
# -cg - Component Group Name
|
182
|
-
# -gg - Generate GUIDS now
|
183
|
-
# -srd - Suppress root element generation, we want to reference the default root element
|
184
|
-
# TARGETDIR in the project.wxs file, not a newly generated one.
|
185
|
-
# -sreg - Suppress registry harvesting.
|
186
|
-
"cd $(tempdir); \"$$WIX/bin/heat.exe\" dir SourceDir -v -ke -indent 2 -cg #{cg_name} -gg -srd -t wix/filter.xslt -sreg -out wix/#{project.name}-harvest.wxs",
|
193
|
+
"cd $(tempdir); \"$$WIX/bin/heat.exe\" dir #{app_source_path} #{app_heat_flags} -out wix/#{project.name}-harvest-app.wxs",
|
194
|
+
"cd $(tempdir); \"$$WIX/bin/heat.exe\" dir #{appdata_source_path} #{appdata_heat_flags} -out wix/#{project.name}-harvest-programdata.wxs",
|
187
195
|
# Apply Candle command to all *.wxs files - generates .wixobj files in wix directory.
|
188
196
|
# cygpath conversion is necessary as candle is unable to handle posix path specs
|
189
|
-
|
197
|
+
# the preprocessor variables AppDataSourcePath and ApplicationSourcePath are required due to the -var input to the heat
|
198
|
+
# runs listed above.
|
199
|
+
"cd $(tempdir)/wix/wixobj; for wix_file in `find $(tempdir)/wix -name \'*.wxs\'`; do \"$$WIX/bin/candle.exe\" #{candle_flags} #{candle_preprocessor} $$(cygpath -aw $$wix_file) || exit 1; done",
|
190
200
|
# run all wix objects through light to produce the msi
|
191
201
|
# the -b flag simply points light to where the SourceDir location is
|
192
|
-
|
202
|
+
# -loc is required for the UI localization it points to the actual localization .wxl
|
203
|
+
"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",
|
193
204
|
]
|
194
205
|
end
|
195
206
|
|
@@ -289,35 +300,47 @@ class Vanagon
|
|
289
300
|
File.join("windows", target_repo, @architecture)
|
290
301
|
end
|
291
302
|
|
303
|
+
# Generate the underlying directory structure of
|
304
|
+
# any binary files referenced in services. note that
|
305
|
+
# this function does not generate the structure of
|
306
|
+
# the installation directory, only the structure above it.
|
307
|
+
#
|
308
|
+
# @param services, list of all services in a project
|
309
|
+
# @param project, actual project we are creating the directory structure for
|
310
|
+
def generate_service_bin_dirs(services, project)
|
311
|
+
# All service files will need a directory reference
|
312
|
+
items = services.map do |svc|
|
313
|
+
{
|
314
|
+
:path => strip_and_format_path(svc.service_file, project),
|
315
|
+
:element_to_add => "<Directory Id=\"#{svc.bindir_id}\" />\n"
|
316
|
+
}
|
317
|
+
end
|
318
|
+
generate_wix_dirs(items)
|
319
|
+
end
|
320
|
+
|
292
321
|
# Generate correctly formatted wix elements that match the
|
293
|
-
# structure of the
|
322
|
+
# structure of the itemized input
|
294
323
|
#
|
295
|
-
# @param
|
296
|
-
# and optionally:
|
324
|
+
# @param items
|
297
325
|
# @return [string] correctly formatted wix element string
|
298
|
-
def generate_wix_dirs(
|
299
|
-
directories = []
|
300
|
-
services.map { |svc| directories.push({ :path => svc.service_file, :bindir_id => svc.bindir_id }) }
|
326
|
+
def generate_wix_dirs(items)
|
301
327
|
# root refers to the root of an n-ary tree (which we are about to make)
|
302
328
|
root = { :children => [] }
|
303
329
|
# iterate over all paths specified and break each one
|
304
330
|
# in to its specific directories. This will generate_wix_dirs
|
305
331
|
# an n-ary tree structure matching the specs from the input
|
306
|
-
|
332
|
+
items.each do |item|
|
307
333
|
# Always start at the beginning
|
308
334
|
curr = root
|
309
|
-
names =
|
310
|
-
# The last entry in this list will be the actual file,
|
311
|
-
# which we do not want, we only want it's base path
|
312
|
-
names.pop
|
335
|
+
names = item[:path].split(File::SEPARATOR)
|
313
336
|
names.each do |name|
|
314
337
|
curr = insert_child(curr, name)
|
315
338
|
end
|
316
339
|
# at this point, curr will be the top dir, override the id if
|
317
340
|
# id exists
|
318
|
-
curr[:
|
341
|
+
curr[:elements_to_add].push(item[:element_to_add])
|
319
342
|
end
|
320
|
-
|
343
|
+
generate_wix_from_graph(root)
|
321
344
|
end
|
322
345
|
|
323
346
|
# insert a new object with the name "name" if it doesn't already
|
@@ -329,43 +352,34 @@ class Vanagon
|
|
329
352
|
# create if necessary
|
330
353
|
def insert_child(curr, name)
|
331
354
|
#The Id field will default to name, but be overridden later
|
332
|
-
new_obj = { :name => name, :id => name, :
|
333
|
-
if (child_index =
|
355
|
+
new_obj = { :name => name, :id => name, :elements_to_add => [], :children => [] }
|
356
|
+
if (child_index = index_of_child(new_obj, curr[:children]))
|
334
357
|
curr = curr[:children][child_index]
|
335
358
|
else
|
336
359
|
curr[:children].push(new_obj)
|
337
360
|
curr = new_obj
|
338
361
|
end
|
339
|
-
|
362
|
+
curr
|
340
363
|
end
|
341
364
|
|
342
|
-
# strip and
|
365
|
+
# strip the leading install root and the filename from the service path
|
366
|
+
# and replace any \ with /
|
367
|
+
#
|
343
368
|
# @param [string] path string of directory
|
344
|
-
|
345
|
-
|
346
|
-
|
347
|
-
|
348
|
-
|
349
|
-
# the char / or the char \. it's meant to parse out drive
|
350
|
-
# roots on windows
|
351
|
-
if path.start_with?("/") || path.start_with?("\\") || path.start_with?("SourceDir") || path =~ (/([A-Za-z])*\:(\/|\\)/)
|
352
|
-
path = path.sub(/\/|\\|([A-Za-z])*\:(\/|\\)|(\/|\\)?(SourceDir)(\/|\\)?/, '')
|
353
|
-
end
|
354
|
-
names = path.split(/\/|\\/)
|
355
|
-
end
|
356
|
-
return names
|
369
|
+
# @param [@project] project object
|
370
|
+
def strip_and_format_path(path, project)
|
371
|
+
formatted_path = path.gsub(/\\/, "\/")
|
372
|
+
path_regex = /\/?SourceDir\/#{project.settings[:base_dir]}\/#{project.settings[:company_id]}\/#{project.settings[:product_id]}\//
|
373
|
+
File.dirname(formatted_path.sub(path_regex, ''))
|
357
374
|
end
|
358
375
|
|
359
376
|
# Find if child element is the same as one of
|
360
377
|
# the old_children elements, return that child
|
361
|
-
def
|
362
|
-
|
363
|
-
|
364
|
-
end unless old_children.empty?
|
365
|
-
return nil
|
378
|
+
def index_of_child(new_child, old_children)
|
379
|
+
return nil if old_children.empty?
|
380
|
+
old_children.index { |child| child[:name] == new_child[:name] }
|
366
381
|
end
|
367
382
|
|
368
|
-
|
369
383
|
# Recursively generate wix element structure
|
370
384
|
#
|
371
385
|
# @param root, the (empty) root of an n-ary tree containing the
|
@@ -375,9 +389,9 @@ class Vanagon
|
|
375
389
|
unless root[:children].empty?
|
376
390
|
root[:children].each do |child|
|
377
391
|
string += ("<Directory Name=\"#{child[:name]}\" Id=\"#{child[:id]}\">\n")
|
378
|
-
unless child[:
|
379
|
-
child[:
|
380
|
-
string +=
|
392
|
+
unless child[:elements_to_add].empty?
|
393
|
+
child[:elements_to_add].each do |element|
|
394
|
+
string += element
|
381
395
|
end
|
382
396
|
end
|
383
397
|
string += generate_wix_from_graph(child)
|
@@ -385,7 +399,7 @@ class Vanagon
|
|
385
399
|
end
|
386
400
|
return string
|
387
401
|
end
|
388
|
-
|
402
|
+
string
|
389
403
|
end
|
390
404
|
|
391
405
|
# Constructor. Sets up some defaults for the windows platform and calls the parent constructor
|
@@ -1,7 +1,5 @@
|
|
1
1
|
#!/bin/bash
|
2
2
|
|
3
|
-
foundpkg=`/usr/sbin/pkgutil --volume "$3" --pkgs=<%= @identifier-%>.<%= @name -%>`
|
4
|
-
|
5
3
|
# Move any new configfiles into place
|
6
4
|
<%- get_configfiles.each do |config|
|
7
5
|
dest_file = config.path.gsub(/\.pristine$/, '') -%>
|
@@ -13,12 +11,17 @@ else
|
|
13
11
|
fi
|
14
12
|
<%- end -%>
|
15
13
|
|
16
|
-
|
17
|
-
|
18
|
-
if [ -n "$foundpkg" ]; then
|
14
|
+
if [ -d "/tmp/.<%= @name %>.upgrade" ]
|
19
15
|
<%- get_services.each do |service| -%>
|
20
|
-
|
16
|
+
if [ -f "/tmp/.<%= @name %>.upgrade/<%= service.name %>" ]
|
17
|
+
/bin/launchctl load -F "<%= service.service_file %>"
|
18
|
+
fi
|
21
19
|
<%- end -%>
|
22
20
|
fi
|
23
21
|
|
24
22
|
<%= File.read("resources/osx/postinstall-extras") if File.exist?("resources/osx/postinstall-extras") %>
|
23
|
+
|
24
|
+
# Cleanup after ourselves
|
25
|
+
if [ -e "/tmp/.<%= @name %>.upgrade" ]
|
26
|
+
rm -rf "/tmp/.<%= @name %>.upgrade"
|
27
|
+
fi
|
@@ -1,16 +1,24 @@
|
|
1
1
|
#!/bin/bash
|
2
2
|
|
3
|
-
#
|
3
|
+
# Cleanup previous operations
|
4
|
+
if [ -e "/tmp/.<%= @name %>.upgrade" ]
|
5
|
+
rm -rf "/tmp/.<%= @name %>.upgrade"
|
6
|
+
fi
|
4
7
|
|
8
|
+
# If we appear to be in an upgrade unload services.
|
5
9
|
foundpkg=`/usr/sbin/pkgutil --volume "$3" --pkgs=<%= @identifier-%>.<%= @name -%>`
|
6
10
|
oldbom="/usr/share/doc/<%= @name %>/bill-of-materials"
|
7
11
|
|
8
12
|
if [ -n "$foundpkg" ]; then
|
13
|
+
mkdir -p "/tmp/.<%= @name %>.upgrade"
|
14
|
+
chmod 0700 "/tmp/.<%= @name %>.upgrade"
|
15
|
+
|
9
16
|
<%- get_services.each do |service| -%>
|
10
17
|
if /bin/launchctl list "<%= service.name %>" &> /dev/null; then
|
18
|
+
touch "/tmp/.<%= @name %>.upgrade/<%= service.name %>"
|
11
19
|
/bin/launchctl unload "<%= service.service_file %>"
|
12
20
|
fi
|
13
|
-
if [ -f "$oldbom"]; then
|
21
|
+
if [ -f "$oldbom" ]; then
|
14
22
|
/bin/rm "$oldbom"
|
15
23
|
fi
|
16
24
|
<%- end -%>
|
@@ -0,0 +1,33 @@
|
|
1
|
+
<?xml version="1.0" encoding="windows-1252"?>
|
2
|
+
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">
|
3
|
+
|
4
|
+
<!-- Default component groups that are to be included in this project.
|
5
|
+
This can be copied in the project specific area to add additional component groups.
|
6
|
+
|
7
|
+
Note that a number of the groups below are "pseudo-groups" that are necessary to
|
8
|
+
force the Wix Linker (light) to include fragments (e.g. FragmentProperties).
|
9
|
+
|
10
|
+
A UI reference is can also be included in the project specific area if required.
|
11
|
+
Otherwise, the project will default here to using the minimal UI (WixUI_Minimal). -->
|
12
|
+
|
13
|
+
<Fragment>
|
14
|
+
<ComponentGroup Id="MainComponentGroup">
|
15
|
+
<!-- We can add all components by referencing this one thing -->
|
16
|
+
<ComponentGroupRef Id="AppComponentGroup" />
|
17
|
+
<ComponentGroupRef Id="AppDataComponentGroup" />
|
18
|
+
<ComponentGroupRef Id="RegistryComponentGroup" />
|
19
|
+
<%- get_services.each do |service| -%>
|
20
|
+
<ComponentGroupRef Id="<%= service.component_group_id %>" />
|
21
|
+
<%- end -%>
|
22
|
+
<!-- All of these Include refs are expected to be present -->
|
23
|
+
<ComponentGroupRef Id="FragmentProperties" />
|
24
|
+
<ComponentGroupRef Id="FragmentSequences" />
|
25
|
+
<ComponentGroupRef Id="FragmentCustomActions" />
|
26
|
+
</ComponentGroup>
|
27
|
+
|
28
|
+
<UI>
|
29
|
+
<UIRef Id="WixUI_Minimal"/>
|
30
|
+
</UI>
|
31
|
+
|
32
|
+
</Fragment>
|
33
|
+
</Wix>
|
@@ -1,9 +1,17 @@
|
|
1
1
|
<?xml version='1.0' encoding='windows-1252'?>
|
2
2
|
<Wix xmlns='http://schemas.microsoft.com/wix/2006/wi' xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">
|
3
|
-
|
4
3
|
<Fragment>
|
5
4
|
<DirectoryRef Id='TARGETDIR'>
|
6
|
-
<%=
|
5
|
+
<Directory Id="<%= settings[:base_dir] %>" >
|
6
|
+
<Directory Id="<%= settings[:company_id] %>" Name="<%= settings[:company_name] %>">
|
7
|
+
<Directory Id='INSTALLDIR' Name="<%= settings[:product_id] %>">
|
8
|
+
<%= @platform.generate_service_bin_dirs(self.get_services, self) %>
|
9
|
+
</Directory>
|
10
|
+
</Directory>
|
11
|
+
</Directory>
|
12
|
+
<Directory Id="CommonAppDataFolder" Name="CommonAppData">
|
13
|
+
<Directory Id="APPDATADIR" Name="<%= settings[:company_id] %>"/>
|
14
|
+
</Directory>
|
7
15
|
</DirectoryRef>
|
8
16
|
</Fragment>
|
9
17
|
</Wix>
|
@@ -13,9 +13,15 @@
|
|
13
13
|
</xsl:template>
|
14
14
|
<!-- Filter out all Service File Executables from the Harvest (heat) run as these are specified in the transformed service.components.wxs file -->
|
15
15
|
<!-- The list of component service files are collected in an array so that a set of unique names can be extracted -->
|
16
|
+
<!-- we have to substitue the SourceDir\\etc. etc. for $(var.ProjectSourcePath) in order to facilitate heat -->
|
17
|
+
<!-- being run in two different places, specifically it no longer runs from SourceDir so we needed to pass -->
|
18
|
+
<!-- in ProjectSourcePath to the heat runs. Thus when this filter does its work the source attribute will -->
|
19
|
+
<!-- look like $(var.ProjectSourcePath)/puppet/bin/rubyw.exe for example, not -->
|
20
|
+
<!-- SourceDir/Program64FilesFolder/Puppet/puppet/bin/ruby.exe -->
|
16
21
|
<%- service_files = Array.new -%>
|
17
22
|
<%- get_services.each do |service| -%>
|
18
|
-
|
23
|
+
|
24
|
+
<%- service_files << service.service_file.sub("SourceDir\\#{self.settings[:base_dir]}\\#{self.settings[:company_id]}\\#{self.settings[:product_id]}", "$(var.AppSourcePath)") -%>
|
19
25
|
<%- end -%>
|
20
26
|
<%- service_files.uniq.each do |service_file| -%>
|
21
27
|
<xsl:template match="wix:Component[wix:File[@Source='<%= service_file %>']]" />
|
@@ -17,26 +17,18 @@
|
|
17
17
|
Compressed="yes"
|
18
18
|
Platform="<%= @platform.architecture %>" />
|
19
19
|
|
20
|
-
|
21
|
-
|
20
|
+
<!-- We will use DirectoryRef at the project level to hook in the project directory structure -->
|
21
|
+
<Directory Id='TARGETDIR' Name='SourceDir' />
|
22
22
|
|
23
23
|
<MajorUpgrade AllowDowngrades="yes" />
|
24
24
|
<Media Id="1" Cabinet="<%= settings[:product_id] %>.cab" EmbedCab="yes" CompressionLevel="high" />
|
25
25
|
|
26
|
-
<Feature
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
<ComponentGroupRef Id="<%= service.component_group_id %>" />
|
32
|
-
<%- end -%>
|
33
|
-
<!-- All of these Include refs are expected to be present -->
|
34
|
-
<ComponentGroupRef Id="FragmentProperties" />
|
35
|
-
<ComponentGroupRef Id="FragmentSequences" />
|
36
|
-
<ComponentGroupRef Id="FragmentCustomActions" />
|
26
|
+
<Feature
|
27
|
+
Id="<%= settings[:product_id] %>Runtime"
|
28
|
+
Title="<%= settings[:product_id] %> Runtime"
|
29
|
+
Level="1">
|
30
|
+
<ComponentGroupRef Id="MainComponentGroup" />
|
37
31
|
</Feature>
|
38
|
-
<!-- We will use DirectoryRef at the project level to hook in the project directory structure -->
|
39
|
-
<Directory Id='TARGETDIR' Name='SourceDir' />
|
40
32
|
|
41
33
|
</Product>
|
42
34
|
</Wix>
|
@@ -1,15 +1,44 @@
|
|
1
1
|
<?xml version='1.0' encoding='windows-1252'?>
|
2
2
|
<Wix xmlns='http://schemas.microsoft.com/wix/2006/wi' xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">
|
3
|
+
|
4
|
+
<!--
|
5
|
+
Registry Entries
|
6
|
+
This is a suggested set of entries that can be used to record the Installation Directory for upgrade installs.
|
7
|
+
Any definitions in this will be over-ridden if the same file name is used in the Product Specific resouces directory.
|
8
|
+
-->
|
3
9
|
<Fragment>
|
4
10
|
<ComponentGroup Id="RegistryComponentGroup">
|
5
|
-
<Component
|
6
|
-
|
7
|
-
|
11
|
+
<Component
|
12
|
+
Id="RegistryEntriesArchitectureDependent"
|
13
|
+
Directory="TARGETDIR"
|
14
|
+
Guid="*"
|
15
|
+
Win64="<%= settings[:win64] %>"
|
16
|
+
Permanent="yes">
|
17
|
+
|
18
|
+
<RegistryKey
|
19
|
+
Root="HKLM"
|
20
|
+
Key="SOFTWARE\<%= settings[:company_name] %>\<%= settings[:product_name] %>"
|
21
|
+
ForceCreateOnInstall="yes" >
|
22
|
+
|
23
|
+
<RegistryValue
|
24
|
+
Type="integer"
|
25
|
+
Value="0"/>
|
8
26
|
<%- if @platform.architecture == "x64" -%>
|
9
|
-
|
10
|
-
|
27
|
+
<RegistryValue
|
28
|
+
Name="RememberedInstallDir"
|
29
|
+
Type="string"
|
30
|
+
Value="[INSTALLDIR_X86]" />
|
31
|
+
<RegistryValue
|
32
|
+
Name="RememberedInstallDir64"
|
33
|
+
Type="string"
|
34
|
+
Value="[INSTALLDIR]"
|
35
|
+
KeyPath="yes" />
|
11
36
|
<%- else %>
|
12
|
-
|
37
|
+
<RegistryValue
|
38
|
+
Name="RememberedInstallDir"
|
39
|
+
Type="string"
|
40
|
+
Value="[INSTALLDIR]"
|
41
|
+
KeyPath="yes" />
|
13
42
|
<%- end -%>
|
14
43
|
</RegistryKey>
|
15
44
|
</Component>
|
@@ -38,8 +38,15 @@ describe "Vanagon::Platform::Windows" do
|
|
38
38
|
let(:platform) { plat }
|
39
39
|
let(:cur_plat) { Vanagon::Platform::DSL.new(plat[:name]) }
|
40
40
|
let (:project_block) {
|
41
|
-
|
42
|
-
|
41
|
+
<<-HERE
|
42
|
+
project 'test-fixture' do |proj|
|
43
|
+
proj.setting(:company_name, "Test Name")
|
44
|
+
proj.setting(:company_id, "TestID")
|
45
|
+
proj.setting(:product_id, "TestProduct")
|
46
|
+
proj.setting(:base_dir, "ProgramFilesFolder")
|
47
|
+
end
|
48
|
+
HERE
|
49
|
+
}
|
43
50
|
|
44
51
|
before do
|
45
52
|
cur_plat.instance_eval(plat[:block])
|
@@ -171,10 +178,12 @@ end" }
|
|
171
178
|
describe "generate_wix_dirs" do
|
172
179
|
|
173
180
|
it "returns one directory with install_service defaults" do
|
181
|
+
proj = Vanagon::Project::DSL.new('test-fixture', {}, [])
|
182
|
+
proj.instance_eval(project_block)
|
174
183
|
cur_plat.instance_eval(plat[:block])
|
175
184
|
comp = Vanagon::Component::DSL.new('service-test', {}, cur_plat._platform)
|
176
|
-
comp.install_service('/opt/bin.exe')
|
177
|
-
expect(cur_plat._platform.
|
185
|
+
comp.install_service('SourceDir/ProgramFilesFolder/TestID/TestProduct/opt/bin.exe')
|
186
|
+
expect(cur_plat._platform.generate_service_bin_dirs([comp._component.service].flatten.compact, proj._project)).to eq( \
|
178
187
|
<<-HERE
|
179
188
|
<Directory Name="opt" Id="opt">
|
180
189
|
<Directory Id="SERVICETESTBINDIR" />
|
@@ -184,10 +193,13 @@ HERE
|
|
184
193
|
end
|
185
194
|
|
186
195
|
it "returns one directory with non-default name" do
|
196
|
+
proj = Vanagon::Project::DSL.new('test-fixture', {}, [])
|
197
|
+
proj.instance_eval(project_block)
|
187
198
|
cur_plat.instance_eval(plat[:block])
|
188
199
|
comp = Vanagon::Component::DSL.new('service-test', {}, cur_plat._platform)
|
189
|
-
comp.install_service('/opt/bin.exe', nil, "service-test-2")
|
190
|
-
expect(cur_plat._platform.
|
200
|
+
comp.install_service('SourceDir/ProgramFilesFolder/TestID/TestProduct/opt/bin.exe', nil, "service-test-2")
|
201
|
+
expect(cur_plat._platform.generate_service_bin_dirs([comp._component.service].flatten.compact, proj._project)).to eq( \
|
202
|
+
|
191
203
|
<<-HERE
|
192
204
|
<Directory Name="opt" Id="opt">
|
193
205
|
<Directory Id="SERVICETEST2BINDIR" />
|
@@ -197,56 +209,36 @@ HERE
|
|
197
209
|
end
|
198
210
|
|
199
211
|
it "returns nested directory correctly with \\" do
|
212
|
+
proj = Vanagon::Project::DSL.new('test-fixture', {}, [])
|
213
|
+
proj.instance_eval(project_block)
|
200
214
|
cur_plat.instance_eval(plat[:block])
|
201
215
|
comp = Vanagon::Component::DSL.new('service-test', {}, cur_plat._platform)
|
202
|
-
comp.install_service('
|
203
|
-
expect(cur_plat._platform.
|
204
|
-
<<-HERE
|
205
|
-
<Directory Name="root" Id="root">
|
206
|
-
<Directory Name="programfiles" Id="programfiles">
|
207
|
-
<Directory Id="SERVICETESTBINDIR" />
|
208
|
-
</Directory>
|
209
|
-
</Directory>
|
210
|
-
HERE
|
211
|
-
)
|
212
|
-
end
|
216
|
+
comp.install_service('SourceDir\\ProgramFilesFolder\\TestID\\TestProduct\\somedir\\someotherdir\\bin.exe')
|
217
|
+
expect(cur_plat._platform.generate_service_bin_dirs([comp._component.service].flatten.compact, proj._project)).to eq( \
|
213
218
|
|
214
|
-
it "removes any drive roots" do
|
215
|
-
cur_plat.instance_eval(plat[:block])
|
216
|
-
comp = Vanagon::Component::DSL.new('service-test', {}, cur_plat._platform)
|
217
|
-
comp.install_service('C:\\programfiles\\bin.exe')
|
218
|
-
expect(cur_plat._platform.generate_wix_dirs([comp._component.service].flatten.compact)).to eq( \
|
219
219
|
<<-HERE
|
220
|
-
<Directory Name="
|
220
|
+
<Directory Name="somedir" Id="somedir">
|
221
|
+
<Directory Name="someotherdir" Id="someotherdir">
|
221
222
|
<Directory Id="SERVICETESTBINDIR" />
|
222
223
|
</Directory>
|
223
|
-
HERE
|
224
|
-
)
|
225
|
-
end
|
226
|
-
|
227
|
-
it "removes SourceDir" do
|
228
|
-
cur_plat.instance_eval(plat[:block])
|
229
|
-
comp = Vanagon::Component::DSL.new('service-test', {}, cur_plat._platform)
|
230
|
-
comp.install_service('SourceDir\\programfiles\\bin.exe')
|
231
|
-
expect(cur_plat._platform.generate_wix_dirs([comp._component.service].flatten.compact)).to eq( \
|
232
|
-
<<-HERE
|
233
|
-
<Directory Name="programfiles" Id="programfiles">
|
234
|
-
<Directory Id="SERVICETESTBINDIR" />
|
235
224
|
</Directory>
|
236
225
|
HERE
|
237
226
|
)
|
238
227
|
end
|
239
228
|
|
240
229
|
|
230
|
+
|
241
231
|
it "adds a second directory for the same input but different components" do
|
232
|
+
proj = Vanagon::Project::DSL.new('test-fixture', {}, [])
|
233
|
+
proj.instance_eval(project_block)
|
242
234
|
cur_plat.instance_eval(plat[:block])
|
243
235
|
comp = Vanagon::Component::DSL.new('service-test', {}, cur_plat._platform)
|
244
|
-
comp.install_service('
|
236
|
+
comp.install_service('SourceDir\\ProgramFilesFolder\\TestID\\TestProduct\\somedir\\bin.exe')
|
245
237
|
comp2 = Vanagon::Component::DSL.new('service-test-2', {}, cur_plat._platform)
|
246
|
-
comp2.install_service('
|
247
|
-
expect(cur_plat._platform.
|
238
|
+
comp2.install_service('SourceDir\\ProgramFilesFolder\\TestID\\TestProduct\\somedir\\bin.exe')
|
239
|
+
expect(cur_plat._platform.generate_service_bin_dirs([comp._component.service, comp2._component.service].flatten.compact, proj._project)).to eq( \
|
248
240
|
<<-HERE
|
249
|
-
<Directory Name="
|
241
|
+
<Directory Name="somedir" Id="somedir">
|
250
242
|
<Directory Id="SERVICETESTBINDIR" />
|
251
243
|
<Directory Id="SERVICETEST2BINDIR" />
|
252
244
|
</Directory>
|
@@ -255,16 +247,18 @@ HERE
|
|
255
247
|
end
|
256
248
|
|
257
249
|
it "returns correctly formatted multiple nested directories" do
|
250
|
+
proj = Vanagon::Project::DSL.new('test-fixture', {}, [])
|
251
|
+
proj.instance_eval(project_block)
|
258
252
|
cur_plat.instance_eval(plat[:block])
|
259
|
-
|
260
|
-
|
261
|
-
comp2 = Vanagon::Component::DSL.new('service-
|
262
|
-
comp2.install_service('
|
263
|
-
comp3 = Vanagon::Component::DSL.new('service-
|
264
|
-
comp3.install_service('
|
265
|
-
expect(cur_plat._platform.
|
253
|
+
comp = Vanagon::Component::DSL.new('service-test-1', {}, cur_plat._platform)
|
254
|
+
comp.install_service('SourceDir\\ProgramFilesFolder\\TestID\\TestProduct\\somedir\\oneUp\\twoUp\\bin.exe')
|
255
|
+
comp2 = Vanagon::Component::DSL.new('service-test-2', {}, cur_plat._platform)
|
256
|
+
comp2.install_service('SourceDir\\ProgramFilesFolder\\TestID\\TestProduct\\somedir\\oneUpAgain\\twoUp\\bin.exe')
|
257
|
+
comp3 = Vanagon::Component::DSL.new('service-test-3', {}, cur_plat._platform)
|
258
|
+
comp3.install_service('SourceDir\\ProgramFilesFolder\\TestID\\TestProduct\\somedir\\oneUpAgain\\twoUpAgain\\bin.exe')
|
259
|
+
expect(cur_plat._platform.generate_service_bin_dirs([comp._component.service, comp2._component.service, comp3._component.service].flatten.compact, proj._project)).to eq( \
|
266
260
|
<<-HERE
|
267
|
-
<Directory Name="
|
261
|
+
<Directory Name="somedir" Id="somedir">
|
268
262
|
<Directory Name="oneUp" Id="oneUp">
|
269
263
|
<Directory Name="twoUp" Id="twoUp">
|
270
264
|
<Directory Id="SERVICETEST1BINDIR" />
|
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.5.
|
4
|
+
version: 0.5.4
|
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-03-
|
11
|
+
date: 2016-03-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec
|
@@ -132,6 +132,7 @@ files:
|
|
132
132
|
- resources/windows/nuget/chocolateyInstall.ps1
|
133
133
|
- resources/windows/nuget/chocolateyUninstall.ps1
|
134
134
|
- resources/windows/nuget/project.nuspec.erb
|
135
|
+
- resources/windows/wix/componentgroup.wxs.erb
|
135
136
|
- resources/windows/wix/directorylist.wxs.erb
|
136
137
|
- resources/windows/wix/filter.xslt.erb
|
137
138
|
- resources/windows/wix/project.wxs.erb
|
@@ -157,7 +158,6 @@ files:
|
|
157
158
|
- spec/lib/vanagon/component/source/http_spec.rb
|
158
159
|
- spec/lib/vanagon/component/source_spec.rb
|
159
160
|
- spec/lib/vanagon/component_spec.rb
|
160
|
-
- spec/lib/vanagon/driver_spec.rb
|
161
161
|
- spec/lib/vanagon/engine/base_spec.rb
|
162
162
|
- spec/lib/vanagon/engine/docker_spec.rb
|
163
163
|
- spec/lib/vanagon/engine/hardware_spec.rb
|
@@ -196,36 +196,34 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
196
196
|
version: '0'
|
197
197
|
requirements: []
|
198
198
|
rubyforge_project:
|
199
|
-
rubygems_version: 2.5
|
199
|
+
rubygems_version: 2.2.5
|
200
200
|
signing_key:
|
201
201
|
specification_version: 3
|
202
202
|
summary: All of your packages will fit into this van with this one simple trick.
|
203
203
|
test_files:
|
204
|
-
- spec/lib/
|
205
|
-
- spec/lib/vanagon/
|
204
|
+
- spec/lib/vanagon/utilities_spec.rb
|
205
|
+
- spec/lib/vanagon/platform_spec.rb
|
206
|
+
- spec/lib/vanagon/component_spec.rb
|
207
|
+
- spec/lib/vanagon/utilities/shell_utilities_spec.rb
|
208
|
+
- spec/lib/vanagon/project_spec.rb
|
209
|
+
- spec/lib/vanagon/project/dsl_spec.rb
|
206
210
|
- spec/lib/vanagon/common/user_spec.rb
|
207
|
-
- spec/lib/vanagon/
|
208
|
-
- spec/lib/vanagon/
|
209
|
-
- spec/lib/vanagon/
|
211
|
+
- spec/lib/vanagon/common/pathname_spec.rb
|
212
|
+
- spec/lib/vanagon/platform/windows_spec.rb
|
213
|
+
- spec/lib/vanagon/platform/rpm/aix_spec.rb
|
214
|
+
- spec/lib/vanagon/platform/solaris_11_spec.rb
|
215
|
+
- spec/lib/vanagon/platform/deb_spec.rb
|
216
|
+
- spec/lib/vanagon/platform/dsl_spec.rb
|
217
|
+
- spec/lib/vanagon/platform/rpm_spec.rb
|
210
218
|
- spec/lib/vanagon/component/source/http_spec.rb
|
219
|
+
- spec/lib/vanagon/component/source/git_spec.rb
|
220
|
+
- spec/lib/vanagon/component/dsl_spec.rb
|
211
221
|
- spec/lib/vanagon/component/source_spec.rb
|
212
|
-
- spec/lib/vanagon/
|
213
|
-
- spec/lib/vanagon/driver_spec.rb
|
214
|
-
- spec/lib/vanagon/engine/base_spec.rb
|
215
|
-
- spec/lib/vanagon/engine/docker_spec.rb
|
216
|
-
- spec/lib/vanagon/engine/hardware_spec.rb
|
222
|
+
- spec/lib/vanagon/component/rules_spec.rb
|
217
223
|
- spec/lib/vanagon/engine/local_spec.rb
|
224
|
+
- spec/lib/vanagon/engine/docker_spec.rb
|
218
225
|
- spec/lib/vanagon/engine/pooler_spec.rb
|
226
|
+
- spec/lib/vanagon/engine/hardware_spec.rb
|
227
|
+
- spec/lib/vanagon/engine/base_spec.rb
|
219
228
|
- spec/lib/vanagon/optparse_spec.rb
|
220
|
-
- spec/lib/
|
221
|
-
- spec/lib/vanagon/platform/dsl_spec.rb
|
222
|
-
- spec/lib/vanagon/platform/rpm/aix_spec.rb
|
223
|
-
- spec/lib/vanagon/platform/rpm_spec.rb
|
224
|
-
- spec/lib/vanagon/platform/solaris_11_spec.rb
|
225
|
-
- spec/lib/vanagon/platform/windows_spec.rb
|
226
|
-
- spec/lib/vanagon/platform_spec.rb
|
227
|
-
- spec/lib/vanagon/project/dsl_spec.rb
|
228
|
-
- spec/lib/vanagon/project_spec.rb
|
229
|
-
- spec/lib/vanagon/utilities/shell_utilities_spec.rb
|
230
|
-
- spec/lib/vanagon/utilities_spec.rb
|
231
|
-
has_rdoc:
|
229
|
+
- spec/lib/makefile_spec.rb
|
File without changes
|