simp-rake-helpers 5.3.0 → 5.4.1

Sign up to get free protection for your applications and to get access to all the features.
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