simp-rake-helpers 5.3.0 → 5.4.1

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.
Files changed (62) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +8 -2
  3. data/.travis.yml +54 -37
  4. data/CHANGELOG.md +40 -2
  5. data/Gemfile +1 -0
  6. data/README.md +70 -82
  7. data/lib/simp/rake/build/auto.rb +6 -0
  8. data/lib/simp/rake/build/pkg.rb +2 -2
  9. data/lib/simp/rake/build/rpmdeps.rb +6 -3
  10. data/lib/simp/rake/helpers/assets/rpm_spec/simpdefault.spec +284 -71
  11. data/lib/simp/rake/helpers/version.rb +1 -1
  12. data/lib/simp/rake/pkg.rb +38 -18
  13. data/lib/simp/rake/rubygem.rb +1 -1
  14. data/lib/simp/rpm.rb +49 -6
  15. data/spec/acceptance/00_pkg_rpm_custom_scriptlets_spec.rb +117 -0
  16. data/spec/acceptance/10_pkg_rpm_spec.rb +153 -0
  17. data/spec/acceptance/20_pkg_rpm_safely_upgrading_obsolete_modules_spec.rb +175 -0
  18. data/spec/acceptance/development/docker_env.sh +29 -0
  19. data/spec/acceptance/development/rerun_acceptance_tests.sh +15 -0
  20. data/spec/acceptance/development/vagrant_rsync.sh +23 -0
  21. data/spec/acceptance/files/custom_scriptlet_triggers/pupmod-new-package-2.1/CHANGELOG +2 -0
  22. data/spec/acceptance/files/custom_scriptlet_triggers/pupmod-new-package-2.1/Rakefile +3 -0
  23. data/spec/acceptance/files/custom_scriptlet_triggers/pupmod-new-package-2.1/build/rpm_metadata/custom/overrides +14 -0
  24. data/spec/acceptance/files/custom_scriptlet_triggers/pupmod-new-package-2.1/build/rpm_metadata/requires +1 -0
  25. data/spec/acceptance/files/custom_scriptlet_triggers/pupmod-new-package-2.1/metadata.json +33 -0
  26. data/spec/acceptance/files/custom_scriptlet_triggers/pupmod-new-package-3.0/CHANGELOG +2 -0
  27. data/spec/acceptance/files/custom_scriptlet_triggers/pupmod-new-package-3.0/Rakefile +3 -0
  28. data/spec/acceptance/files/custom_scriptlet_triggers/pupmod-new-package-3.0/build/rpm_metadata/custom/overrides +14 -0
  29. data/spec/acceptance/files/custom_scriptlet_triggers/pupmod-new-package-3.0/build/rpm_metadata/requires +1 -0
  30. data/spec/acceptance/files/custom_scriptlet_triggers/pupmod-new-package-3.0/metadata.json +33 -0
  31. data/spec/acceptance/files/custom_scriptlet_triggers/pupmod-old-package-1.0/CHANGELOG +2 -0
  32. data/spec/acceptance/files/custom_scriptlet_triggers/pupmod-old-package-1.0/Rakefile +3 -0
  33. data/spec/acceptance/files/custom_scriptlet_triggers/pupmod-old-package-1.0/build/rpm_metadata/requires +1 -0
  34. data/spec/acceptance/files/custom_scriptlet_triggers/pupmod-old-package-1.0/metadata.json +33 -0
  35. data/spec/acceptance/files/custom_scriptlet_triggers/pupmod-old-package-2.0/CHANGELOG +2 -0
  36. data/spec/acceptance/files/custom_scriptlet_triggers/pupmod-old-package-2.0/Rakefile +3 -0
  37. data/spec/acceptance/files/custom_scriptlet_triggers/pupmod-old-package-2.0/build/rpm_metadata/requires +1 -0
  38. data/spec/acceptance/files/custom_scriptlet_triggers/pupmod-old-package-2.0/metadata.json +33 -0
  39. data/spec/acceptance/files/custom_scriptlet_triggers/pupmod-old-package-2.2/CHANGELOG +2 -0
  40. data/spec/acceptance/files/custom_scriptlet_triggers/pupmod-old-package-2.2/Rakefile +3 -0
  41. data/spec/acceptance/files/custom_scriptlet_triggers/pupmod-old-package-2.2/build/rpm_metadata/custom/overrides +14 -0
  42. data/spec/acceptance/files/custom_scriptlet_triggers/pupmod-old-package-2.2/build/rpm_metadata/requires +1 -0
  43. data/spec/acceptance/files/custom_scriptlet_triggers/pupmod-old-package-2.2/metadata.json +33 -0
  44. data/spec/acceptance/files/mock_packages/pupmod-puppetlabs-stdlib.spec +32 -0
  45. data/spec/acceptance/files/mock_packages/pupmod-simp-foo.spec +32 -0
  46. data/spec/acceptance/files/mock_packages/pupmod-simp-simplib.spec +32 -0
  47. data/spec/acceptance/files/mock_packages/rpmbuild.sh +25 -0
  48. data/spec/acceptance/files/mock_packages/simp-adapter/etc/simp/adapter_config.yaml +3 -0
  49. data/spec/acceptance/files/mock_packages/simp-adapter/usr/local/sbin/simp_rpm_helper +406 -0
  50. data/spec/acceptance/files/mock_packages/simp-adapter.spec +43 -0
  51. data/spec/acceptance/files/testpackage_custom_scriptlet/CHANGELOG +2 -0
  52. data/spec/acceptance/files/testpackage_custom_scriptlet/Rakefile +3 -0
  53. data/spec/acceptance/files/testpackage_custom_scriptlet/build/rpm_metadata/custom/overrides +18 -0
  54. data/spec/acceptance/files/testpackage_custom_scriptlet/build/rpm_metadata/requires +1 -0
  55. data/spec/acceptance/files/testpackage_custom_scriptlet/metadata.json +33 -0
  56. data/spec/acceptance/nodesets/default.yml +2 -4
  57. data/spec/acceptance/support/pkg_rpm_helpers.rb +81 -0
  58. data/spec/lib/simp/rake/build/files/unmanaged_mod/build/rpm_metadata/requires +2 -1
  59. data/spec/lib/simp/rake/build/rpmdeps_spec.rb +2 -1
  60. data/spec/spec_helper_acceptance.rb +20 -1
  61. metadata +44 -17
  62. data/spec/acceptance/pkg_rpm_spec.rb +0 -164
