vanagon 0.5.1 → 0.5.2
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 +4 -4
- data/lib/vanagon/component.rb +1 -1
- data/lib/vanagon/component/dsl.rb +7 -3
- data/lib/vanagon/component/source/http.rb +1 -1
- data/lib/vanagon/engine/local.rb +15 -20
- data/lib/vanagon/optparse.rb +1 -1
- data/lib/vanagon/platform/windows.rb +88 -17
- data/lib/vanagon/utilities.rb +25 -6
- data/resources/rpm/project.spec.erb +19 -18
- data/resources/windows/nuget/chocolateyInstall.ps1 +9 -1
- data/resources/windows/wix/componentrefs.wxs.erb +11 -0
- data/resources/windows/wix/filter.xslt.erb +23 -0
- data/resources/windows/wix/project.wxs.erb +34 -0
- data/resources/windows/wix/registryEntries.wxs.erb +18 -0
- data/spec/{fixures → fixtures}/component/invalid-test-fixture.json +0 -0
- data/spec/{fixures → fixtures}/component/mcollective.service +0 -0
- data/spec/{fixures → fixtures}/component/test-fixture.json +0 -0
- data/spec/fixtures/wix/resources/windows/wix/file-1.wxs +1 -0
- data/spec/fixtures/wix/resources/windows/wix/file-2.wxs +1 -0
- data/spec/fixtures/wix/resources/windows/wix/file-3.wxs.erb +1 -0
- data/spec/fixtures/wix/resources/windows/wix/file-4.wxs.erb +1 -0
- data/spec/fixtures/wix/resources/windows/wix/include/include-sample-1.wxs +1 -0
- data/spec/fixtures/wix/resources/windows/wix/project.filter.xslt.erb +1 -0
- data/spec/fixtures/wix/resources/windows/wix/project.wxs +2 -0
- data/spec/fixtures/wix/resources/windows/wix/ui/bitmaps/bitmap.bmp +0 -0
- data/spec/fixtures/wix/resources/windows/wix/ui/ui-sample-1.wxs +1 -0
- data/spec/lib/vanagon/component/dsl_spec.rb +3 -3
- data/spec/lib/vanagon/engine/hardware_spec.rb +5 -1
- data/spec/lib/vanagon/engine/local_spec.rb +27 -0
- data/spec/lib/vanagon/platform/windows_spec.rb +123 -0
- data/spec/lib/vanagon/utilities_spec.rb +11 -0
- data/spec/spec_helper.rb +6 -0
- metadata +21 -6
- data/resources/windows/wix/service.component.wxs.erb +0 -55
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8a3414d151dd4f8f7162a06b6dfe3a5dc8c9b066
|
4
|
+
data.tar.gz: 944acf2e2cfa169c60f3072d05a5add5c03ac25c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d88e78e71ccdd7f878141dc0b26d741bbef71b9f9c21e8cc8f766bf241bc8c317c6090e9781508f812d17dddc46e8af42f39d38274618934d4871de498eecf45
|
7
|
+
data.tar.gz: 0152bcaa044f2c8f939a7c8bb4434801d023397d7d156692f6648a55bceca6958a3182577fd6b4492999712cb07ce7eaef017e7c7150cf2205153ddd318750e7
|
data/README.md
CHANGED
@@ -30,10 +30,10 @@ components, then rebuild the project and test the installed artifacts.
|
|
30
30
|
|
31
31
|
Runtime Requirements
|
32
32
|
---
|
33
|
-
Vanagon is self-contained. A recent version of ruby
|
34
|
-
required. Beyond that, ssh, rsync and git are also required on the
|
35
|
-
ssh-server and rsync is required on the target (package installation
|
36
|
-
target can be customized in the platform config for the target).
|
33
|
+
Vanagon is self-contained. A recent version of ruby (2.1 or greater) should be
|
34
|
+
all that is required. Beyond that, ssh, rsync and git are also required on the
|
35
|
+
host, and ssh-server and rsync is required on the target (package installation
|
36
|
+
for the target can be customized in the platform config for the target).
|
37
37
|
|
38
38
|
Configuration and Usage
|
39
39
|
---
|
data/lib/vanagon/component.rb
CHANGED
@@ -12,7 +12,7 @@ class Vanagon
|
|
12
12
|
attr_accessor :settings, :platform, :patches, :requires, :service, :options
|
13
13
|
attr_accessor :directories, :replaces, :provides, :cleanup_source
|
14
14
|
attr_accessor :sources, :preinstall_actions, :postinstall_actions
|
15
|
-
attr_accessor :preremove_actions, :postremove_actions
|
15
|
+
attr_accessor :preremove_actions, :postremove_actions, :license
|
16
16
|
|
17
17
|
# Loads a given component from the configdir
|
18
18
|
#
|
@@ -158,8 +158,7 @@ class Vanagon
|
|
158
158
|
# @param default_file [String] path to the default file relative to the source
|
159
159
|
# @param service_name [String] name of the service
|
160
160
|
# @param service_type [String] type of the service (network, application, system, etc)
|
161
|
-
|
162
|
-
def install_service(service_file, default_file = nil, service_name = @component.name, service_type: nil, service_hash: nil)
|
161
|
+
def install_service(service_file, default_file = nil, service_name = @component.name, service_type: nil)
|
163
162
|
case @component.platform.servicetype
|
164
163
|
when "sysv"
|
165
164
|
target_service_file = File.join(@component.platform.servicedir, service_name)
|
@@ -185,7 +184,8 @@ class Vanagon
|
|
185
184
|
# Return here because there is no file to install, just a string read in
|
186
185
|
return
|
187
186
|
when "windows"
|
188
|
-
@component.service = OpenStruct.new(
|
187
|
+
@component.service = OpenStruct.new(:id => "#{service_name.gsub(/[^A-Za-z0-9]/, '').upcase}", :service_file => service_file)
|
188
|
+
# return here as we are just collecting the name of the service file to put into the harvest filter list.
|
189
189
|
return
|
190
190
|
else
|
191
191
|
fail "Don't know how to install the #{@component.platform.servicetype}. Please teach #install_service how to do this."
|
@@ -387,6 +387,10 @@ class Vanagon
|
|
387
387
|
end
|
388
388
|
@component.postremove_actions << OpenStruct.new(:pkg_state => pkg_state, :scripts => scripts)
|
389
389
|
end
|
390
|
+
|
391
|
+
def license(license)
|
392
|
+
@component.license = license
|
393
|
+
end
|
390
394
|
end
|
391
395
|
end
|
392
396
|
end
|
@@ -101,7 +101,7 @@ class Vanagon
|
|
101
101
|
when ".tar.gz", ".tgz"
|
102
102
|
return "gunzip -c '#{@file}' | '#{tar}' xf -"
|
103
103
|
when ".zip"
|
104
|
-
return "unzip '#{@file}'"
|
104
|
+
return "unzip '#{@file}' || 7za x -r -tzip -o'#{File.basename(@file, ".zip")}' '#{@file}'"
|
105
105
|
end
|
106
106
|
else
|
107
107
|
# Extension does not appear to be an archive
|
data/lib/vanagon/engine/local.rb
CHANGED
@@ -1,40 +1,35 @@
|
|
1
|
+
require 'vanagon/engine/base'
|
1
2
|
require 'vanagon/utilities'
|
2
3
|
require 'vanagon/errors'
|
3
|
-
require 'benchmark'
|
4
4
|
|
5
5
|
class Vanagon
|
6
6
|
class Engine
|
7
|
-
class Local
|
8
|
-
attr_accessor :target
|
7
|
+
class Local < Base
|
9
8
|
|
10
9
|
def initialize(platform, target = nil)
|
11
|
-
@
|
12
|
-
@target = "local machine"
|
10
|
+
@target = target || "local machine"
|
13
11
|
@name = 'local'
|
14
|
-
|
12
|
+
super
|
15
13
|
|
16
|
-
|
17
|
-
|
18
|
-
|
14
|
+
# We inherit a set of required attributes from Base,
|
15
|
+
# and rather than instantiate a new empty array for
|
16
|
+
# required attributes, we can just clear out the
|
17
|
+
# existing ones.
|
18
|
+
@required_attributes.clear
|
19
19
|
end
|
20
20
|
|
21
|
-
#
|
22
|
-
|
23
|
-
|
24
|
-
end
|
25
|
-
|
26
|
-
# This method will take care of validation and target selection all at
|
27
|
-
# once as an easy shorthand to call from the driver
|
28
|
-
def startup(workdir)
|
29
|
-
@workdir = workdir
|
30
|
-
script = @platform.provisioning.join(' && ')
|
31
|
-
dispatch(script)
|
21
|
+
# Dispatches the command for execution
|
22
|
+
def dispatch(command, return_output = false)
|
23
|
+
Vanagon::Utilities.local_command(command, return_command_output: return_output)
|
32
24
|
end
|
33
25
|
|
34
26
|
def ship_workdir(workdir)
|
27
|
+
FileUtils.cp_r(Dir.glob("#{workdir}/*"), "#{@remote_workdir}")
|
35
28
|
end
|
36
29
|
|
37
30
|
def retrieve_built_artifact
|
31
|
+
FileUtils.mkdir_p("output")
|
32
|
+
FileUtils.cp_r(Dir.glob("#{@remote_workdir}/output/*"), "output/")
|
38
33
|
end
|
39
34
|
end
|
40
35
|
end
|
data/lib/vanagon/optparse.rb
CHANGED
@@ -8,7 +8,7 @@ class Vanagon
|
|
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]"],
|
11
|
-
:skipcheck => ['--skipcheck', '
|
11
|
+
:skipcheck => ['--skipcheck', 'Skip the `check` stage when building components'],
|
12
12
|
:preserve => ['-p', '--preserve', 'Whether to tear down the VM on success or not (defaults to false)'],
|
13
13
|
:verbose => ['-v', '--verbose', 'Verbose output (does nothing)'],
|
14
14
|
}
|
@@ -53,8 +53,68 @@ class Vanagon
|
|
53
53
|
# @param name [String] name of the project
|
54
54
|
# @param binding [Binding] binding to use in evaluating the packaging templates
|
55
55
|
def generate_msi_packaging_artifacts(workdir, name, binding)
|
56
|
-
|
57
|
-
|
56
|
+
# Copy the project specific files first
|
57
|
+
copy_from_project("./resources/windows/wix", workdir)
|
58
|
+
merge_defaults_from_vanagon(File.join(VANAGON_ROOT, "resources/windows/wix"), "#{workdir}/wix")
|
59
|
+
process_templates("#{workdir}/wix", binding)
|
60
|
+
end
|
61
|
+
|
62
|
+
# Method to recursively copy from a source project resource directory
|
63
|
+
# to a destination (wix) work directory.
|
64
|
+
# strongly suspect the original cp_r command would have done all of this.
|
65
|
+
#
|
66
|
+
# @param proj_resources [String] Project Resource File directory
|
67
|
+
# @param destination [String] Destination directory
|
68
|
+
# @param verbose [String] True or false
|
69
|
+
def copy_from_project(proj_resources, destination, verbose: false)
|
70
|
+
FileUtils.cp_r(proj_resources, destination, :verbose => verbose)
|
71
|
+
end
|
72
|
+
|
73
|
+
# Method to merge in the files from the Vanagon (generic) directories.
|
74
|
+
# Project Specific files take precedence, so since these are copied prior
|
75
|
+
# to this function, then this merge operation will ignore existing files
|
76
|
+
#
|
77
|
+
# @param vanagon_root [String] Vanagon wix resources directory
|
78
|
+
# @param destination [String] Destination directory
|
79
|
+
# @param verbose [String] True or false
|
80
|
+
def merge_defaults_from_vanagon(vanagon_root, destination, verbose: false)
|
81
|
+
# Will use this Pathname object for relative path calculations in loop below.
|
82
|
+
vanagon_path = Pathname.new(vanagon_root)
|
83
|
+
files = Dir.glob(File.join(vanagon_root, "**/*.*"))
|
84
|
+
files.each do |file|
|
85
|
+
# Get Pathname for incoming file using Pathname library
|
86
|
+
src_pathname = Pathname.new(file).dirname
|
87
|
+
# This Pathname method allows us to effectively "subtract" the leading vanagon_path
|
88
|
+
# from the source filename path. This gives us a pathname fragment that we can
|
89
|
+
# then append to the target directory, preserving the files place in the directory
|
90
|
+
# tree relative to the parent.
|
91
|
+
# See following article for example:
|
92
|
+
# http://stackoverflow.com/questions/12093770/ruby-removing-parts-a-file-path
|
93
|
+
# and http://ruby-doc.org/stdlib-2.1.0/libdoc/pathname/rdoc/Pathname.html#method-i-relative_path_from
|
94
|
+
dest_pathname_fragment = src_pathname.relative_path_from(vanagon_path)
|
95
|
+
target_dir = File.join(destination, dest_pathname_fragment.to_s)
|
96
|
+
# Create the target directory if necessary.
|
97
|
+
FileUtils.mkdir_p(target_dir) unless File.exists?(target_dir)
|
98
|
+
# Skip the file copy if either target file or ERB equivalent exists.
|
99
|
+
# This means that any files already in place in the work directory as a
|
100
|
+
# result of being copied from the project specific area will not be
|
101
|
+
# overritten.
|
102
|
+
next if File.exists?(Pathname.new(target_dir) + File.basename(file))
|
103
|
+
next if File.exists?(Pathname.new(target_dir) + File.basename(file, ".erb"))
|
104
|
+
FileUtils.cp(file, target_dir, :verbose => verbose)
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
# Method to transform ERB templates in the work directory.
|
109
|
+
#
|
110
|
+
# @param workdir [String] working directory to stage the evaluated templates in
|
111
|
+
# @param binding [Binding] binding to use in evaluating the packaging templates
|
112
|
+
def process_templates(wixworkdir, binding)
|
113
|
+
files = Dir.glob(File.join(wixworkdir, "**/*.erb"))
|
114
|
+
files.each do |file|
|
115
|
+
erb_file(file, File.join(File.dirname(file), File.basename(file, ".erb")), false, { :binding => binding })
|
116
|
+
FileUtils.rm(file)
|
117
|
+
end
|
58
118
|
end
|
59
119
|
|
60
120
|
# Method to generate the files required to build a nuget package for the project
|
@@ -103,23 +163,34 @@ class Vanagon
|
|
103
163
|
# @return [Array] list of commands required to build an msi package for the given project from a tarball
|
104
164
|
def generate_msi_package(project)
|
105
165
|
target_dir = project.repo ? output_dir(project.repo) : output_dir
|
106
|
-
cg_name = "
|
107
|
-
|
166
|
+
cg_name = "ProductComponentGroup"
|
167
|
+
wix_extensions = "-ext WiXUtilExtension -ext WixUIExtension"
|
168
|
+
candle_flags = "-dPlatform=#{@architecture} -arch #{@architecture} #{wix_extensions}"
|
169
|
+
# Enable verbose mode for the moment (will be removed for production)
|
170
|
+
# localisation flags to be added
|
171
|
+
light_flags = "-v -cultures:en-us #{wix_extensions}"
|
108
172
|
# Actual array of commands to be written to the Makefile
|
109
173
|
["mkdir -p output/#{target_dir}",
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
174
|
+
"mkdir -p $(tempdir)/{SourceDir,wix/wixobj}",
|
175
|
+
"#{@copy} -r wix/* $(tempdir)/wix/",
|
176
|
+
"gunzip -c #{project.name}-#{project.version}.tar.gz | '#{@tar}' -C '$(tempdir)/SourceDir' --strip-components 1 -xf -",
|
177
|
+
# Run the Heat command in a single pass
|
178
|
+
# Heat command documentation at: http://wixtoolset.org/documentation/manual/v3/overview/heat.html
|
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",
|
187
|
+
# Apply Candle command to all *.wxs files - generates .wixobj files in wix directory.
|
188
|
+
# cygpath conversion is necessary as candle is unable to handle posix path specs
|
189
|
+
"cd $(tempdir)/wix/wixobj; for wix_file in `find $(tempdir)/wix -name \'*.wxs\'`; do \"$$WIX/bin/candle.exe\" #{candle_flags} $$(cygpath -aw $$wix_file) || exit 1; done",
|
190
|
+
# run all wix objects through light to produce the msi
|
191
|
+
# the -b flag simply points light to where the SourceDir location is
|
192
|
+
"cd $(tempdir)/wix/wixobj; \"$$WIX/bin/light.exe\" #{light_flags} -b $$(cygpath -aw $(tempdir)) -out $$(cygpath -aw $(workdir)/output/#{target_dir}/#{msi_package_name(project)}) *.wixobj",
|
193
|
+
]
|
123
194
|
end
|
124
195
|
|
125
196
|
# Method to derive the msi (Windows Installer) package name for the project.
|
data/lib/vanagon/utilities.rb
CHANGED
@@ -266,14 +266,33 @@ class Vanagon
|
|
266
266
|
|
267
267
|
# Runs the command on the local host
|
268
268
|
#
|
269
|
-
# @param command [String] command to run
|
270
|
-
# @
|
269
|
+
# @param command [String] command to run locally
|
270
|
+
# @param return_command_output [Boolean] whether or not command output should be returned
|
271
|
+
# @return [true, String] Returns true if the command was successful or the
|
272
|
+
# output of the command if return_command_output is true
|
271
273
|
# @raise [RuntimeError] If the command fails an exception is raised
|
272
|
-
def local_command(command,
|
273
|
-
|
274
|
-
|
275
|
-
|
274
|
+
def local_command(command, return_command_output: false)
|
275
|
+
clean_environment do
|
276
|
+
puts "Executing '#{command}' locally"
|
277
|
+
if return_command_output
|
278
|
+
ret = %x(#{command}).chomp
|
279
|
+
if $?.success?
|
280
|
+
return ret
|
281
|
+
else
|
282
|
+
raise "Local command (#{command}) failed."
|
283
|
+
end
|
284
|
+
else
|
285
|
+
Kernel.system(command)
|
286
|
+
$?.success? or raise "Local command (#{command}) failed."
|
287
|
+
end
|
288
|
+
end
|
289
|
+
end
|
290
|
+
|
291
|
+
def clean_environment(&block)
|
292
|
+
return Bundler.with_clean_env { yield } if defined?(Bundler)
|
293
|
+
yield
|
276
294
|
end
|
295
|
+
private :clean_environment
|
277
296
|
|
278
297
|
# Helper method that takes a template file and runs it through ERB
|
279
298
|
#
|
@@ -118,10 +118,10 @@ done
|
|
118
118
|
%pre
|
119
119
|
# Save state so we know later if this is an upgrade or an install
|
120
120
|
mkdir -p %{_localstatedir}/lib/rpm-state/%{name}
|
121
|
-
if [ $1 -eq 1 ] ; then
|
121
|
+
if [ "$1" -eq 1 ] ; then
|
122
122
|
touch %{_localstatedir}/lib/rpm-state/%{name}/install
|
123
123
|
fi
|
124
|
-
if [ $1 -
|
124
|
+
if [ "$1" -gt 1 ] ; then
|
125
125
|
touch %{_localstatedir}/lib/rpm-state/%{name}/upgrade
|
126
126
|
fi
|
127
127
|
|
@@ -132,12 +132,12 @@ fi
|
|
132
132
|
<%- end -%>
|
133
133
|
|
134
134
|
# Run preinstall scripts on install if defined
|
135
|
-
if [ $1 -eq 1 ] ; then
|
135
|
+
if [ "$1" -eq 1 ] ; then
|
136
136
|
<%= get_preinstall_actions("install") %>
|
137
137
|
fi
|
138
138
|
|
139
139
|
# Run preinstall scripts on upgrade if defined
|
140
|
-
if [ $1 -
|
140
|
+
if [ "$1" -gt 1 ] ; then
|
141
141
|
<%= get_preinstall_actions("upgrade") %>
|
142
142
|
fi
|
143
143
|
|
@@ -146,14 +146,9 @@ fi
|
|
146
146
|
<%- if @platform.is_aix? || (@platform.is_el? && @platform.os_version.to_i == 4) -%>
|
147
147
|
## EL-4 and AIX RPM don't have %posttrans, so we'll put them here
|
148
148
|
# Run postinstall scripts on install if defined
|
149
|
-
if [ $1 -eq 1 ] ; then
|
149
|
+
if [ "$1" -eq 1 ] ; then
|
150
150
|
<%= get_postinstall_actions("install") %>
|
151
151
|
fi
|
152
|
-
|
153
|
-
# Run postinstall scripts on upgrade if defined
|
154
|
-
if [ $1 -eq 2 ] ; then
|
155
|
-
<%= get_postinstall_actions("upgrade") %>
|
156
|
-
fi
|
157
152
|
<%- end -%>
|
158
153
|
<%- get_services.each do |service| -%>
|
159
154
|
# switch based on systemd vs systemv vs smf vs aix
|
@@ -178,12 +173,12 @@ fi
|
|
178
173
|
|
179
174
|
%postun
|
180
175
|
# Run post-uninstall scripts on upgrade if defined
|
181
|
-
if [ $1 -eq 1 ] ; then
|
176
|
+
if [ "$1" -eq 1 ] ; then
|
182
177
|
<%= get_postremove_actions("upgrade") %>
|
183
178
|
fi
|
184
179
|
|
185
180
|
# Run post-uninstall scripts on removal if defined
|
186
|
-
if [ $1 -eq 0 ] ; then
|
181
|
+
if [ "$1" -eq 0 ] ; then
|
187
182
|
<%= get_postremove_actions("removal") %>
|
188
183
|
fi
|
189
184
|
|
@@ -197,26 +192,30 @@ fi
|
|
197
192
|
%systemd_postun_with_restart <%= service.name %>.service
|
198
193
|
<%- end -%>
|
199
194
|
<%- elsif @platform.servicetype == "sysv" -%>
|
200
|
-
if [ $1 -
|
195
|
+
if [ "$1" -eq 1 ]; then
|
201
196
|
/sbin/service <%= service.name %> condrestart || :
|
202
197
|
fi
|
203
198
|
<%- elsif @platform.servicetype == "aix" -%>
|
204
|
-
if [ $1 -eq 0 ]; then
|
199
|
+
if [ "$1" -eq 0 ]; then
|
205
200
|
/usr/bin/rmssys -s <%= service.name -%> > /dev/null 2>&1 || :
|
206
201
|
/usr/sbin/rmitab <%= service.name -%> > /dev/null 2>&1 || :
|
207
202
|
fi
|
203
|
+
# Run postinstall scripts on upgrade if defined
|
204
|
+
if [ "$1" -eq 1 ] ; then
|
205
|
+
<%= get_postinstall_actions("upgrade") %>
|
206
|
+
fi
|
208
207
|
<%- end -%>
|
209
208
|
<%- end -%>
|
210
209
|
|
211
210
|
|
212
211
|
%preun
|
213
212
|
# Run pre-uninstall scripts on upgrade if defined
|
214
|
-
if [ $1 -eq 1 ] ; then
|
213
|
+
if [ "$1" -eq 1 ] ; then
|
215
214
|
<%= get_preremove_actions("upgrade") %>
|
216
215
|
fi
|
217
216
|
|
218
217
|
# Run pre-uninstall scripts on removal if defined
|
219
|
-
if [ $1 -eq 0 ] ; then
|
218
|
+
if [ "$1" -eq 0 ] ; then
|
220
219
|
<%= get_preremove_actions("removal") %>
|
221
220
|
fi
|
222
221
|
|
@@ -228,12 +227,14 @@ fi
|
|
228
227
|
%systemd_preun <%= service.name %>.service
|
229
228
|
<%- end -%>
|
230
229
|
<%- elsif @platform.servicetype == "sysv" -%>
|
231
|
-
if [ $1
|
230
|
+
if [ "$1" -eq 0 ]; then
|
232
231
|
/sbin/service <%= service.name %> stop >/dev/null 2>&1 || :
|
233
232
|
chkconfig --del <%= service.name %> || :
|
234
233
|
fi
|
235
234
|
<%- elsif @platform.servicetype == "aix" -%>
|
236
|
-
|
235
|
+
if [ "$1" -eq 0 ]; then
|
236
|
+
/usr/bin/stopsrc -s <%= service.name -%> > /dev/null 2>&1 || :
|
237
|
+
fi
|
237
238
|
<%- end -%>
|
238
239
|
<%- end -%>
|
239
240
|
|
@@ -23,6 +23,14 @@ foreach ($destination in $lines) {
|
|
23
23
|
# we assume it is an empty directory and simply create one in its place. There is
|
24
24
|
# a possibility that this will hide an error where there is actually a missing
|
25
25
|
# file. However, this is such a slim possibity, this action was deemed safe.
|
26
|
-
|
26
|
+
if (Test-Path -path "$destination") {
|
27
|
+
if (Test-Path -path "$destination" -pathType container) {
|
28
|
+
Write-Debug "Directory '$destination' already exists"
|
29
|
+
} else {
|
30
|
+
Throw "File '$destination' exists and is not a directory, cannot proceed with install"
|
31
|
+
}
|
32
|
+
} else {
|
33
|
+
New-Item -ItemType directory -Path "$destination"
|
34
|
+
}
|
27
35
|
}
|
28
36
|
}
|
@@ -0,0 +1,11 @@
|
|
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
|
+
<Fragment>
|
5
|
+
<ComponentGroup Id="ServiceListGroup">
|
6
|
+
<%- get_services.each do |service| -%>
|
7
|
+
<ComponentGroupRef Id="Service_<%= service.id %>" />
|
8
|
+
<%- end -%>
|
9
|
+
</ComponentGroup>
|
10
|
+
</Fragment>
|
11
|
+
</Wix>
|
@@ -0,0 +1,23 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<xsl:stylesheet version="1.0"
|
3
|
+
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
|
4
|
+
xmlns:wix="http://schemas.microsoft.com/wix/2006/wi">
|
5
|
+
<!-- https://ahordijk.wordpress.com/2013/03/26/automatically-add-references-and-content-to-the-wix-installer/ -->
|
6
|
+
<!-- http://www.chriskonces.com/using-xslt-with-heat-exe-wix-to-create-windows-service-installs/ -->
|
7
|
+
<xsl:output method="xml" indent="yes" />
|
8
|
+
<!--<xsl:strip-space elements="*"/>-->
|
9
|
+
<xsl:template match="@*|node()">
|
10
|
+
<xsl:copy>
|
11
|
+
<xsl:apply-templates select="@*|node()"/>
|
12
|
+
</xsl:copy>
|
13
|
+
</xsl:template>
|
14
|
+
<!-- Filter out all Service File Executables from the Harvest (heat) run as these are specified in the transformed service.components.wxs file -->
|
15
|
+
<!-- The list of component service files are collected in an array so that a set of unique names can be extracted -->
|
16
|
+
<%- service_files = Array.new -%>
|
17
|
+
<%- get_services.each do |service| -%>
|
18
|
+
<%- service_files << service.service_file -%>
|
19
|
+
<%- end -%>
|
20
|
+
<%- service_files.uniq.each do |service_file| -%>
|
21
|
+
<xsl:template match="wix:Component[wix:File[@Source='<%= service_file %>']]" />
|
22
|
+
<%- end -%>
|
23
|
+
</xsl:stylesheet>
|
@@ -0,0 +1,34 @@
|
|
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
|
+
<Product
|
4
|
+
Id="*"
|
5
|
+
UpgradeCode="<%= settings[:upgrade_code] %>"
|
6
|
+
Name="<%= settings[:product_name] %>"
|
7
|
+
Language="1033"
|
8
|
+
Codepage="1252"
|
9
|
+
Version="<%= @version.sub(/\.g[0-9a-z]{7}$/, '') %>"
|
10
|
+
Manufacturer="<%= settings[:company_name] %>" >
|
11
|
+
|
12
|
+
<Package
|
13
|
+
InstallerVersion="300"
|
14
|
+
InstallScope="perMachine"
|
15
|
+
Description="<%= "#{settings[:product_id]}#{@platform.architecture == "x64" ? " (64-bit)" : ""}" %> Installer"
|
16
|
+
Comments="<%= @homepage %>"
|
17
|
+
Compressed="yes"
|
18
|
+
Platform="<%= @platform.architecture %>"
|
19
|
+
/>
|
20
|
+
|
21
|
+
<MajorUpgrade AllowDowngrades="yes" />
|
22
|
+
<Media Id="1" Cabinet="<%= settings[:product_id] %>.cab" EmbedCab="yes" CompressionLevel="high" />
|
23
|
+
|
24
|
+
<Feature Id="<%= settings[:product_id] %>Runtime" Title="<%= settings[:product_id] %> Runtime" Level="1">
|
25
|
+
<!-- We can add all components by referencing this one thing -->
|
26
|
+
<ComponentGroupRef Id="ProductComponentGroup" />
|
27
|
+
<ComponentGroupRef Id="RegistryComponentGroup" />
|
28
|
+
<ComponentGroupRef Id="ServiceListGroup" />
|
29
|
+
</Feature>
|
30
|
+
<!-- We will use DirectoryRef at the project level to hook in the project directory structure -->
|
31
|
+
<Directory Id='TARGETDIR' Name='SourceDir' />
|
32
|
+
|
33
|
+
</Product>
|
34
|
+
</Wix>
|
@@ -0,0 +1,18 @@
|
|
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
|
+
<Fragment>
|
4
|
+
<ComponentGroup Id="RegistryComponentGroup">
|
5
|
+
<Component Id="RegistryEntriesArchitectureDependent" Directory="TARGETDIR" Guid="E6D5AF4F-ACC4-4D11-AFCE-299A9ED2152C" Win64="<%= settings[:win64] %>" Permanent="yes">
|
6
|
+
<RegistryKey Root="HKLM" Key="SOFTWARE\<%= settings[:company_name] %>\<%= settings[:product_name] %>" ForceCreateOnInstall="yes" >
|
7
|
+
<RegistryValue Type="integer" Value="0"/>
|
8
|
+
<%- if @platform.architecture == "x64" -%>
|
9
|
+
<RegistryValue Name="RememberedInstallDir" Type="string" Value="[INSTALLDIR_X86]" />
|
10
|
+
<RegistryValue Name="RememberedInstallDir64" Type="string" Value="[INSTALLDIR]" KeyPath="yes" />
|
11
|
+
<%- else %>
|
12
|
+
<RegistryValue Name="RememberedInstallDir" Type="string" Value="[INSTALLDIR]" KeyPath="yes" />
|
13
|
+
<%- end -%>
|
14
|
+
</RegistryKey>
|
15
|
+
</Component>
|
16
|
+
</ComponentGroup>
|
17
|
+
</Fragment>
|
18
|
+
</Wix>
|
File without changes
|
File without changes
|
File without changes
|
@@ -0,0 +1 @@
|
|
1
|
+
# Wix Test File 1
|
@@ -0,0 +1 @@
|
|
1
|
+
# Wix Test File 2
|
@@ -0,0 +1 @@
|
|
1
|
+
# ERB Wix Test File 3
|
@@ -0,0 +1 @@
|
|
1
|
+
# ERB Wix Test File 4
|
@@ -0,0 +1 @@
|
|
1
|
+
# Sample Include file
|
@@ -0,0 +1 @@
|
|
1
|
+
# Null ERB File for testing
|
File without changes
|
@@ -0,0 +1 @@
|
|
1
|
+
# This is a sample UI wxs file
|
@@ -5,12 +5,12 @@ require 'json'
|
|
5
5
|
describe 'Vanagon::Component::DSL' do
|
6
6
|
let (:component_block) {
|
7
7
|
"component 'test-fixture' do |pkg, settings, platform|
|
8
|
-
pkg.load_from_json('spec/
|
8
|
+
pkg.load_from_json('spec/fixtures/component/test-fixture.json')
|
9
9
|
end" }
|
10
10
|
|
11
11
|
let (:invalid_component_block) {
|
12
12
|
"component 'test-fixture' do |pkg, settings, platform|
|
13
|
-
pkg.load_from_json('spec/
|
13
|
+
pkg.load_from_json('spec/fixtures/component/invalid-test-fixture.json')
|
14
14
|
end" }
|
15
15
|
|
16
16
|
let (:dummy_platform_sysv) {
|
@@ -405,7 +405,7 @@ end" }
|
|
405
405
|
|
406
406
|
it 'reads from a file when the OS is AIX for services' do
|
407
407
|
comp = Vanagon::Component::DSL.new('service-test', {}, dummy_platform_aix)
|
408
|
-
comp.install_service('spec/
|
408
|
+
comp.install_service('spec/fixtures/component/mcollective.service', nil, 'mcollective')
|
409
409
|
expect(comp._component.service.name).to eq('mcollective')
|
410
410
|
expect(comp._component.service.service_command).to include('/opt/puppetlabs/puppet/bin/ruby')
|
411
411
|
expect(comp._component.service.service_command).not_to include("\n")
|
@@ -4,7 +4,11 @@ require 'vanagon/platform'
|
|
4
4
|
require 'logger'
|
5
5
|
|
6
6
|
# Haus, I added this, cause it prevented errors.
|
7
|
-
|
7
|
+
class Vanagon
|
8
|
+
class Driver
|
9
|
+
@@logger = Logger.new('/dev/null')
|
10
|
+
end
|
11
|
+
end
|
8
12
|
|
9
13
|
describe 'Vanagon::Engine::Hardware' do
|
10
14
|
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'vanagon/engine/local'
|
2
|
+
|
3
|
+
describe 'Vanagon::Engine::Local' do
|
4
|
+
let (:platform) {
|
5
|
+
plat = Vanagon::Platform::DSL.new('debian-6-i386')
|
6
|
+
plat.instance_eval("platform('debian-6-i386') { }")
|
7
|
+
plat._platform
|
8
|
+
}
|
9
|
+
|
10
|
+
describe '#validate_platform' do
|
11
|
+
it 'succeeds' do
|
12
|
+
expect(Vanagon::Engine::Local.new(platform).validate_platform).to be(true)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
describe '#dispatch' do
|
17
|
+
it 'execs successfully' do
|
18
|
+
engine = Vanagon::Engine::Local.new(platform)
|
19
|
+
expect(engine.dispatch('true')).to be(true)
|
20
|
+
end
|
21
|
+
|
22
|
+
it 'returns the result if return_output is true' do
|
23
|
+
engine = Vanagon::Engine::Local.new(platform)
|
24
|
+
expect(engine.dispatch('true', true)).to eq('')
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -1,5 +1,20 @@
|
|
1
1
|
require 'vanagon/platform'
|
2
2
|
|
3
|
+
# These constants are defined for the purpose of the project/generic file merge tests
|
4
|
+
# to point these directories to test areas under the /tmp directory.
|
5
|
+
# This allows individual test cases to be specified accurately.
|
6
|
+
# The actual resources/windows/wix files under vanagon are avoided, as the necessary
|
7
|
+
# data structures are not available under the test conditions causing failures in the
|
8
|
+
# ERB template translation
|
9
|
+
|
10
|
+
WORK_BASE = "/tmp/vanwintest"
|
11
|
+
VANAGON_ROOT = "#{WORK_BASE}/generic"
|
12
|
+
PROJ_ROOT = "#{WORK_BASE}/project"
|
13
|
+
WORKDIR = "#{WORK_BASE}/workdir"
|
14
|
+
# Admittedly this might not be the best placed statement, but my limited rspec
|
15
|
+
# started to defeat me when it came to using "let" for wixtestfiles
|
16
|
+
WIXTESTFILES = File.expand_path("./spec/fixtures/wix/resources/windows/wix")
|
17
|
+
|
3
18
|
describe "Vanagon::Platform::Windows" do
|
4
19
|
platforms =[
|
5
20
|
{
|
@@ -10,6 +25,7 @@ describe "Vanagon::Platform::Windows" do
|
|
10
25
|
:output_dir => "windows/x64",
|
11
26
|
:output_dir_with_target => "windows/thing/x64",
|
12
27
|
:target_user => "Administrator",
|
28
|
+
:projname => "test-proj",
|
13
29
|
:block => %Q[ platform "windows-2012r2-x64" do |plat| end ]
|
14
30
|
},
|
15
31
|
]
|
@@ -38,6 +54,113 @@ describe "Vanagon::Platform::Windows" do
|
|
38
54
|
expect(cur_plat._platform.target_user).to eq(plat[:target_user])
|
39
55
|
end
|
40
56
|
end
|
57
|
+
|
58
|
+
describe '#generate_msi_packaging_artifacts' do
|
59
|
+
before(:each) do
|
60
|
+
# Create Workdir and temp root directory
|
61
|
+
FileUtils.mkdir_p("#{WORKDIR}/wix")
|
62
|
+
FileUtils.mkdir_p("#{VANAGON_ROOT}/resources/windows/wix")
|
63
|
+
FileUtils.mkdir_p("#{PROJ_ROOT}/resources/windows/wix")
|
64
|
+
# Switch directory so that project specific folder points to tmp area
|
65
|
+
@pwd = Dir.pwd
|
66
|
+
Dir.chdir(PROJ_ROOT)
|
67
|
+
end
|
68
|
+
after(:each) do
|
69
|
+
# Cleanup the complete work directory tree
|
70
|
+
FileUtils.rm_rf("#{WORK_BASE}")
|
71
|
+
Dir.chdir(@pwd)
|
72
|
+
end
|
73
|
+
|
74
|
+
it "Copies Wix File from product specific directory to output directory" do
|
75
|
+
# setup source directories and run artifact generation
|
76
|
+
FileUtils.cp("#{WIXTESTFILES}/file-1.wxs", "#{PROJ_ROOT}/resources/windows/wix/file-1.wxs")
|
77
|
+
cur_plat._platform.generate_msi_packaging_artifacts(WORKDIR, plat[:projname], binding)
|
78
|
+
# check the result
|
79
|
+
expect(File).to exist("#{WORKDIR}/wix/file-1.wxs")
|
80
|
+
end
|
81
|
+
|
82
|
+
it "Copies Wix File from Vanagon directory to work directory" do
|
83
|
+
# setup source directories and run artifact generation
|
84
|
+
FileUtils.cp("#{WIXTESTFILES}/file-1.wxs", "#{VANAGON_ROOT}/resources/windows/wix/file-1.wxs")
|
85
|
+
cur_plat._platform.generate_msi_packaging_artifacts(WORKDIR, plat[:projname], binding)
|
86
|
+
# check the result
|
87
|
+
expect(File).to exist("#{WORKDIR}/wix/file-1.wxs")
|
88
|
+
end
|
89
|
+
|
90
|
+
it "Picks Project Specific Wix File in favour of Generic Wix file" do
|
91
|
+
# setup source directories and run artifact generation
|
92
|
+
FileUtils.cp("#{WIXTESTFILES}/file-1.wxs", "#{PROJ_ROOT}/resources/windows/wix/file-wix.wxs")
|
93
|
+
FileUtils.cp("#{WIXTESTFILES}/file-2.wxs", "#{VANAGON_ROOT}/resources/windows/wix/file-wix.wxs")
|
94
|
+
cur_plat._platform.generate_msi_packaging_artifacts(WORKDIR, plat[:projname], binding)
|
95
|
+
# check the result
|
96
|
+
expect(FileUtils.compare_file("#{WIXTESTFILES}/file-1.wxs", "#{WORKDIR}/wix/file-wix.wxs")).to be_truthy
|
97
|
+
end
|
98
|
+
|
99
|
+
it "Picks Project Specific Wix File in favour of Generic ERB file" do
|
100
|
+
# setup source directories and run artifact generation
|
101
|
+
FileUtils.cp("#{WIXTESTFILES}/file-1.wxs", "#{PROJ_ROOT}/resources/windows/wix/file-wix.wxs")
|
102
|
+
FileUtils.cp("#{WIXTESTFILES}/file-3.wxs.erb", "#{VANAGON_ROOT}/resources/windows/wix/file-wix.wxs.erb")
|
103
|
+
cur_plat._platform.generate_msi_packaging_artifacts(WORKDIR, plat[:projname], binding)
|
104
|
+
# check the result
|
105
|
+
expect(FileUtils.compare_file("#{WIXTESTFILES}/file-1.wxs", "#{WORKDIR}/wix/file-wix.wxs")).to be_truthy
|
106
|
+
end
|
107
|
+
|
108
|
+
it "Picks Project Specific ERB File in favour of Generic Wix file" do
|
109
|
+
# setup source directories and run artifact generation
|
110
|
+
FileUtils.cp("#{WIXTESTFILES}/file-3.wxs.erb", "#{PROJ_ROOT}/resources/windows/wix/file-wix.wxs.erb")
|
111
|
+
FileUtils.cp("#{WIXTESTFILES}/file-2.wxs", "#{VANAGON_ROOT}/resources/windows/wix/file-wix.wxs")
|
112
|
+
cur_plat._platform.generate_msi_packaging_artifacts(WORKDIR, plat[:projname], binding)
|
113
|
+
# check the result
|
114
|
+
expect(FileUtils.compare_file("#{WIXTESTFILES}/file-3.wxs.erb", "#{WORKDIR}/wix/file-wix.wxs")).to be_truthy
|
115
|
+
end
|
116
|
+
|
117
|
+
it "Picks Project Specific ERB File in favour of Generic ERB file" do
|
118
|
+
# setup source directories and run artifact generation
|
119
|
+
FileUtils.cp("#{WIXTESTFILES}/file-3.wxs.erb", "#{PROJ_ROOT}/resources/windows/wix/file-wix.wxs.erb")
|
120
|
+
FileUtils.cp("#{WIXTESTFILES}/file-4.wxs.erb", "#{VANAGON_ROOT}/resources/windows/wix/file-wix.wxs.erb")
|
121
|
+
cur_plat._platform.generate_msi_packaging_artifacts(WORKDIR, plat[:projname], binding)
|
122
|
+
# check the result
|
123
|
+
expect(FileUtils.compare_file("#{WIXTESTFILES}/file-3.wxs.erb", "#{WORKDIR}/wix/file-wix.wxs")).to be_truthy
|
124
|
+
end
|
125
|
+
|
126
|
+
it "Copies Hierarchy of files from Product Specific Directory to output directory with ERB translation as necessary" do
|
127
|
+
# setup source directories and run artifact generation
|
128
|
+
FileUtils.cp_r("#{WIXTESTFILES}/", "#{PROJ_ROOT}/resources/windows/", :verbose => true)
|
129
|
+
cur_plat._platform.generate_msi_packaging_artifacts(WORKDIR, plat[:projname], binding)
|
130
|
+
# check the result
|
131
|
+
expect(File).to exist("#{WORKDIR}/wix/file-1.wxs")
|
132
|
+
expect(File).to exist("#{WORKDIR}/wix/file-2.wxs")
|
133
|
+
expect(File).to exist("#{WORKDIR}/wix/file-3.wxs")
|
134
|
+
expect(File).to exist("#{WORKDIR}/wix/file-4.wxs")
|
135
|
+
expect(File).to exist("#{WORKDIR}/wix/project.filter.xslt")
|
136
|
+
expect(File).to exist("#{WORKDIR}/wix/project.wxs")
|
137
|
+
expect(File).to exist("#{WORKDIR}/wix/include/include-sample-1.wxs")
|
138
|
+
expect(File).to exist("#{WORKDIR}/wix/ui/ui-sample-1.wxs")
|
139
|
+
expect(File).to exist("#{WORKDIR}/wix/ui/bitmaps/bitmap.bmp")
|
140
|
+
expect(File).not_to exist("#{WORKDIR}/wix/project.filter.xslt.erb")
|
141
|
+
expect(File).not_to exist("#{WORKDIR}/wix/file-3.wxs.erb")
|
142
|
+
expect(File).not_to exist("#{WORKDIR}/wix/file-4.wxs.erb")
|
143
|
+
end
|
144
|
+
|
145
|
+
it "Copies Hierarchy of files from vanagon directory to output directory with ERB translation as necessary" do
|
146
|
+
# setup source directories and run artifact generation
|
147
|
+
FileUtils.cp_r("#{WIXTESTFILES}/", "#{VANAGON_ROOT}/resources/windows/", :verbose => true)
|
148
|
+
cur_plat._platform.generate_msi_packaging_artifacts(WORKDIR, plat[:projname], binding)
|
149
|
+
# check the result
|
150
|
+
expect(File).to exist("#{WORKDIR}/wix/file-1.wxs")
|
151
|
+
expect(File).to exist("#{WORKDIR}/wix/file-2.wxs")
|
152
|
+
expect(File).to exist("#{WORKDIR}/wix/file-3.wxs")
|
153
|
+
expect(File).to exist("#{WORKDIR}/wix/file-4.wxs")
|
154
|
+
expect(File).to exist("#{WORKDIR}/wix/project.filter.xslt")
|
155
|
+
expect(File).to exist("#{WORKDIR}/wix/project.wxs")
|
156
|
+
expect(File).to exist("#{WORKDIR}/wix/include/include-sample-1.wxs")
|
157
|
+
expect(File).to exist("#{WORKDIR}/wix/ui/ui-sample-1.wxs")
|
158
|
+
expect(File).to exist("#{WORKDIR}/wix/ui/bitmaps/bitmap.bmp")
|
159
|
+
expect(File).not_to exist("#{WORKDIR}/wix/project.filter.xslt.erb")
|
160
|
+
expect(File).not_to exist("#{WORKDIR}/wix/file-3.wxs.erb")
|
161
|
+
expect(File).not_to exist("#{WORKDIR}/wix/file-4.wxs.erb")
|
162
|
+
end
|
163
|
+
end
|
41
164
|
end
|
42
165
|
end
|
43
166
|
end
|
@@ -41,6 +41,17 @@ describe "Vanagon::Utilities" do
|
|
41
41
|
end
|
42
42
|
end
|
43
43
|
|
44
|
+
describe '#local_command' do
|
45
|
+
it 'runs commands in an unpolluted environment' do
|
46
|
+
cmd = lambda { |arg| %(echo 'if [ "$#{arg}" = "" ]; then exit 0; else exit 1; fi' | /bin/sh) }
|
47
|
+
vars = %w(BUNDLE_BIN_PATH BUNDLE_GEMFILE)
|
48
|
+
vars.each do |var|
|
49
|
+
Vanagon::Utilities.local_command(cmd.call(var))
|
50
|
+
expect($?.exitstatus).to eq(0)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
44
55
|
describe "#is_git_repo?" do
|
45
56
|
let(:dir) { Dir.mktmpdir }
|
46
57
|
after(:each) { FileUtils.rm_rf(dir) }
|
data/spec/spec_helper.rb
ADDED
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.2
|
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-03-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec
|
@@ -132,10 +132,22 @@ 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/
|
136
|
-
-
|
137
|
-
-
|
138
|
-
-
|
135
|
+
- resources/windows/wix/componentrefs.wxs.erb
|
136
|
+
- resources/windows/wix/filter.xslt.erb
|
137
|
+
- resources/windows/wix/project.wxs.erb
|
138
|
+
- resources/windows/wix/registryEntries.wxs.erb
|
139
|
+
- spec/fixtures/component/invalid-test-fixture.json
|
140
|
+
- spec/fixtures/component/mcollective.service
|
141
|
+
- spec/fixtures/component/test-fixture.json
|
142
|
+
- spec/fixtures/wix/resources/windows/wix/file-1.wxs
|
143
|
+
- spec/fixtures/wix/resources/windows/wix/file-2.wxs
|
144
|
+
- spec/fixtures/wix/resources/windows/wix/file-3.wxs.erb
|
145
|
+
- spec/fixtures/wix/resources/windows/wix/file-4.wxs.erb
|
146
|
+
- spec/fixtures/wix/resources/windows/wix/include/include-sample-1.wxs
|
147
|
+
- spec/fixtures/wix/resources/windows/wix/project.filter.xslt.erb
|
148
|
+
- spec/fixtures/wix/resources/windows/wix/project.wxs
|
149
|
+
- spec/fixtures/wix/resources/windows/wix/ui/bitmaps/bitmap.bmp
|
150
|
+
- spec/fixtures/wix/resources/windows/wix/ui/ui-sample-1.wxs
|
139
151
|
- spec/lib/makefile_spec.rb
|
140
152
|
- spec/lib/vanagon/common/pathname_spec.rb
|
141
153
|
- spec/lib/vanagon/common/user_spec.rb
|
@@ -148,6 +160,7 @@ files:
|
|
148
160
|
- spec/lib/vanagon/engine/base_spec.rb
|
149
161
|
- spec/lib/vanagon/engine/docker_spec.rb
|
150
162
|
- spec/lib/vanagon/engine/hardware_spec.rb
|
163
|
+
- spec/lib/vanagon/engine/local_spec.rb
|
151
164
|
- spec/lib/vanagon/engine/pooler_spec.rb
|
152
165
|
- spec/lib/vanagon/optparse_spec.rb
|
153
166
|
- spec/lib/vanagon/platform/deb_spec.rb
|
@@ -161,6 +174,7 @@ files:
|
|
161
174
|
- spec/lib/vanagon/project_spec.rb
|
162
175
|
- spec/lib/vanagon/utilities/shell_utilities_spec.rb
|
163
176
|
- spec/lib/vanagon/utilities_spec.rb
|
177
|
+
- spec/spec_helper.rb
|
164
178
|
homepage: http://github.com/puppetlabs/vanagon
|
165
179
|
licenses:
|
166
180
|
- Apache-2.0
|
@@ -198,6 +212,7 @@ test_files:
|
|
198
212
|
- spec/lib/vanagon/engine/base_spec.rb
|
199
213
|
- spec/lib/vanagon/engine/docker_spec.rb
|
200
214
|
- spec/lib/vanagon/engine/hardware_spec.rb
|
215
|
+
- spec/lib/vanagon/engine/local_spec.rb
|
201
216
|
- spec/lib/vanagon/engine/pooler_spec.rb
|
202
217
|
- spec/lib/vanagon/optparse_spec.rb
|
203
218
|
- spec/lib/vanagon/platform/deb_spec.rb
|
@@ -1,55 +0,0 @@
|
|
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
|
-
<Fragment>
|
4
|
-
<%- get_services.each do |service| -%>
|
5
|
-
<%- service.options.each do |component| -%>
|
6
|
-
<DirectoryRef Id="<%= component[:directory_ref] %>">
|
7
|
-
<Component Id='<%= component[:id] %>' Guid="<%= component[:guid] %>" <%= "Win64=\"#{component[:win64]}\"" unless component[:win64].nil? %>>
|
8
|
-
<%- unless component[:conditions].nil? -%>
|
9
|
-
<%- component[:conditions].each do |condition| -%>
|
10
|
-
<Condition>
|
11
|
-
<%= condition %>
|
12
|
-
</Condition>
|
13
|
-
<%- end -%>
|
14
|
-
<%- end -%>
|
15
|
-
<File Id="<%= component[:file][:id] %>" KeyPath="yes" Source="<%= component[:file][:source] %>" />
|
16
|
-
<ServiceInstall Id="<%= component[:serviceinstall][:id] %>"
|
17
|
-
Account="[PUPPET_AGENT_ACCOUNT_DOMAIN]\[PUPPET_AGENT_ACCOUNT_USER]"
|
18
|
-
Password="[PUPPET_AGENT_ACCOUNT_PASSWORD]"
|
19
|
-
Description="<%= component[:serviceinstall][:description] %>"
|
20
|
-
DisplayName="<%= component[:serviceinstall][:displayname] %>"
|
21
|
-
Interactive="no"
|
22
|
-
Name="<%= component[:serviceinstall][:name] %>"
|
23
|
-
Start="<%= component[:serviceinstall][:start] %>"
|
24
|
-
Type="ownProcess"
|
25
|
-
ErrorControl="normal"
|
26
|
-
Vital="yes"
|
27
|
-
<%- unless component[:serviceinstall][:arguments].nil? -%>
|
28
|
-
Arguments="<%= component[:serviceinstall][:arguments] %>"
|
29
|
-
<%- end -%>
|
30
|
-
/>
|
31
|
-
<%- unless component[:registries].nil? -%>
|
32
|
-
<RegistryKey Root="<%= component[:registries][:root] %>" Key="<%= component[:registries][:key] %>">
|
33
|
-
<%- unless component[:registries][:values].nil? -%>
|
34
|
-
<%- component[:registries][:values].each do |value| -%>
|
35
|
-
<RegistryValue Name="<%= value[:name] %>" Value="<%= value[:value] %>" Type="<%= value[:type] %>" <%= "Action=\"#{value[:action]}\"" unless value[:action].nil? %> />
|
36
|
-
<%- end -%>
|
37
|
-
<%- end -%>
|
38
|
-
<%- unless component[:registries][:keys].nil? -%>
|
39
|
-
<%- component[:registries][:keys].each do |key| -%>
|
40
|
-
<RegistryKey Key="<%= key[:name] %>">
|
41
|
-
<%- key[:values].each do |value| -%>
|
42
|
-
<RegistryValue <%= "Name=\"#{value[:name]}\"" unless value[:name].nil? %> Value="<%= value[:value] %>" Type="<%= value[:type] %>" />
|
43
|
-
<%- end -%>
|
44
|
-
</RegistryKey>
|
45
|
-
<%- end -%>
|
46
|
-
<%- end -%>
|
47
|
-
</RegistryKey>
|
48
|
-
<%- end -%>
|
49
|
-
<ServiceControl Id="<%= component[:servicecontrol][:id] %>" <%= "Start=\"#{component[:servicecontrol][:start]}\"" unless component[:servicecontrol][:start].nil? %> Stop="both" Remove="uninstall" Name="<%= component[:servicecontrol][:name] %>" Wait="yes" />
|
50
|
-
</Component>
|
51
|
-
</DirectoryRef>
|
52
|
-
<%- end -%>
|
53
|
-
<%- end -%>
|
54
|
-
</Fragment>
|
55
|
-
</Wix>
|