simp-rake-helpers 5.12.6 → 5.13.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 51d1aeb754d81247df05b01fce650e64c4b03fdab941f955e3180e79edcc2964
4
- data.tar.gz: e8d8c2ef11a657dfce5bd7755d94f024bd2466fbad243f930f6624bc7e699955
3
+ metadata.gz: b6f0550abc4ac7ec968a8590bbc7003d0de2753ae072909396fce25c01a7edd3
4
+ data.tar.gz: 4eb8efa7f00322290a3a45a6e304ac6b1798e3d47283e1ad525184ae95f9560f
5
5
  SHA512:
6
- metadata.gz: ff5da7ac89c5cf55ae28d69be89992a904e0341c33534e3e301eee6a409d7f801d2df49a2de8dc889e46eb1defb42233c5e707bf8d67c215972998f2a483272a
7
- data.tar.gz: 9a3bc2da54cc811be5c3129665124c90761f0c7a962ab54a1c8b11722e506b0691a7d429492e1d30d29930d082af942472dd7984b1bb674d5fe7c0c34928179a
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
 
@@ -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' skips the unpack section
114
- - SIMP_BUILD_unpack_merge => 'no' prevents auto-merging the unpacked DVD
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,
@@ -16,7 +16,7 @@ class R10KHelper
16
16
  end
17
17
 
18
18
  # Return true if the repository has local modifications, false otherwise.
19
- def dirty?
19
+ def dirty?(exclude_spec=false)
20
20
  repo_status = false
21
21
 
22
22
  return repo_status unless File.directory?(path)
@@ -252,61 +252,77 @@ module Simp::Rake::Build
252
252
  end
253
253
  end
254
254
 
255
- # Add the SIMP code
256
- system("tar --no-same-permissions -C #{dir} -xzf #{tball}")
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
- Dir.chdir("#{repo_target_dir}/SIMP") do
270
- # Add the SIMP Dependencies
271
- simp_base_ver = simpver.split('-').first
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
- if $simp6
274
- yum_dep_location = File.join(@build_dir,'yum_data','packages')
275
- else
276
- simp_dep_src = %(SIMP#{simp_base_ver}_#{baseos}#{baseosver}_#{arch})
277
- yum_dep_location = File.join(@build_dir,'yum_data',simp_dep_src,'packages')
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
- yum_dep_rpms = Dir.glob(File.join(yum_dep_location,'*.rpm'))
284
+ Dir.chdir("#{repo_target_dir}/SIMP") do
285
+ # Add the SIMP Dependencies
286
+ simp_base_ver = simpver.split('-').first
281
287
 
282
- unless File.directory?(yum_dep_location)
283
- fail("Could not find dependency directory at #{yum_dep_location}") unless reposync_active
284
- end
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
- if yum_dep_rpms.empty?
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
- # Add any one-off RPMs that you might want to add to your own build
291
- # These are *not* checked to make sure that they actually match your
292
- # environment
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
- yum_dep_rpms.each do |rpm|
299
- rpm_arch = rpm.split('.')[-2]
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
- unless File.directory?(rpm_arch)
302
- mkdir(rpm_arch)
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
- # Just in case this is a symlink, broken, or some other nonsense.
306
- target_file = File.join(rpm_arch,File.basename(rpm))
307
- rm_f(target_file) if File.exist?(target_file)
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
- cp(rpm,rpm_arch, :verbose => verbose)
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.join(' '))
444
+ system(mkisofs_cmd)
427
445
  end
428
446
  end # End of tarfiles loop
429
447
 
@@ -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 = <<~EOM
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
- EOM
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 <<-EOM
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
- EOM
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 <<-EOM
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
- EOM
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
- begin
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 <<-EOM
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
- EOM
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 <<-EOM
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
- EOM
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 <<-EOM
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
- EOM
346
+ DESC
355
347
  task :aux => [:prep] do |t,args|
356
348
  build(@build_dirs[:aux],t)
357
349
  end
358
350
 
359
- desc <<-EOM
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
- EOM
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 <<-EOM
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
- EOM
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 <<-EOM
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
- EOM
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 <<-EOM
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
- EOM
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 = <<-EOF
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
- EOF
591
-
592
- yum_repo_template = <<-EOF
593
- [<%= repo_name %>]
594
- name=<%= repo_name %>
595
- baseurl=file://<%= repo_path %>
596
- enabled=1
597
- gpgcheck=0
598
- protect=1
599
- EOF
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 <<-EOM
672
+ desc <<~DESC
681
673
  Print published status of all project RPMs
682
- EOM
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, { :verbose => true, :check_git => true, :prefix => '' })
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={ :unique_namespace => generate_namespace, :fetch => false, :verbose => @verbose, :check_git => false, :prefix => '' })
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 remote RPM, unless already downloaded it.
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
- :in_processes => @cpu_limit,
938
- :progress => task.name
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
- unique_namespace = generate_namespace
952
- if require_rebuild?(dir, yum_helper, { :unique_namespace => unique_namespace, :fetch => true, :verbose => @verbose, :prefix => dbg_prefix})
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
- if require_rebuild?(dir, yum_helper, { :fetch => true, :verbose => @verbose, :prefix => dbg_prefix })
966
- $stderr.puts("#{dbg_prefix}Running 'rake pkg:rpm' in #{File.basename(dir)}") if @verbose
967
- rake_flags = Rake.application.options.trace ? '--trace' : ''
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 via Rake"
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
- return File.read(rpm_release_file).strip == new_release_info.strip
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
@@ -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
- fail((msg + failures).join("\n"))
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
@@ -2,5 +2,5 @@ module Simp; end
2
2
  module Simp::Rake; end
3
3
 
4
4
  class Simp::Rake::Helpers
5
- VERSION = '5.12.6'
5
+ VERSION = '5.13.1'
6
6
  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,'operatingsystemmajrelease')
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 #{test_rpm} in 5 seconds)
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 = File.expand_path( '../../files/simp_build', File.dirname( __FILE__ ) )
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.12.6
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: 2021-10-21 00:00:00.000000000 Z
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
- rubyforge_project:
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