simp-rake-helpers 5.12.6 → 5.13.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +19 -0
- data/lib/simp/rake/build/auto.rb +3 -2
- data/lib/simp/rake/build/deps.rb +1 -1
- data/lib/simp/rake/build/iso.rb +62 -44
- data/lib/simp/rake/build/pkg.rb +168 -148
- data/lib/simp/rake/build/rpmdeps.rb +7 -1
- data/lib/simp/rake/build/tar.rb +7 -3
- data/lib/simp/rake/helpers/version.rb +1 -1
- data/spec/acceptance/suites/default/55_build_pkg_signing_spec.rb +2 -2
- data/spec/lib/simp/rake/build/helpers_spec.rb +1 -1
- metadata +3 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b6f0550abc4ac7ec968a8590bbc7003d0de2753ae072909396fce25c01a7edd3
|
4
|
+
data.tar.gz: 4eb8efa7f00322290a3a45a6e304ac6b1798e3d47283e1ad525184ae95f9560f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e6eef279b4061c054908d69ab0408e5e850149bc92689db7b64f167d9815186af793a07c905bbf47d71763107088cdd4059da6f31e95f775410ab03803428b68
|
7
|
+
data.tar.gz: 4bf2a7cfedbd8a9a711f9ba19e62ad16c0dcd593511ab21d249eda819b1ac67ba7ed0285a085057e7b68e31a700fdb185d57736a773734512821781096bad478
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,22 @@
|
|
1
|
+
### 5.13.1 / 2022-05-01
|
2
|
+
- Fixed:
|
3
|
+
- Aligned wtih an API change in the `dirty?` method in `r10k`
|
4
|
+
|
5
|
+
### 5.13.0 / 2021-11-14
|
6
|
+
- Added:
|
7
|
+
- Output the full `mkisofs` command when building an ISO
|
8
|
+
|
9
|
+
### 5.12.7 / 2021-10-26
|
10
|
+
- Added:
|
11
|
+
- Env var `SIMP_PKG_progress_bar=no` to turn off pkg RPM build progress bars
|
12
|
+
- Env var `SIMP_PKG_fetch_published_rpm=no` to prevent downloading a
|
13
|
+
published package
|
14
|
+
- Fixed:
|
15
|
+
- RPM builds no longer fail with leftover generated
|
16
|
+
`build/rpm_metadata/releases` files
|
17
|
+
- Removed unused code, tidied up some confusing bits to make structure more
|
18
|
+
obvious
|
19
|
+
|
1
20
|
### 5.12.6 / 2021-10-19
|
2
21
|
- Ensure that the `Updates` directory does not link to files in itself
|
3
22
|
|
data/lib/simp/rake/build/auto.rb
CHANGED
@@ -110,14 +110,15 @@ module Simp::Rake::Build
|
|
110
110
|
- SIMP_BUILD_docs => 'yes' builds & includes documentation
|
111
111
|
- SIMP_BUILD_checkout => 'no' will skip the git repo checkouts
|
112
112
|
- SIMP_BUILD_bundle => 'no' skips running bundle in each subrepo
|
113
|
-
- SIMP_BUILD_unpack => 'no'
|
114
|
-
- SIMP_BUILD_unpack_merge => 'no' prevents auto-merging the unpacked
|
113
|
+
- SIMP_BUILD_unpack => 'no' prevents unpacking the source ISO
|
114
|
+
- SIMP_BUILD_unpack_merge => 'no' prevents auto-merging the unpacked ISO
|
115
115
|
- SIMP_BUILD_prune => 'no' passes :prune=>false to iso:build
|
116
116
|
- SIMP_BUILD_iso_name => Renames the output ISO filename [Default: false]
|
117
117
|
- SIMP_BUILD_iso_tag => Appended to the output ISO's filename [Default: false]
|
118
118
|
- SIMP_BUILD_update_packages => Automatically update any necessary packages in the packages.yaml file [Default: false]
|
119
119
|
- SIMP_BUILD_verbose => 'yes' enables verbose reporting. [Default: 'no']
|
120
120
|
- SIMP_BUILD_signing_key => The name of the GPG key to use to sign packages. [Default: 'dev']
|
121
|
+
- SIMP_BUILD_reposync_only => 'yes' skips unpacking the locally-build tarball so that you only get items from the reposync directory (if present)
|
121
122
|
EOM
|
122
123
|
|
123
124
|
task :auto, [:iso_paths,
|
data/lib/simp/rake/build/deps.rb
CHANGED
data/lib/simp/rake/build/iso.rb
CHANGED
@@ -252,61 +252,77 @@ module Simp::Rake::Build
|
|
252
252
|
end
|
253
253
|
end
|
254
254
|
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
# Pop the SIMP directory from the tarball into the correct spot
|
259
|
-
# FIXME: This is a hack
|
260
|
-
unless dir == repo_target_dir
|
261
|
-
simpdir = File.join(dir,'SIMP')
|
262
|
-
|
263
|
-
if File.directory?(simpdir)
|
264
|
-
cp_r(simpdir, repo_target_dir, :verbose => verbose)
|
265
|
-
rm_rf(simpdir, :verbose => verbose)
|
266
|
-
end
|
255
|
+
reposync_only = (ENV.fetch('SIMP_BUILD_reposync_only', 'no') == 'yes')
|
256
|
+
if reposync_only && !reposync_active
|
257
|
+
fail("ERROR: Reposync-only requested, but no reposync content found")
|
267
258
|
end
|
268
259
|
|
269
|
-
|
270
|
-
|
271
|
-
|
260
|
+
if reposync_only
|
261
|
+
puts
|
262
|
+
puts '-'*80
|
263
|
+
puts '### Reposync-Only Mode ###'
|
264
|
+
puts
|
265
|
+
puts ' Locally built packages will not be added'
|
266
|
+
puts
|
267
|
+
puts '-'*80
|
268
|
+
puts
|
269
|
+
else
|
270
|
+
# Add the SIMP code
|
271
|
+
system("tar --no-same-permissions -C #{dir} -xzf #{tball}")
|
272
272
|
|
273
|
-
|
274
|
-
|
275
|
-
|
276
|
-
|
277
|
-
|
273
|
+
# Pop the SIMP directory from the tarball into the correct spot
|
274
|
+
# FIXME: This is a hack
|
275
|
+
unless dir == repo_target_dir
|
276
|
+
simpdir = File.join(dir,'SIMP')
|
277
|
+
|
278
|
+
if File.directory?(simpdir)
|
279
|
+
cp_r(simpdir, repo_target_dir, :verbose => verbose)
|
280
|
+
rm_rf(simpdir, :verbose => verbose)
|
281
|
+
end
|
278
282
|
end
|
279
283
|
|
280
|
-
|
284
|
+
Dir.chdir("#{repo_target_dir}/SIMP") do
|
285
|
+
# Add the SIMP Dependencies
|
286
|
+
simp_base_ver = simpver.split('-').first
|
281
287
|
|
282
|
-
|
283
|
-
|
284
|
-
|
288
|
+
if $simp6
|
289
|
+
yum_dep_location = File.join(@build_dir,'yum_data','packages')
|
290
|
+
else
|
291
|
+
simp_dep_src = %(SIMP#{simp_base_ver}_#{baseos}#{baseosver}_#{arch})
|
292
|
+
yum_dep_location = File.join(@build_dir,'yum_data',simp_dep_src,'packages')
|
293
|
+
end
|
285
294
|
|
286
|
-
|
287
|
-
fail("Could not find any dependency RPMs at #{yum_dep_location}") unless reposync_active
|
288
|
-
end
|
295
|
+
yum_dep_rpms = Dir.glob(File.join(yum_dep_location,'*.rpm'))
|
289
296
|
|
290
|
-
|
291
|
-
|
292
|
-
|
293
|
-
aux_packages = File.join(File.dirname(yum_dep_location),'aux_packages')
|
294
|
-
if File.directory?(aux_packages)
|
295
|
-
yum_dep_rpms += Dir.glob(File.join(aux_packages,'*.rpm'))
|
296
|
-
end
|
297
|
+
unless File.directory?(yum_dep_location)
|
298
|
+
fail("Could not find dependency directory at #{yum_dep_location}") unless reposync_active
|
299
|
+
end
|
297
300
|
|
298
|
-
|
299
|
-
|
301
|
+
if yum_dep_rpms.empty?
|
302
|
+
fail("Could not find any dependency RPMs at #{yum_dep_location}") unless reposync_active
|
303
|
+
end
|
300
304
|
|
301
|
-
|
302
|
-
|
305
|
+
# Add any one-off RPMs that you might want to add to your own build
|
306
|
+
# These are *not* checked to make sure that they actually match your
|
307
|
+
# environment
|
308
|
+
aux_packages = File.join(File.dirname(yum_dep_location),'aux_packages')
|
309
|
+
if File.directory?(aux_packages)
|
310
|
+
yum_dep_rpms += Dir.glob(File.join(aux_packages,'*.rpm'))
|
303
311
|
end
|
304
312
|
|
305
|
-
|
306
|
-
|
307
|
-
|
313
|
+
yum_dep_rpms.each do |rpm|
|
314
|
+
rpm_arch = rpm.split('.')[-2]
|
315
|
+
|
316
|
+
unless File.directory?(rpm_arch)
|
317
|
+
mkdir(rpm_arch)
|
318
|
+
end
|
319
|
+
|
320
|
+
# Just in case this is a symlink, broken, or some other nonsense.
|
321
|
+
target_file = File.join(rpm_arch,File.basename(rpm))
|
322
|
+
rm_f(target_file) if File.exist?(target_file)
|
308
323
|
|
309
|
-
|
324
|
+
cp(rpm,rpm_arch, :verbose => verbose)
|
325
|
+
end
|
310
326
|
end
|
311
327
|
|
312
328
|
if reposync_active
|
@@ -421,9 +437,11 @@ module Simp::Rake::Build
|
|
421
437
|
'-x ./lost+found',
|
422
438
|
"-o #{@simp_output_iso}",
|
423
439
|
dir
|
424
|
-
]
|
440
|
+
].join(' ')
|
441
|
+
|
442
|
+
$stdout.puts "Running: #{mkisofs_cmd}"
|
425
443
|
|
426
|
-
system(mkisofs_cmd
|
444
|
+
system(mkisofs_cmd)
|
427
445
|
end
|
428
446
|
end # End of tarfiles loop
|
429
447
|
|
data/lib/simp/rake/build/pkg.rb
CHANGED
@@ -21,13 +21,17 @@ module Simp::Rake::Build
|
|
21
21
|
@rpm_build_metadata = 'last_rpm_build_metadata.yaml'
|
22
22
|
@rpm_dependency_file = File.join(@base_dir, 'build', 'rpm', 'dependencies.yaml')
|
23
23
|
@build_keys_dir = ENV.fetch('SIMP_PKG_build_keys_dir', File.join(@base_dir, '.dev_gpgkeys'))
|
24
|
-
@long_gpg_socket_err_msg = <<~
|
24
|
+
@long_gpg_socket_err_msg = <<~MSG
|
25
25
|
If the problem is 'socket name <xxx> is too long', use SIMP_PKG_build_keys_dir
|
26
26
|
to override
|
27
27
|
#{@build_keys_dir}
|
28
28
|
with a shorter path. The socket name must be < 108 characters.
|
29
29
|
|
30
|
-
|
30
|
+
MSG
|
31
|
+
# nil = default not set; use local preference
|
32
|
+
@fetch_published_rpm_default = ENV['SIMP_PKG_fetch_published_rpm'] ? (
|
33
|
+
ENV['SIMP_PKG_fetch_published_rpm'] =~ /\A(yes|true)\Z/i ? true : false
|
34
|
+
) : nil
|
31
35
|
|
32
36
|
define_tasks
|
33
37
|
end
|
@@ -114,7 +118,7 @@ module Simp::Rake::Build
|
|
114
118
|
end
|
115
119
|
end
|
116
120
|
|
117
|
-
desc
|
121
|
+
desc <<~DESC
|
118
122
|
Prepare a GPG signing key to sign build packages
|
119
123
|
|
120
124
|
* :key - the name of the build keys subdirectory to prepare
|
@@ -142,7 +146,7 @@ module Simp::Rake::Build
|
|
142
146
|
ENV vars:
|
143
147
|
- Set `SIMP_PKG_verbose=yes` to report file operations as they happen.
|
144
148
|
- Set `SIMP_PKG_build_keys_dir` to override the default build keys path.
|
145
|
-
|
149
|
+
DESC
|
146
150
|
task :key_prep,[:key] => [:prep] do |t,args|
|
147
151
|
args.with_defaults(:key => 'dev')
|
148
152
|
key = args.key
|
@@ -251,7 +255,7 @@ module Simp::Rake::Build
|
|
251
255
|
|
252
256
|
|
253
257
|
=begin
|
254
|
-
desc
|
258
|
+
desc <<~DESC
|
255
259
|
Build the entire SIMP release.
|
256
260
|
|
257
261
|
* :docs - Build the docs. Set this to false if you wish to skip building the docs.
|
@@ -261,7 +265,7 @@ module Simp::Rake::Build
|
|
261
265
|
- Set `SIMP_PKG_verbose=yes` to report file operations as they happen.
|
262
266
|
- Set `SIMP_YUM_makecache=no` if you do NOT want to rebuild the
|
263
267
|
build-specific YUM cache
|
264
|
-
|
268
|
+
DESC
|
265
269
|
=end
|
266
270
|
task :build,[:docs,:key] => [:prep,:key_prep] do |t,args|
|
267
271
|
args.with_defaults(:key => 'dev')
|
@@ -269,12 +273,7 @@ module Simp::Rake::Build
|
|
269
273
|
|
270
274
|
check_dvd_env
|
271
275
|
|
272
|
-
|
273
|
-
yum_helper = Simp::YUM.new(
|
274
|
-
Simp::YUM.generate_yum_conf(File.join(@distro_build_dir, 'yum_data')),
|
275
|
-
ENV.fetch('SIMP_YUM_makecache','yes') == 'yes')
|
276
|
-
rescue Simp::YUM::Error
|
277
|
-
end
|
276
|
+
get_yum_helper
|
278
277
|
|
279
278
|
Rake::Task['pkg:aux'].invoke
|
280
279
|
if "#{args.docs}" == 'true'
|
@@ -287,7 +286,7 @@ module Simp::Rake::Build
|
|
287
286
|
Rake::Task['pkg:signrpms'].invoke(args[:key])
|
288
287
|
end
|
289
288
|
|
290
|
-
desc
|
289
|
+
desc <<~DESC
|
291
290
|
Build the Puppet module RPMs.
|
292
291
|
|
293
292
|
* :method - The Puppetfile from which the repository information
|
@@ -295,12 +294,12 @@ module Simp::Rake::Build
|
|
295
294
|
|
296
295
|
ENV vars:
|
297
296
|
- Set `SIMP_PKG_verbose=yes` to report file operations as they happen.
|
298
|
-
|
297
|
+
DESC
|
299
298
|
task :modules,[:method] => [:prep] do |t,args|
|
300
299
|
build(@build_dirs[:modules],t)
|
301
300
|
end
|
302
301
|
|
303
|
-
desc
|
302
|
+
desc <<~DESC
|
304
303
|
Build a single Puppet Module RPM.
|
305
304
|
|
306
305
|
* :name - The path, or name, of the module to build. If a name is
|
@@ -314,11 +313,12 @@ module Simp::Rake::Build
|
|
314
313
|
- Set `SIMP_PKG_verbose=yes` to report file operations as they happen.
|
315
314
|
- Set `SIMP_YUM_makecache=no` if you do NOT want to rebuild the
|
316
315
|
build-specific YUM cache
|
317
|
-
|
316
|
+
DESC
|
318
317
|
task :single,[:name,:method] => [:prep] do |t,args|
|
319
318
|
fail("You must pass :name to '#{t.name}'") unless args[:name]
|
320
319
|
|
321
320
|
mod_path = File.absolute_path(args[:name])
|
321
|
+
get_yum_helper
|
322
322
|
|
323
323
|
if args[:name].include?('/')
|
324
324
|
fail("'#{args[:name]}' does not exist!") unless File.directory?(mod_path)
|
@@ -333,35 +333,27 @@ module Simp::Rake::Build
|
|
333
333
|
mod_path = local_module[:path]
|
334
334
|
end
|
335
335
|
|
336
|
-
begin
|
337
|
-
yum_helper = Simp::YUM.new(
|
338
|
-
Simp::YUM.generate_yum_conf(File.join(@distro_build_dir, 'yum_data')),
|
339
|
-
ENV.fetch('SIMP_YUM_makecache','yes') == 'yes')
|
340
|
-
rescue Simp::YUM::Error
|
341
|
-
end
|
342
|
-
|
343
|
-
ENV['SIMP_PKG_rand_name'] = 'yes'
|
344
336
|
build(Array(mod_path), t)
|
345
337
|
|
346
338
|
puts("Your packages can be found in '#{mod_path}/dist'")
|
347
339
|
end
|
348
340
|
|
349
|
-
desc
|
341
|
+
desc <<~DESC
|
350
342
|
Build the SIMP non-module RPMs.
|
351
343
|
|
352
344
|
ENV vars:
|
353
345
|
- Set `SIMP_PKG_verbose=yes` to report file operations as they happen.
|
354
|
-
|
346
|
+
DESC
|
355
347
|
task :aux => [:prep] do |t,args|
|
356
348
|
build(@build_dirs[:aux],t)
|
357
349
|
end
|
358
350
|
|
359
|
-
desc
|
351
|
+
desc <<~DESC
|
360
352
|
Build the SIMP documentation.
|
361
353
|
|
362
354
|
ENV vars:
|
363
355
|
- Set `SIMP_PKG_verbose=yes` to report file operations as they happen.
|
364
|
-
|
356
|
+
DESC
|
365
357
|
task :doc => [:prep] do |t,args|
|
366
358
|
# Need to make sure that the docs have the version updated
|
367
359
|
# appropriately prior to building
|
@@ -373,7 +365,7 @@ module Simp::Rake::Build
|
|
373
365
|
build(@build_dirs[:doc],t)
|
374
366
|
end
|
375
367
|
|
376
|
-
desc
|
368
|
+
desc <<~DESC
|
377
369
|
Sign a set of RPMs.
|
378
370
|
|
379
371
|
Signs any unsigned RPMs in the specified directory
|
@@ -394,7 +386,7 @@ module Simp::Rake::Build
|
|
394
386
|
* Set `SIMP_PKG_rpmsign_timeout` to override the maximum time in seconds
|
395
387
|
to wait for an individual RPM signing operation to complete.
|
396
388
|
- Defaults to 60 seconds.
|
397
|
-
|
389
|
+
DESC
|
398
390
|
task :signrpms,[:key,:rpm_dir,:force,:digest_algo] => [:prep,:key_prep] do |t,args|
|
399
391
|
require 'simp/rpm_signer'
|
400
392
|
|
@@ -455,13 +447,13 @@ module Simp::Rake::Build
|
|
455
447
|
end
|
456
448
|
|
457
449
|
=begin
|
458
|
-
desc
|
450
|
+
desc <<~DESC
|
459
451
|
Check that RPMs are signed.
|
460
452
|
|
461
453
|
Checks all RPM files in a directory to see if they are trusted.
|
462
454
|
* :rpm_dir - A directory containing RPM files to check. Default #{@build_dir}/SIMP
|
463
455
|
* :key_dir - The path to the GPG keys you want to check the packages against. Default #{@src_dir}/assets/gpgkeys/
|
464
|
-
|
456
|
+
DESC
|
465
457
|
=end
|
466
458
|
task :checksig,[:rpm_dir,:key_dir] => [:prep] do |t,args|
|
467
459
|
begin
|
@@ -547,7 +539,7 @@ module Simp::Rake::Build
|
|
547
539
|
end
|
548
540
|
end
|
549
541
|
|
550
|
-
desc
|
542
|
+
desc <<~DESC
|
551
543
|
Run repoclosure on RPM files.
|
552
544
|
|
553
545
|
Finds all rpm files in the target dir and all of its subdirectories, then
|
@@ -561,7 +553,7 @@ module Simp::Rake::Build
|
|
561
553
|
- Set `SIMP_PKG_verbose=yes` to report file operations as they happen.
|
562
554
|
- Set `SIMP_PKG_repoclose_pe=yes` to enable repoclosure on PE-related RPMs.
|
563
555
|
|
564
|
-
|
556
|
+
DESC
|
565
557
|
task :repoclosure,[:target_dir,:aux_dir] => [:prep] do |t,args|
|
566
558
|
default_target = @pkg_dirs[:simp]
|
567
559
|
args.with_defaults(:target_dir => File.expand_path(default_target))
|
@@ -572,31 +564,31 @@ module Simp::Rake::Build
|
|
572
564
|
|
573
565
|
_repoclose_pe = ENV.fetch('SIMP_PKG_repoclose_pe','no') == 'yes'
|
574
566
|
|
575
|
-
yum_conf_template =
|
576
|
-
[main]
|
577
|
-
keepcache=0
|
578
|
-
exactarch=1
|
579
|
-
obsoletes=1
|
580
|
-
gpgcheck=0
|
581
|
-
plugins=1
|
582
|
-
installonly_limit=5
|
583
|
-
<% unless #{_repoclose_pe} -%>
|
584
|
-
exclude=*-pe-*
|
585
|
-
<% end -%>
|
586
|
-
|
587
|
-
<% repo_files.each do |repo| -%>
|
588
|
-
include=file://<%= repo %>
|
589
|
-
<% end -%>
|
590
|
-
|
591
|
-
|
592
|
-
yum_repo_template =
|
593
|
-
[<%= repo_name %>]
|
594
|
-
name=<%= repo_name %>
|
595
|
-
baseurl=file://<%= repo_path %>
|
596
|
-
enabled=1
|
597
|
-
gpgcheck=0
|
598
|
-
protect=1
|
599
|
-
|
567
|
+
yum_conf_template = <<~YUM_CONF
|
568
|
+
[main]
|
569
|
+
keepcache=0
|
570
|
+
exactarch=1
|
571
|
+
obsoletes=1
|
572
|
+
gpgcheck=0
|
573
|
+
plugins=1
|
574
|
+
installonly_limit=5
|
575
|
+
<% unless #{_repoclose_pe} -%>
|
576
|
+
exclude=*-pe-*
|
577
|
+
<% end -%>
|
578
|
+
|
579
|
+
<% repo_files.each do |repo| -%>
|
580
|
+
include=file://<%= repo %>
|
581
|
+
<% end -%>
|
582
|
+
YUM_CONF
|
583
|
+
|
584
|
+
yum_repo_template = <<~YUM_REPO
|
585
|
+
[<%= repo_name %>]
|
586
|
+
name=<%= repo_name %>
|
587
|
+
baseurl=file://<%= repo_path %>
|
588
|
+
enabled=1
|
589
|
+
gpgcheck=0
|
590
|
+
protect=1
|
591
|
+
YUM_REPO
|
600
592
|
|
601
593
|
fail("#{args[:target_dir]} does not exist!") unless File.directory?(args[:target_dir])
|
602
594
|
|
@@ -677,9 +669,9 @@ protect=1
|
|
677
669
|
end
|
678
670
|
end
|
679
671
|
|
680
|
-
desc
|
672
|
+
desc <<~DESC
|
681
673
|
Print published status of all project RPMs
|
682
|
-
|
674
|
+
DESC
|
683
675
|
task :check_published => [:prep] do |t,args|
|
684
676
|
begin
|
685
677
|
yum_helper = Simp::YUM.new(
|
@@ -697,7 +689,12 @@ protect=1
|
|
697
689
|
|
698
690
|
if Dir.exist?(dir)
|
699
691
|
begin
|
700
|
-
require_rebuild?(dir, yum_helper, {
|
692
|
+
require_rebuild?(dir, yum_helper, {
|
693
|
+
fetch: false,
|
694
|
+
verbose: true,
|
695
|
+
check_git: true,
|
696
|
+
prefix: ''
|
697
|
+
})
|
701
698
|
rescue => e
|
702
699
|
_errmsg = "Error: require_rebuild?(): Status check failed on '#{dir}' => #{e}"
|
703
700
|
end
|
@@ -724,9 +721,24 @@ protect=1
|
|
724
721
|
return (0...24).map{ (65 + rand(26)).chr }.join.downcase
|
725
722
|
end
|
726
723
|
|
724
|
+
# Return a SIMP::YUM object configured for the local build dir or nil
|
725
|
+
#
|
726
|
+
# ENV vars:
|
727
|
+
# - Set `SIMP_PKG_verbose=yes` to report file operations as they happen.
|
728
|
+
# - Set `SIMP_YUM_makecache=no` if you do NOT want to rebuild the
|
729
|
+
# build-specific YUM cache
|
730
|
+
def get_yum_helper( makecache = (ENV.fetch('SIMP_YUM_makecache','yes') == 'yes') )
|
731
|
+
begin
|
732
|
+
build_yum_data = File.join(@distro_build_dir, 'yum_data')
|
733
|
+
return Simp::YUM.new(Simp::YUM.generate_yum_conf(build_yum_data), makecache)
|
734
|
+
rescue Simp::YUM::Error => e
|
735
|
+
$stderr.puts "Simp::YUM::Error: #{e}" if @verbose
|
736
|
+
end
|
737
|
+
end
|
738
|
+
|
727
739
|
# Check and see if 'dir' requires a rebuild based on published packages
|
728
740
|
#
|
729
|
-
# If 'fetch' is true => Download the RPM
|
741
|
+
# If 'fetch' is true => Download the published RPM
|
730
742
|
# If 'verbose' is true => Print helpful information to stderr
|
731
743
|
# If 'check_git' is true => Print the git tag status if 'verbose' is true
|
732
744
|
# 'prefix' is used to prepend verbose messages
|
@@ -735,7 +747,13 @@ protect=1
|
|
735
747
|
# - Method is too long
|
736
748
|
# - Method needs to be passed in class variables (@xxx) so that it
|
737
749
|
# can be pulled out into a library that is easily unit-testable
|
738
|
-
def require_rebuild?(dir, yum_helper, opts={
|
750
|
+
def require_rebuild?(dir, yum_helper, opts={
|
751
|
+
unique_namespace: generate_namespace,
|
752
|
+
fetch: false,
|
753
|
+
verbose: @verbose,
|
754
|
+
check_git: false,
|
755
|
+
prefix: ''
|
756
|
+
})
|
739
757
|
result = false
|
740
758
|
rpm_metadata = File.exist?(@rpm_dependency_file) ? YAML.load(File.read(@rpm_dependency_file)) : {}
|
741
759
|
dir_relpath = Pathname.new(dir).relative_path_from(Pathname.new(Dir.pwd)).to_path
|
@@ -870,7 +888,8 @@ protect=1
|
|
870
888
|
else
|
871
889
|
$stderr.puts "#{opts[:prefix]}Found Existing Remote RPM: #{published_rpm}" if opts[:verbose]
|
872
890
|
if opts[:fetch]
|
873
|
-
# Download
|
891
|
+
# Download published RPM, unless it's already been downloaded.
|
892
|
+
# TODO Unhandled edge case: Validate that downloaded RPM is valid
|
874
893
|
if File.exist?(File.join('dist', published_rpm))
|
875
894
|
$stderr.puts "#{opts[:prefix]}#{published_rpm} previously downloaded" if opts[:verbose]
|
876
895
|
else
|
@@ -914,101 +933,107 @@ protect=1
|
|
914
933
|
return result
|
915
934
|
end
|
916
935
|
|
936
|
+
def build_pupmod_rpm(dir, yum_helper, dbg_prefix = ' ')
|
937
|
+
unique_namespace = generate_namespace
|
938
|
+
if require_rebuild?(dir, yum_helper, {
|
939
|
+
unique_namespace: unique_namespace,
|
940
|
+
fetch: @fetch_published_rpm.nil? ? true : @fetch_published_rpm,
|
941
|
+
verbose: @verbose,
|
942
|
+
prefix: dbg_prefix,
|
943
|
+
})
|
944
|
+
$stderr.puts("#{dbg_prefix}Running 'rake pkg:rpm' on #{File.basename(dir)}") if @verbose
|
945
|
+
Rake::Task["#{unique_namespace}:pkg:rpm"].invoke
|
946
|
+
else
|
947
|
+
# Record metadata for the downloaded RPM
|
948
|
+
Simp::RPM::create_rpm_build_metadata(File.expand_path(dir))
|
949
|
+
end
|
950
|
+
true
|
951
|
+
end
|
952
|
+
|
953
|
+
|
954
|
+
def build_rakefile_rpm(dir, yum_helper, dbg_prefix = ' ')
|
955
|
+
if require_rebuild?(dir, yum_helper, {
|
956
|
+
fetch: @fetch_published_rpm.nil? ? true : @fetch_published_rpm,
|
957
|
+
verbose: @verbose,
|
958
|
+
prefix: dbg_prefix
|
959
|
+
})
|
960
|
+
$stderr.puts("#{dbg_prefix}Running 'rake pkg:rpm' in #{File.basename(dir)}") if @verbose
|
961
|
+
rake_flags = Rake.application.options.trace ? '--trace' : ''
|
962
|
+
cmd = %{SIMP_BUILD_version=#{@simp_version} rake pkg:rpm #{rake_flags} 2>&1}
|
963
|
+
|
964
|
+
build_success = true
|
965
|
+
begin
|
966
|
+
%x{#{cmd}}
|
967
|
+
build_success = $?.success?
|
968
|
+
|
969
|
+
built_rpm = true
|
970
|
+
rescue
|
971
|
+
build_success = false
|
972
|
+
end
|
973
|
+
|
974
|
+
unless build_success
|
975
|
+
if @verbose
|
976
|
+
$stderr.puts("First 'rake pkg:rpm' attempt for #{dir} failed, running bundle and trying again.")
|
977
|
+
end
|
978
|
+
|
979
|
+
if Bundler.respond_to?(:with_unbundled_env)
|
980
|
+
# Bundler 2.1+
|
981
|
+
clean_env_method = :with_unbundled_env
|
982
|
+
bundle_install_cmd = %{bundle config set with 'development' && bundle install}
|
983
|
+
else
|
984
|
+
# Old Bundler
|
985
|
+
clean_env_method = :with_clean_env
|
986
|
+
bundle_install_cmd = %{bundle install --with development}
|
987
|
+
end
|
988
|
+
|
989
|
+
::Bundler.send(clean_env_method) do
|
990
|
+
%x{#{bundle_install_cmd}}
|
991
|
+
|
992
|
+
output = %x{#{cmd} 2>&1}
|
993
|
+
|
994
|
+
unless $?.success?
|
995
|
+
raise("Error in #{dir} running #{cmd}\n#{output}")
|
996
|
+
end
|
997
|
+
end
|
998
|
+
end
|
999
|
+
else
|
1000
|
+
# Record metadata for the downloaded RPM
|
1001
|
+
Simp::RPM::create_rpm_build_metadata(File.expand_path(dir))
|
1002
|
+
built_rpm = true
|
1003
|
+
end
|
1004
|
+
end
|
1005
|
+
|
1006
|
+
|
917
1007
|
# Takes a list of directories to hop into and perform builds within
|
918
1008
|
#
|
919
1009
|
# The task must be passed so that we can output the calling name in the
|
920
1010
|
# status bar.
|
921
1011
|
def build(dirs, task, rebuild_for_arch=false, remake_yum_cache = false)
|
922
|
-
_verbose = ENV.fetch('SIMP_PKG_verbose','no') == 'yes'
|
923
|
-
dbg_prefix = ' ' # prefix for debug messages
|
924
|
-
|
925
1012
|
fail("Could not find RPM dependency file '#{@rpm_dependency_file}'") unless File.exist?(@rpm_dependency_file)
|
926
|
-
|
927
|
-
begin
|
928
|
-
yum_helper = Simp::YUM.new(
|
929
|
-
Simp::YUM.generate_yum_conf(File.join(@distro_build_dir, 'yum_data'))
|
930
|
-
)
|
931
|
-
rescue Simp::YUM::Error
|
932
|
-
end
|
1013
|
+
yum_helper = get_yum_helper( remake_yum_cache )
|
933
1014
|
|
934
1015
|
Parallel.map(
|
935
1016
|
# Allow for shell globs
|
936
|
-
Array(dirs),
|
937
|
-
|
938
|
-
|
1017
|
+
Array(dirs), {
|
1018
|
+
in_processes: @cpu_limit,
|
1019
|
+
progress: (ENV.fetch('SIMP_PKG_progress_bar','yes') == 'yes') ? task.name : nil,
|
1020
|
+
}
|
939
1021
|
) do |dir|
|
940
1022
|
fail("Could not find directory #{dir}") unless Dir.exist?(dir)
|
941
1023
|
|
942
1024
|
Dir.chdir(dir) do
|
943
1025
|
built_rpm = false
|
1026
|
+
$stderr.puts("\nPackaging #{File.basename(dir)}") if @verbose
|
944
1027
|
|
945
|
-
if @verbose
|
946
|
-
$stderr.puts("\nPackaging #{File.basename(dir)}")
|
947
|
-
end
|
948
|
-
|
949
|
-
# We're building a module, override anything down there
|
950
1028
|
if File.exist?('metadata.json')
|
951
|
-
|
952
|
-
|
953
|
-
$stderr.puts("#{dbg_prefix}Running 'rake pkg:rpm' on #{File.basename(dir)}") if @verbose
|
954
|
-
Rake::Task["#{unique_namespace}:pkg:rpm"].invoke
|
955
|
-
else
|
956
|
-
# Record metadata for the downloaded RPM
|
957
|
-
Simp::RPM::create_rpm_build_metadata(File.expand_path(dir))
|
958
|
-
end
|
959
|
-
|
960
|
-
built_rpm = true
|
961
|
-
|
962
|
-
# We're building one of the extra assets and should honor its Rakefile
|
963
|
-
# and RPM spec file.
|
1029
|
+
# We're building a module, override anything down there
|
1030
|
+
built_rpm = build_pupmod_rpm(dir, yum_helper)
|
964
1031
|
elsif File.exist?('Rakefile')
|
965
|
-
|
966
|
-
|
967
|
-
|
968
|
-
cmd = %{SIMP_BUILD_version=#{@simp_version} rake pkg:rpm #{rake_flags} 2>&1}
|
969
|
-
|
970
|
-
build_success = true
|
971
|
-
begin
|
972
|
-
%x{#{cmd}}
|
973
|
-
build_success = $?.success?
|
974
|
-
|
975
|
-
built_rpm = true
|
976
|
-
rescue
|
977
|
-
build_success = false
|
978
|
-
end
|
979
|
-
|
980
|
-
unless build_success
|
981
|
-
if @verbose
|
982
|
-
$stderr.puts("First 'rake pkg:rpm' attempt for #{dir} failed, running bundle and trying again.")
|
983
|
-
end
|
984
|
-
|
985
|
-
if Bundler.respond_to?(:with_unbundled_env)
|
986
|
-
# Bundler 2.1+
|
987
|
-
clean_env_method = :with_unbundled_env
|
988
|
-
bundle_install_cmd = %{bundle config set with 'development' && bundle install}
|
989
|
-
else
|
990
|
-
# Old Bundler
|
991
|
-
clean_env_method = :with_clean_env
|
992
|
-
bundle_install_cmd = %{bundle install --with development}
|
993
|
-
end
|
994
|
-
|
995
|
-
::Bundler.send(clean_env_method) do
|
996
|
-
%x{#{bundle_install_cmd}}
|
997
|
-
|
998
|
-
output = %x{#{cmd} 2>&1}
|
999
|
-
|
1000
|
-
unless $?.success?
|
1001
|
-
raise("Error in #{dir} running #{cmd}\n#{output}")
|
1002
|
-
end
|
1003
|
-
end
|
1004
|
-
end
|
1005
|
-
else
|
1006
|
-
# Record metadata for the downloaded RPM
|
1007
|
-
Simp::RPM::create_rpm_build_metadata(File.expand_path(dir))
|
1008
|
-
built_rpm = true
|
1009
|
-
end
|
1032
|
+
# We're building one of the extra assets and should honor its Rakefile
|
1033
|
+
# and RPM spec file.
|
1034
|
+
built_rpm = build_rakefile_rpm(dir, yum_helper)
|
1010
1035
|
else
|
1011
|
-
puts "Warning: '#{dir}' could not be built
|
1036
|
+
puts "Warning: '#{dir}' could not be built (not a pupmod & no Rakefile!)"
|
1012
1037
|
end
|
1013
1038
|
|
1014
1039
|
if built_rpm
|
@@ -1024,12 +1049,7 @@ protect=1
|
|
1024
1049
|
|
1025
1050
|
raise("No RPMs generated for #{dir}") if rpms.empty?
|
1026
1051
|
end
|
1027
|
-
|
1028
|
-
if @verbose
|
1029
|
-
rpms = Dir.glob('dist/*.rpm')
|
1030
|
-
# $stderr.puts("#{dbg_prefix}RPMS: #{rpms.join("\n#{dbg_prefix} ")}")
|
1031
|
-
$stderr.puts("Finished #{File.basename(dir)}")
|
1032
|
-
end
|
1052
|
+
$stderr.puts("Finished #{File.basename(dir)}") if @verbose
|
1033
1053
|
end
|
1034
1054
|
end
|
1035
1055
|
end
|
@@ -267,7 +267,13 @@ module Simp::Rake::Build::RpmDeps
|
|
267
267
|
def self.release_file_up_to_date?(new_release_info, rpm_release_file)
|
268
268
|
return false unless File.exist?(rpm_release_file)
|
269
269
|
|
270
|
-
|
270
|
+
# remove comments like "# release set by simp-core dependencies.yaml"
|
271
|
+
release_file_content = File.readlines(rpm_release_file).reject{|x| x =~ /^ *#/}.join("\n").strip
|
272
|
+
|
273
|
+
# sanitize numerics, etc.
|
274
|
+
new_release_content = "#{new_release_info}".strip
|
275
|
+
|
276
|
+
return release_file_content == new_release_content
|
271
277
|
end
|
272
278
|
|
273
279
|
# Generate 'build/rpm_metadata/release' file containing release qualifier
|
data/lib/simp/rake/build/tar.rb
CHANGED
@@ -51,7 +51,8 @@ module Simp::Rake::Build
|
|
51
51
|
'rubygem-simp-cli',
|
52
52
|
'simp',
|
53
53
|
'simp-gpgkeys',
|
54
|
-
'simp-utils'
|
54
|
+
'simp-utils',
|
55
|
+
'simp-vendored-r10k'
|
55
56
|
]
|
56
57
|
}
|
57
58
|
|
@@ -83,8 +84,11 @@ module Simp::Rake::Build
|
|
83
84
|
end
|
84
85
|
|
85
86
|
unless failures.empty?
|
86
|
-
msg = ['Error: Could not find the following packages:']
|
87
|
-
|
87
|
+
msg = ['Error: Could not find the following packages:'] +
|
88
|
+
failures +
|
89
|
+
['Did "dist/logs/last_rpm_build_metadata.yaml" get generated in the build directory?']
|
90
|
+
|
91
|
+
fail(msg.join("\n"))
|
88
92
|
end
|
89
93
|
end
|
90
94
|
end
|
@@ -342,7 +342,7 @@ describe 'rake pkg:signrpms and pkg:checksig' do
|
|
342
342
|
end
|
343
343
|
|
344
344
|
hosts.each do |host|
|
345
|
-
os_major = fact_on(host,'
|
345
|
+
os_major = fact_on(host,'os.release.major')
|
346
346
|
if os_major > '7'
|
347
347
|
# this problem only happens on EL > 7 in a docker container
|
348
348
|
describe "when gpg-agent's socket path is too long on #{host}" do
|
@@ -378,7 +378,7 @@ describe 'rake pkg:signrpms and pkg:checksig' do
|
|
378
378
|
:acceptable_exit_codes => [1]
|
379
379
|
)
|
380
380
|
|
381
|
-
err_msg = %r(Failed to sign
|
381
|
+
err_msg = %r(Failed to sign)
|
382
382
|
expect(result.stderr).to match(err_msg)
|
383
383
|
|
384
384
|
signature_check = on(host, "rpm -qip '#{test_rpm}' | grep ^Signature", run_opts)
|
@@ -3,7 +3,7 @@ require 'spec_helper'
|
|
3
3
|
|
4
4
|
describe Simp::Rake::Build::Helpers do
|
5
5
|
before :each do
|
6
|
-
dir
|
6
|
+
dir = File.expand_path( '../../files/simp_build', File.dirname( __FILE__ ) )
|
7
7
|
env = ENV['SIMP_RPM_dist'].dup
|
8
8
|
ENV['SIMP_RPM_dist'] = '.el7'
|
9
9
|
@obj = Simp::Rake::Build::Helpers.new( dir )
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: simp-rake-helpers
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 5.
|
4
|
+
version: 5.13.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Chris Tessmer
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2022-05-06 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: simp-beaker-helpers
|
@@ -592,8 +592,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
592
592
|
- !ruby/object:Gem::Version
|
593
593
|
version: '0'
|
594
594
|
requirements: []
|
595
|
-
|
596
|
-
rubygems_version: 2.7.6.3
|
595
|
+
rubygems_version: 3.0.9
|
597
596
|
signing_key:
|
598
597
|
specification_version: 4
|
599
598
|
summary: SIMP rake helpers
|