@@ -1,70 +1,160 @@
1
1
  %{lua:
2
2
 
3
+ -- This RPM spec file can build
3
4
  --
4
- -- When you build you must to pass this along so that we know how
5
- -- to get the preliminary information.
6
- -- This directory should hold the following items:
7
- -- * 'build/rpm_metadata/requires' <- optional list of 'Requires', 'Provides',
8
- -- and 'Obsoletes' to supplement those auto-generated in this spec file
9
- -- * 'build/rpm_metadata/release' <- optional RPM release number to use in
10
- -- lieu of number hard-coded in this spec file
11
- -- * 'CHANGELOG' <- optional RPM formatted Changelog to use in lieu of minimal,
12
- -- changelog entry auto-generated in this spec file
13
- -- * 'metadata.json' <- required file that must contain the following metadata:
14
- -- - 'name' - package name
15
- -- - 'version' - package version
16
- -- - 'license' - package license
17
- -- - 'summary' - package summary
18
- -- - 'source' - package source
5
+ -- ## Usage
6
+ --
7
+ -- ### pup_module_info_dir
8
+ --
9
+ -- When you build, you must define the macro 'pup_module_info_dir' so that rpm
10
+ -- knows where to find preliminary information.
11
+ --
12
+ -- If 'pup_module_info_dir' isn't defined or available, rpm will look in
13
+ -- '_sourcedir' for the files, falling back to the current directory as a last
14
+ -- resort.
19
15
  --
20
16
  -- Example:
21
- -- rpmbuild -D 'pup_module_info_dir /home/user/project/puppet_module' -ba SPECS/specfile.spec
22
17
  --
23
- -- If this is not found, we will look in %{_sourcedir} for the files and fall
24
- -- back to the current directory
18
+ -- rpmbuild -D 'pup_module_info_dir /home/user/project/puppet_module' -ba SPECS/specfile.spec
19
+ --
20
+ -- ### relevant files
21
+ --
22
+ -- 'pup_module_info_dir' should be a directory that contains the following items:
23
+ --
24
+ -- * 'metadata.json' <- REQUIRED file that must contain the
25
+ -- following metadata:
26
+ -- - 'name' - package name
27
+ -- - 'version' - package version
28
+ -- - 'license' - package license
29
+ -- - 'summary' - package summary
30
+ -- - 'source' - package source
31
+ -- * 'build/rpm_metadata/requires' <- optional list of 'Requires',
32
+ -- 'Provides', and 'Obsoletes' to
33
+ -- supplement those auto-generated in
34
+ -- this spec file.
35
+ -- * 'build/rpm_metadata/release' <- optional RPM release number to use in
36
+ -- lieu of the number '0' hard-coded in
37
+ -- this spec file.
38
+ -- * 'CHANGELOG' <- optional RPM-formatted CHANGELOG to
39
+ -- use in lieu of the minimal changelog
40
+ -- entry auto-generated in this file.
41
+ -- * 'build/rpm_metadata/custom/' <- optional directory to place files to
42
+ -- add custom scriptlets and triggers.
43
+ --
25
44
  --
26
45
 
27
- src_dir = rpm.expand('%{pup_module_info_dir}')
46
+ local LUA_DEBUG = ((rpm.expand('%{lua_debug}') or '0') == '1')
28
47
 
29
- if string.match(src_dir, '^%%') or (posix.stat(src_dir, 'type') ~= 'directory') then
30
- src_dir = rpm.expand('%{_sourcedir}')
48
+ -- Print debugging info to STDERR (if LUA_DEBUG is true)
49
+ function lua_stderr( msg )
50
+ if LUA_DEBUG then
51
+ -- io.stderr:write(tostring(msg):gsub("%f[^%z\n]","LUA #stderr#: "))
52
+ -- io.stderr:write(tostring(msg))
53
+ io.stderr:write(msg)
54
+ end
55
+ end
31
56
 
32
- if (posix.stat((src_dir .. "/metadata.json"), 'type') ~= 'regular') then
33
- src_dir = './'
57
+
58
+ local function get_src_dir()
59
+ local src_dir = rpm.expand('%{pup_module_info_dir}')
60
+ if src_dir:match('^%%') or (posix.stat(src_dir, 'type') ~= 'directory') then
61
+ lua_stderr("WARNING: -D pup_module_info_dir ("..tostring(src_dir)..") could not be used!\n")
62
+ lua_stderr(" falling back to src_dir = _sourcedir\n")
63
+
64
+ -- FIXME?: rpmlint considers the use of _sourcedir to be an Error:
65
+ -- (see: https://fedoraproject.org/wiki/Packaging:RPM_Source_Dir)
66
+ src_dir = rpm.expand('%{_sourcedir}')
67
+
68
+ if (posix.stat((src_dir .. "/metadata.json"), 'type') ~= 'regular') then
69
+ lua_stderr("WARNING: couldn't find metadata.json in '"..tostring(src_dir).."'!\n")
70
+ lua_stderr(" falling back to src_dir = posix.getcwd() ("..posix.getcwd()..")\n")
71
+
72
+ src_dir = posix.getcwd()
73
+ end
34
74
  end
75
+ return src_dir
35
76
  end
36
77
 
78
+ -- path to project directory / source files
79
+ src_dir = get_src_dir()
80
+
81
+ -- directory to look for customizations (e.g., scriptlets, triggers)
82
+ custom_content_dir = src_dir .. "/build/rpm_metadata/custom/"
83
+
84
+ -- list of custom content to inject into the spec file
85
+ custom_content_table = {}
86
+
87
+ -- list of scriptlets/triggers that have been declared (to avoid duplicates)
88
+ declared_scriptlets_table = {}
89
+
90
+ -- patterns to recognize scriptlet and trigger declarations
91
+ --
92
+ -- NOTE: Lua patterns are not regexes , and do not support alternation.
93
+ -- So, we try to stay efficient by iterating through as few patterns as
94
+ -- possible by short-ciruiting several matches.
95
+ -- (e.g. '^%%pre' matches both '%pre' and '%pretrans')
96
+ --
97
+ SCRIPTLET_PATTERNS = {
98
+ '^%%pre',
99
+ '^%%post',
100
+ '^%%trigger'
101
+ }
102
+
37
103
  -- These UNKNOWN entries should break the build if something bad happens
38
104
 
39
105
  package_name = "UNKNOWN"
40
106
  package_version = "UNKNOWN"
41
107
  module_license = "UNKNOWN"
42
108
 
43
- --
44
109
  -- Default to 0
45
- --
46
-
47
110
  package_release = 0
48
- }
49
111
 
50
- %{lua:
51
- -- Pull the Relevant Metadata out of the Puppet module metadata.json.
112
+ lua_stderr("\n")
113
+ lua_stderr("--------------------------------------------------------------------------------\n")
114
+ lua_stderr("RPM/LUA build environment:\n")
115
+ lua_stderr("------:\n")
116
+ lua_stderr("LUA _VERSION = '".._VERSION.."'\n")
117
+ lua_stderr("posix.getcwd() = '"..posix.getcwd().."'\n")
118
+ lua_stderr("\n")
119
+ lua_stderr("macros:\n")
120
+ lua_stderr("------:\n")
121
+ lua_stderr("'%{pup_module_info_dir}' = '"..rpm.expand('%{pup_module_info_dir}').."'\n")
122
+ lua_stderr("_specdir = '"..rpm.expand('%{_specdir}').."'\n")
123
+ lua_stderr("_buildrootdir = '"..rpm.expand('%{_buildrootdir}').."'\n")
124
+ lua_stderr("buildroot = '"..rpm.expand('%{buildroot}').."'\n")
125
+ lua_stderr("RPM_BUILD_ROOT = '"..rpm.expand('%{RPM_BUILD_ROOT}').."'\n")
126
+ lua_stderr("\n")
127
+ lua_stderr("local variables:\n")
128
+ lua_stderr("------:\n")
129
+ lua_stderr("src_dir = '".. src_dir .."'\n")
130
+ lua_stderr("custom_content_dir = '"..custom_content_dir.."'\n# ---\n")
131
+ lua_stderr("--------------------------------------------------------------------------------\n")
132
+ lua_stderr("\n")
52
133
 
53
- metadata = ''
54
- metadata_file = io.open(src_dir .. "/metadata.json","r")
55
- if metadata_file then
56
- metadata = metadata_file:read("*all")
57
134
 
58
- -- Ignore the first curly brace
59
- metadata = metadata:gsub("{}?", '|', 1)
60
-
61
- -- Ignore all keys that are below the first level
62
- metadata = metadata:gsub("{.-}", '')
63
- metadata = metadata:gsub("%[.-%]", '')
64
- else
65
- error("Could not open 'metadata.json'", 0)
135
+ -- Pull the Relevant Metadata out of the Puppet module metadata.json.
136
+ function read_metadata(src_dir)
137
+ local metadata = ''
138
+ local metadata_file = src_dir .. "/metadata.json"
139
+ local metadata_fh = io.open(metadata_file,'r')
140
+ if metadata_fh then
141
+ metadata = metadata_fh:read("*all")
142
+
143
+ -- Ignore the first curly brace
144
+ metadata = metadata:gsub("{}?", '|', 1)
145
+
146
+ -- Ignore all keys that are below the first level
147
+ metadata = metadata:gsub("{.-}", '')
148
+ metadata = metadata:gsub("%[.-%]", '')
149
+ else
150
+ error("Could not open 'metadata.json': ".. metadata_file, 0)
151
+ end
152
+ return metadata
66
153
  end
67
154
 
155
+
156
+ metadata = read_metadata(src_dir)
157
+
68
158
  -- This starts as an empty string so that we can build it later
69
159
  module_requires = ''
70
160
 
@@ -74,7 +164,7 @@ module_requires = ''
74
164
 
75
165
  -- Get the Module Name and put it in the correct format
76
166
 
77
- local name_match = string.match(metadata, '"name":%s+"(.-)"%s*,')
167
+ local name_match = metadata:match('"name":%s+"(.-)"%s*,')
78
168
 
79
169
  module_author = ''
80
170
  module_name = ''
@@ -83,7 +173,7 @@ if name_match then
83
173
  package_name = ('pupmod-' .. name_match)
84
174
 
85
175
  local i = 0
86
- for str in string.gmatch(name_match,'[^-]+') do
176
+ for str in name_match:gmatch('[^-]+') do
87
177
  if i == 0 then
88
178
  module_author = str
89
179
  else
@@ -106,7 +196,7 @@ end
106
196
 
107
197
  -- Get the Module Version
108
198
 
109
- local version_match = string.match(metadata, '"version":%s+"(.-)"%s*,')
199
+ local version_match = metadata:match('"version":%s+"(.-)"%s*,')
110
200
 
111
201
  if version_match then
112
202
  package_version = version_match
@@ -120,7 +210,7 @@ end
120
210
 
121
211
  -- Get the Module License
122
212
 
123
- local license_match = string.match(metadata, '"license":%s+"(.-)"%s*,')
213
+ local license_match = metadata:match('"license":%s+"(.-)"%s*,')
124
214
 
125
215
  if license_match then
126
216
  module_license = license_match
@@ -134,7 +224,7 @@ end
134
224
 
135
225
  -- Get the Module Summary
136
226
 
137
- local summary_match = string.match(metadata, '"summary":%s+"(.-)"%s*,')
227
+ local summary_match = metadata:match('"summary":%s+"(.-)"%s*,')
138
228
 
139
229
  if summary_match then
140
230
  module_summary = summary_match
@@ -148,7 +238,7 @@ end
148
238
 
149
239
  -- Get the Module Source line for the URL string
150
240
 
151
- local source_match = string.match(metadata, '"source":%s+"(.-)"%s*,')
241
+ local source_match = metadata:match('"source":%s+"(.-)"%s*,')
152
242
 
153
243
  if source_match then
154
244
  module_source = source_match
@@ -173,8 +263,8 @@ end
173
263
 
174
264
  if rel_file then
175
265
  for line in rel_file:lines() do
176
- is_comment = string.match(line, "^%s*#")
177
- is_blank = string.match(line, "^%s*$")
266
+ is_comment = line:match("^%s*#")
267
+ is_blank = line:match("^%s*$")
178
268
 
179
269
  if not (is_comment or is_blank) then
180
270
  package_release = line
@@ -197,7 +287,7 @@ end
197
287
 
198
288
  if req_file then
199
289
  for line in req_file:lines() do
200
- valid_line = (string.match(line, "^Requires: ") or string.match(line, "^Obsoletes: ") or string.match(line, "^Provides: "))
290
+ valid_line = (line:match("^Requires: ") or line:match("^Obsoletes: ") or line:match("^Provides: "))
201
291
 
202
292
  if valid_line then
203
293
  module_requires = (module_requires .. "\n" .. line)
@@ -238,7 +328,10 @@ URL: %{lua: print(module_source)}
238
328
  BuildRoot: %{_tmppath}/%{package_name}-%{version}-%{release}-buildroot
239
329
  BuildArch: noarch
240
330
 
241
- Requires(pre,preun,post,postun): simp-adapter >= 0.0.1
331
+ Requires(pre): simp-adapter >= 0.0.1
332
+ Requires(preun): simp-adapter >= 0.0.1
333
+ Requires(preun): simp-adapter >= 0.0.1
334
+ Requires(postun): simp-adapter >= 0.0.1
242
335
 
243
336
  %if ("%{package_name}" != "pupmod-simp-simplib") && ("%{package_name}" != "pupmod-puppetlabs-stdlib")
244
337
  Requires: pupmod-simp-simplib >= 1.2.6
@@ -300,29 +393,149 @@ rm -rf %{buildroot}/%{prefix}/%{module_name}/log
300
393
 
301
394
  mkdir -p %{buildroot}/%{prefix}
302
395
 
303
- %files
304
- %defattr(0640,root,root,0750)
305
- %{prefix}/%{module_name}
396
+ %{lua:
306
397
 
307
- # when $1 = 1, this is an install
308
- # when $1 = 2, this is an upgrade
309
- %pre
310
- /usr/local/sbin/simp_rpm_helper --rpm_dir=%{prefix}/%{module_name} --rpm_section='pre' --rpm_status=$1
398
+ -- returns true if 'scriptlet_name' has already been declared
399
+ function is_scriplet_declared(scriptlet_name, declared_scriptlets_table)
400
+ for _,name in ipairs(declared_scriptlets_table) do
401
+ if (name == scriptlet_name) then
402
+ return true
403
+ end
404
+ end
405
+ return false
406
+ end
311
407
 
312
- # when $1 = 1, this is an install
313
- # when $1 = 2, this is an upgrade
314
- %post
315
- /usr/local/sbin/simp_rpm_helper --rpm_dir=%{prefix}/%{module_name} --rpm_section='post' --rpm_status=$1
408
+ -- returns true if 'line' is a scriptlet or trigger header
409
+ function is_valid_scriptlet_header(line)
410
+ local match = false
411
+ for _, patt in ipairs(SCRIPTLET_PATTERNS) do
412
+ if line:match(patt) then
413
+ match = true
414
+ break
415
+ end
416
+ end
417
+ return match
418
+ end
419
+
420
+ --
421
+ -- adds content to the custom_content_table
422
+ --
423
+ function define_custom_content(
424
+ content,
425
+ custom_content_table,
426
+ declared_scriptlets_table
427
+ )
428
+ lua_stderr("# evaluating extra content: \n".. (content:gsub("%f[^%z\n]"," | ")) .."\n")
429
+
430
+ if content then
431
+ local _content = ''
432
+ local recording = true
433
+
434
+ for line in content:gmatch("([^\n]*)\n?") do
435
+
436
+ -- skip duplicate scriptlets
437
+ if is_valid_scriptlet_header(line) then
438
+ local _line = line:gsub("^%s+",""):gsub("%s+$","")
439
+ if is_scriplet_declared(_line, declared_scriptlets_table) then
440
+ lua_stderr("WARNING: scriptlet '".._line..
441
+ "' has already been declared (skipping scriptlet).\n")
442
+ recording = false
443
+ else
444
+ lua_stderr('+ "'.._line..'" is recognized as a scriptlet/trigger.\n')
445
+ recording = true
446
+ table.insert(declared_scriptlets_table, _line)
447
+ end
448
+ end
449
+
450
+ if recording then
451
+ _content = _content .. line .. "\n"
452
+ else
453
+ lua_stderr(" skipping line '"..line.."'\n")
454
+ end
455
+ end
456
+ table.insert(custom_content_table, _content )
457
+ end
458
+ end
316
459
 
317
- # when $1 = 1, this is the uninstall of the previous version during an upgrade
318
- # when $1 = 0, this is the uninstall of the only version during an erase
319
- %preun
320
- /usr/local/sbin/simp_rpm_helper --rpm_dir=%{prefix}/%{module_name} --rpm_section='preun' --rpm_status=$1
321
460
 
322
- # when $1 = 1, this is the uninstall of the previous version during an upgrade
323
- # when $1 = 0, this is the uninstall of the only version during an erase
324
- %postun
325
- /usr/local/sbin/simp_rpm_helper --rpm_dir=%{prefix}/%{module_name} --rpm_section='postun' --rpm_status=$1
461
+ function load_custom_content_files(custom_content_dir, custom_content_table, declared_scriptlets_table)
462
+ if (posix.stat(custom_content_dir, 'type') == 'directory') then
463
+ for i,basename in pairs(posix.dir(custom_content_dir)) do
464
+ local file = custom_content_dir .. basename
465
+ -- only accept files that are not dot files (".filename")
466
+ if (basename:match('^[^%.]') and (posix.stat(file, 'type') == 'regular')) then
467
+ lua_stderr("INFO: found custom RPM spec file snippet: '" .. file .. "'\n")
468
+ local file_handle = io.open(file,'r')
469
+ if file_handle then
470
+ local _content = file_handle:read("*all")
471
+ define_custom_content(_content, custom_content_table, declared_scriptlets_table)
472
+ else
473
+ lua_stderr("WARNING: could not read '"..file.."'\n")
474
+ end
475
+ file_handle:close()
476
+ else
477
+ lua_stderr("WARNING: skipping invalid filename '"..basename.."'\n")
478
+ end
479
+ end
480
+ else
481
+ lua_stderr("WARNING: not found: " .. custom_content_dir .. "\n")
482
+ end
483
+ end
484
+
485
+ -- Declares default scriptlets for SIMP 6.X (referenced from 6.1.0)
486
+ --
487
+ -- In order to keep the package-maintained pupmod-*-* pacakges
488
+ -- Packages notify /usr/local/sbin/simp_rpm_helper, which
489
+ -- See: https://github.com/simp/simp-adapter/blob/master/src/sbin/simp_rpm_helper
490
+ --
491
+ -- This function should be called last
492
+ --
493
+ function declare_default_scriptlets(custom_content_table, declared_scriptlets_table)
494
+ local DEFAULT_SCRIPTLETS = {
495
+ ['pre'] = {upgrade = 2},
496
+ ['post'] = {upgrade = 2},
497
+ ['preun'] = {upgrade = 0},
498
+ ['postun'] = {upgrade = 0}
499
+ }
500
+ local rpm_dir = rpm.expand('%{prefix}/' .. module_name)
501
+
502
+ for name,data in pairs(DEFAULT_SCRIPTLETS) do
503
+ local content = ('%'..name.."\n"..
504
+ '# (default scriptlet for SIMP 6.x)\n'..
505
+ '# when $1 = 1, this is an install\n'..
506
+ '# when $1 = '.. data.upgrade ..', this is an upgrade\n'..
507
+ '/usr/local/sbin/simp_rpm_helper --rpm_dir='..
508
+ rpm_dir.." --rpm_section='"..name.."' --rpm_status=$1\n\n"
509
+ )
510
+
511
+ define_custom_content(content, custom_content_table, declared_scriptlets_table)
512
+ end
513
+ end
514
+
515
+
516
+ -- insert custom content (e.g., rpm_metadata/custom/*, scriptlets)
517
+ function print_extra_content( custom_content_table )
518
+ local extra_content = table.concat(custom_content_table, "\n") .. "\n"
519
+ lua_stderr("\n========== DYNAMIC CONTENT SUMMARY ========== (begin)\n" ..
520
+ rpm.expand( extra_content ) ..
521
+ "\n========== DYNAMIC CONTENT SUMMARY ========== (end)\n")
522
+ print(extra_content)
523
+ end
524
+
525
+
526
+ load_custom_content_files(
527
+ custom_content_dir,
528
+ custom_content_table,
529
+ declared_scriptlets_table
530
+ )
531
+ declare_default_scriptlets(custom_content_table, declared_scriptlets_table)
532
+ print_extra_content(custom_content_table)
533
+ }
534
+
535
+
536
+ %files
537
+ %defattr(0640,root,root,0750)
538
+ %{prefix}/%{module_name}
326
539
 
327
540
  %changelog
328
541
  %{lua:
@@ -345,7 +558,7 @@ default_lookup_table = {
345
558
  changelog = io.open(src_dir .. "/CHANGELOG","r")
346
559
  if changelog then
347
560
  first_line = changelog:read()
348
- if string.match(first_line, "^*%s+%a%a%a%s+%a%a%a%s+%d%d?%s+%d%d%d%d%s+.+") then
561
+ if first_line:match("^*%s+%a%a%a%s+%a%a%a%s+%d%d?%s+%d%d%d%d%s+.+") then
349
562
  changelog:seek("set",0)
350
563
  print(changelog:read("*all"))
351
564
  else
@@ -2,5 +2,5 @@ module Simp; end
2
2
  module Simp::Rake; end
3
3
 
4
4
  class Simp::Rake::Helpers
5
- VERSION = '5.3.0'
5
+ VERSION = '5.4.1'
6
6
  end
data/lib/simp/rake/pkg.rb CHANGED
@@ -54,6 +54,7 @@ module Simp::Rake
54
54
  'dist/rpmbuild',
55
55
  'spec/fixtures/modules'
56
56
  ]
57
+ @verbose = ENV.fetch('SIMP_RAKE_PKG_verbose','no') == 'yes'
57
58
 
58
59
  # This is only meant to be used to work around the case where particular
59
60
  # packages need to ignore some set of artifacts that get updated out of
@@ -65,7 +66,7 @@ module Simp::Rake
65
66
  @ignore_changes_list += ENV['SIMP_INTERNAL_pkg_ignore'].split(',')
66
67
  end
67
68
 
68
- FileUtils.mkdir_p(@pkg_tmp_dir)
69
+ FileUtils.mkdir_p(@pkg_tmp_dir, verbose: @verbose)
69
70
 
70
71
  local_spec = Dir.glob(File.join(@base_dir, 'build', '*.spec'))
71
72
  unless local_spec.empty?
@@ -79,7 +80,7 @@ module Simp::Rake
79
80
  @spec_tempfile.flush
80
81
  @spec_tempfile.close
81
82
 
82
- FileUtils.chmod(0640, @spec_file)
83
+ FileUtils.chmod(0640, @spec_file, verbose: @verbose)
83
84
  end
84
85
 
85
86
  ::CLEAN.include( @pkg_dir )
@@ -134,7 +135,7 @@ module Simp::Rake
134
135
  end
135
136
 
136
137
  @rpm_srcdir ||= "#{@pkg_dir}/rpmbuild/SOURCES"
137
- FileUtils.mkdir_p(@rpm_srcdir)
138
+ FileUtils.mkdir_p(@rpm_srcdir, verbose: @verbose)
138
139
 
139
140
  @tar_dest ||= "#{@pkg_dir}/#{@full_pkg_name}.tar.gz"
140
141
 
@@ -210,6 +211,9 @@ module Simp::Rake
210
211
  end
211
212
 
212
213
  def define_pkg_rpm
214
+
215
+ # :pkg:rpm
216
+ # -----------------------------
213
217
  namespace :pkg do
214
218
  desc <<-EOM
215
219
  Build the #{@pkg_name} RPM.
@@ -226,21 +230,29 @@ module Simp::Rake
226
230
  %(-D '_srcrpmdir #{@pkg_dir}'),
227
231
  %(-D '_build_name_fmt %%{NAME}-%%{VERSION}-%%{RELEASE}.%%{ARCH}.rpm')
228
232
  ]
229
-
233
+ rpm_opts << '-v' if @verbose
234
+ rpm_opts << "-D 'lua_debug 1'" if (ENV.fetch('SIMP_RAKE_PKG_LUA_verbose','no') =='yes')
235
+ rpm_opts << "-D 'pup_module_info_dir #{@base_dir}'"
230
236
  Dir.chdir(@pkg_dir) do
231
237
 
232
238
  # Copy in the materials required for the module builds
233
239
  # The following are required to build successful RPMs using
234
240
  # the new LUA-based RPM template
235
241
  puppet_module_info_files = [
236
- Dir.glob(%(#{@base_dir}/build/rpm_metadata/*)),
242
+ Dir.glob(%(#{@base_dir}/build/rpm_metadata/**)),
237
243
  %(#{@base_dir}/CHANGELOG),
238
244
  %(#{@base_dir}/metadata.json)
239
245
  ].flatten
240
246
 
247
+ if @verbose
248
+ puts "==== pkg:rpm: @base_dir: #{@base_dir}"
249
+ puts "==== pkg:rpm: rpm_opts:\n #{rpm_opts.map{|x| "\n #{x}"}.join}"
250
+ puts "==== pkg:rpm: puppet_module_info_files: #{puppet_module_info_files.map{|x| "\n #{x}"}.join}"
251
+ end
252
+
241
253
  puppet_module_info_files.each do |f|
242
254
  if File.exist?(f)
243
- FileUtils.cp_r(f, @rpm_srcdir)
255
+ FileUtils.cp_r(f, @rpm_srcdir, verbose: @verbose)
244
256
  end
245
257
  end
246
258
 
@@ -251,26 +263,28 @@ module Simp::Rake
251
263
  Dir.chdir(@rpm_srcdir) do
252
264
  extra_deps.each do |dep|
253
265
  unless File.exist?(dep)
254
- FileUtils.cp_r("../../#{dep}", dep)
266
+ FileUtils.cp_r("../../#{dep}", dep, verbose: @verbose)
255
267
  end
256
268
  end
257
269
  end
258
270
 
259
- FileUtils.mkdir_p('logs')
260
- FileUtils.mkdir_p('rpmbuild/BUILDROOT')
261
- FileUtils.mkdir_p('rpmbuild/BUILD')
271
+ FileUtils.mkdir_p('logs', verbose: @verbose)
272
+ FileUtils.mkdir_p('rpmbuild/BUILDROOT', verbose: @verbose)
273
+ FileUtils.mkdir_p('rpmbuild/BUILD', verbose: @verbose)
262
274
 
263
275
  srpms = [@full_pkg_name + '.src.rpm']
264
276
  if require_rebuild?(srpms.first, @tar_dest)
265
277
  # Need to build the SRPM so that we can get the build dependencies
266
- %x(rpmbuild #{rpm_opts.join(' ')} -bs #{@spec_file} > logs/build.out 2> logs/build.err)
278
+ cmd = %(rpmbuild #{rpm_opts.join(' ')} -bs #{@spec_file} > logs/build.srpm.out 2> logs/build.srpm.err)
279
+ puts "==== pkg:rpm SRPM BUILD: #{cmd}" if @verbose
280
+ %x(#{cmd})
267
281
 
268
- srpms = File.read('logs/build.out').scan(%r(Wrote:\s+(.*\.rpm))).flatten
282
+ srpms = File.read('logs/build.srpm.out').scan(%r(Wrote:\s+(.*\.rpm))).flatten
269
283
 
270
284
  if srpms.empty?
271
285
  raise <<-EOM
272
286
  Could not create SRPM for '#{@spec_info.basename}
273
- Error: #{File.read('logs/build.err')}
287
+ Error: #{File.read('logs/build.srpm.err')}
274
288
  EOM
275
289
  end
276
290
  end
@@ -327,7 +341,10 @@ module Simp::Rake
327
341
  rpms = expected_rpms
328
342
  else
329
343
  # Try a build
330
- %x(rpmbuild #{rpm_opts.join(' ')} --rebuild #{srpms.first} > logs/build.out 2> logs/build.err)
344
+ cmd = %(rpmbuild #{rpm_opts.join(' ')} --rebuild #{srpms.first} > logs/build.rpm.out 2> logs/build.rpm.err)
345
+ puts "==== pkg:rpm: #{cmd}" if @verbose
346
+ _result = %x(#{cmd})
347
+ puts _result if @verbose
331
348
 
332
349
  # If the build failed, it was probably due to missing dependencies
333
350
  unless $?.success?
@@ -359,6 +376,7 @@ module Simp::Rake
359
376
  unless Process.uid == 0
360
377
  yum_install_cmd = 'sudo ' + yum_install_cmd
361
378
  end
379
+ puts "==== pkg:rpm: #{yum_install_cmd}" if @verbose
362
380
 
363
381
  install_output = %x(#{yum_install_cmd} 2>&1)
364
382
 
@@ -373,14 +391,16 @@ module Simp::Rake
373
391
  # Try it again!
374
392
  #
375
393
  # If this doesn't work, something we can't fix automatically is wrong
376
- %x(rpmbuild #{rpm_opts.join(' ')} --rebuild #{srpms.first} > logs/build.out 2> logs/build.err)
394
+ cmd = %(rpmbuild #{rpm_opts.join(' ')} --rebuild #{srpms.first} > logs/build.rpm.out 2> logs/build.rpm.err)
395
+ puts "==== pkg:rpm: #{cmd}" if @verbose
396
+ %x(#{cmd})
377
397
 
378
- rpms = File.read('logs/build.out').scan(%r(Wrote:\s+(.*\.rpm))).flatten - srpms
398
+ rpms = File.read('logs/build.rpm.out').scan(%r(Wrote:\s+(.*\.rpm))).flatten - srpms
379
399
 
380
400
  if rpms.empty?
381
401
  raise <<-EOM
382
402
  Could not create RPM for '#{@spec_info.basename}
383
- Error: #{File.read('logs/build.err')}
403
+ Error: #{File.read('logs/build.rpm.err')}
384
404
  EOM
385
405
  end
386
406
  end
@@ -514,7 +534,7 @@ module Simp::Rake
514
534
  # -----------------------------
515
535
  desc <<-EOM
516
536
  Generate an appropriate changelog for an annotated tag from a
517
- component's CHANGELOG or RPM spec file.
537
+ component's CHANGELOG or RPM spec file.
518
538
 
519
539
  The changelog text will be for the latest version and contain
520
540
  1 or more changelog entries for that version, in reverse
@@ -49,7 +49,7 @@ module Simp::Rake
49
49
  task :install_gem => [:clean, :gem] do
50
50
  Dir.chdir @rakefile_dir
51
51
  Dir.glob("dist/#{@package}*.gem") do |pkg|
52
- sh %Q{bundle exec gem install #{pkg}}
52
+ sh %Q{bundle exec gem install --no-ri --no-rdoc #{pkg}}
53
53
  end
54
54
  end
55
55
  end