simp-rake-helpers 5.12.4 → 5.13.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +23 -0
- data/lib/simp/rake/build/build.rb +1 -1
- data/lib/simp/rake/build/iso.rb +56 -5
- data/lib/simp/rake/build/pkg.rb +182 -152
- data/lib/simp/rake/build/rpmdeps.rb +7 -1
- data/lib/simp/rake/build/tar.rb +14 -4
- data/lib/simp/rake/helpers/version.rb +1 -1
- data/lib/simp/rpm_signer.rb +8 -3
- data/spec/acceptance/suites/default/55_build_pkg_signing_spec.rb +2 -2
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5686fa0464ed4e47817e43609d4aa2ec52ccab1a9facd6429d73ec39b321f487
|
4
|
+
data.tar.gz: f787b34312ad9033c21811615adb5eb8d069655038e309109fab82560f1e0b81
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 64c644cf1b04dbceaface541e8b6d219a7d6d9f93ed863a18062b25dece5307d62715a1fee0351e444c3f00e9c8ce476b7455a08f2b76291184949796e1770cf
|
7
|
+
data.tar.gz: 18663a6da6f497810c0d505d2fd73109cd97355b664deaa3609f60787dd280fb6a6bee6f3e0f2fa473dacffc696bb369994396b271f48bebeae6fb1a31fabdc4
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,26 @@
|
|
1
|
+
### 5.13.0 /2021-11-14
|
2
|
+
- Added:
|
3
|
+
- Output the full `mkisofs` command when building an ISO
|
4
|
+
|
5
|
+
### 5.12.7 / 2021-10-26
|
6
|
+
- Added:
|
7
|
+
- Env var `SIMP_PKG_progress_bar=no` to turn off pkg RPM build progress bars
|
8
|
+
- Env var `SIMP_PKG_fetch_published_rpm=no` to prevent downloading a
|
9
|
+
published package
|
10
|
+
- Fixed:
|
11
|
+
- RPM builds no longer fail with leftover generated
|
12
|
+
`build/rpm_metadata/releases` files
|
13
|
+
- Removed unused code, tidied up some confusing bits to make structure more
|
14
|
+
obvious
|
15
|
+
|
16
|
+
### 5.12.6 / 2021-10-19
|
17
|
+
- Ensure that the `Updates` directory does not link to files in itself
|
18
|
+
|
19
|
+
### 5.12.5 / 2021-10-07
|
20
|
+
- Fixed a bug where `build:auto` failed when building the SIMP ISO for EL7,
|
21
|
+
because the code attempted to move a directory onto itself.
|
22
|
+
- Ensured GPG keys in simp-gpgkeys are available in the DVD overlay tar file
|
23
|
+
|
1
24
|
### 5.12.4 / 2021-10-05
|
2
25
|
- Ensure that the DIST qualifier is added to all built RPMs
|
3
26
|
- Use the new SimpRepos directory layout when building an ISO using externally
|
@@ -282,7 +282,7 @@ module Simp::Rake::Build
|
|
282
282
|
Error: Could not find anything to do!
|
283
283
|
|
284
284
|
In #{target_dir}:
|
285
|
-
No packages in either packages.yaml or the packages/ directory
|
285
|
+
No packages in either packages.yaml or the packages/ directory and no repos found in the reposync/ directory
|
286
286
|
EOM
|
287
287
|
end
|
288
288
|
|
data/lib/simp/rake/build/iso.rb
CHANGED
@@ -190,6 +190,7 @@ module Simp::Rake::Build
|
|
190
190
|
end
|
191
191
|
end
|
192
192
|
|
193
|
+
|
193
194
|
repo_target_dir = dir
|
194
195
|
|
195
196
|
# If we've pulled in reposync directories, we expect them to
|
@@ -256,7 +257,14 @@ module Simp::Rake::Build
|
|
256
257
|
|
257
258
|
# Pop the SIMP directory from the tarball into the correct spot
|
258
259
|
# FIXME: This is a hack
|
259
|
-
|
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
|
267
|
+
end
|
260
268
|
|
261
269
|
Dir.chdir("#{repo_target_dir}/SIMP") do
|
262
270
|
# Add the SIMP Dependencies
|
@@ -301,8 +309,10 @@ module Simp::Rake::Build
|
|
301
309
|
cp(rpm,rpm_arch, :verbose => verbose)
|
302
310
|
end
|
303
311
|
|
304
|
-
|
305
|
-
|
312
|
+
if reposync_active
|
313
|
+
fail("Error: Could not run createrepo in #{Dir.pwd}") unless system(%(#{mkrepo} .))
|
314
|
+
else
|
315
|
+
ln_sf('noarch', arch, :verbose => verbose) if (!File.directory?(arch) && File.directory?('noarch'))
|
306
316
|
fail("Could not find architecture '#{arch}' in the SIMP distribution") unless (File.directory?(arch) || File.symlink?(arch))
|
307
317
|
|
308
318
|
# Get everything set up properly...
|
@@ -320,6 +330,45 @@ module Simp::Rake::Build
|
|
320
330
|
ln_sf(source_rpm,link_target, :verbose => verbose)
|
321
331
|
end
|
322
332
|
end
|
333
|
+
|
334
|
+
fail("Error: Could not run createrepo in #{Dir.pwd}") unless system(%(#{mkrepo} .))
|
335
|
+
end
|
336
|
+
end
|
337
|
+
end
|
338
|
+
|
339
|
+
### Munge the Repos
|
340
|
+
|
341
|
+
# Create an Updates directory that is properly populated
|
342
|
+
updates_readme = <<~README
|
343
|
+
This directory houses updates to NON-MODULAR RPMs.
|
344
|
+
|
345
|
+
DO NOT put modular RPMs in this directory or you will break your
|
346
|
+
system updates!
|
347
|
+
README
|
348
|
+
|
349
|
+
updates_dir = File.join(dir, 'Updates')
|
350
|
+
mkdir_p(updates_dir)
|
351
|
+
|
352
|
+
Dir.chdir(updates_dir) do
|
353
|
+
File.open('README','w'){|fh| fh.puts(updates_readme) }
|
354
|
+
|
355
|
+
repos = Dir.glob(File.join('..','**','repodata'))
|
356
|
+
modular_repos = Dir.glob(File.join('..','**','repodata','*-modules.*'))
|
357
|
+
non_modular_repos = repos.select{|x| modular_repos.grep(%r{^#{Regexp.escape(x)}}).empty? }
|
358
|
+
non_modular_repos.map!{|x| File.split(x).first}
|
359
|
+
non_modular_repos.delete_if{|x| x.match(%r{/SimpRepos|/SIMP}) }
|
360
|
+
non_modular_repos.each do |non_modular_repo|
|
361
|
+
Dir.glob(File.join(non_modular_repo, '**', '*.rpm')).each do |rpm|
|
362
|
+
# when non_modular_repo is '..', can still find RPMs we need
|
363
|
+
# to exclude
|
364
|
+
next if rpm.match(%r{/SimpRepos|/SIMP})
|
365
|
+
|
366
|
+
rpm_dest = File.basename(rpm)
|
367
|
+
if File.exist?(rpm) && File.exist?(rpm_dest)
|
368
|
+
next if (File.realpath(rpm) == File.realpath(rpm_dest))
|
369
|
+
end
|
370
|
+
|
371
|
+
ln_sf(rpm, rpm_dest, :verbose => verbose)
|
323
372
|
end
|
324
373
|
end
|
325
374
|
|
@@ -372,9 +421,11 @@ module Simp::Rake::Build
|
|
372
421
|
'-x ./lost+found',
|
373
422
|
"-o #{@simp_output_iso}",
|
374
423
|
dir
|
375
|
-
]
|
424
|
+
].join(' ')
|
425
|
+
|
426
|
+
$stdout.puts "Running: #{mkisofs_cmd}"
|
376
427
|
|
377
|
-
system(mkisofs_cmd
|
428
|
+
system(mkisofs_cmd)
|
378
429
|
end
|
379
430
|
end # End of tarfiles loop
|
380
431
|
|
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
|
|
@@ -610,7 +602,7 @@ protect=1
|
|
610
602
|
.delete_if{|x| x =~ /\.src\.rpm$/}
|
611
603
|
.each do |path|
|
612
604
|
sym_path = "repos/base/#{File.basename(path)}"
|
613
|
-
|
605
|
+
ln_sf(path,sym_path, :verbose => @verbose) unless File.exists?(sym_path)
|
614
606
|
end
|
615
607
|
|
616
608
|
if args[:aux_dir]
|
@@ -618,7 +610,7 @@ protect=1
|
|
618
610
|
.delete_if{|x| x =~ /\.src\.rpm$/}
|
619
611
|
.each do |path|
|
620
612
|
sym_path = "repos/lookaside/#{File.basename(path)}"
|
621
|
-
|
613
|
+
ln_sf(path,sym_path, :verbose => @verbose) unless File.exists?(sym_path)
|
622
614
|
end
|
623
615
|
end
|
624
616
|
|
@@ -643,7 +635,8 @@ protect=1
|
|
643
635
|
file.write(ERB.new(yum_conf_template,nil,'-').result(binding))
|
644
636
|
end
|
645
637
|
|
646
|
-
|
638
|
+
dnf_system = which('dnf')
|
639
|
+
if dnf_system
|
647
640
|
cmd = 'repoclosure -c base.conf --disablerepo=* --enablerepo=base'
|
648
641
|
else
|
649
642
|
cmd = 'repoclosure -c repodata -n -t -r base -l lookaside -c yum.conf'
|
@@ -661,15 +654,24 @@ protect=1
|
|
661
654
|
if (!$?.success? || (repoclosure_output =~ /nresolved/))
|
662
655
|
errmsg = ['Error: REPOCLOSURE FAILED:']
|
663
656
|
errmsg << [repoclosure_output]
|
664
|
-
|
657
|
+
puts(errmsg.join("\n"))
|
658
|
+
|
659
|
+
if dnf_system
|
660
|
+
if ENV.fetch('SIMP_BUILD_prompt', 'yes') != 'no'
|
661
|
+
puts('- Press any key to continue or ^C to abort -')
|
662
|
+
$stdin.gets
|
663
|
+
end
|
664
|
+
else
|
665
|
+
fail('Repoclosure Failed')
|
666
|
+
end
|
665
667
|
end
|
666
668
|
end
|
667
669
|
end
|
668
670
|
end
|
669
671
|
|
670
|
-
desc
|
672
|
+
desc <<~DESC
|
671
673
|
Print published status of all project RPMs
|
672
|
-
|
674
|
+
DESC
|
673
675
|
task :check_published => [:prep] do |t,args|
|
674
676
|
begin
|
675
677
|
yum_helper = Simp::YUM.new(
|
@@ -687,7 +689,12 @@ protect=1
|
|
687
689
|
|
688
690
|
if Dir.exist?(dir)
|
689
691
|
begin
|
690
|
-
require_rebuild?(dir, yum_helper, {
|
692
|
+
require_rebuild?(dir, yum_helper, {
|
693
|
+
fetch: false,
|
694
|
+
verbose: true,
|
695
|
+
check_git: true,
|
696
|
+
prefix: ''
|
697
|
+
})
|
691
698
|
rescue => e
|
692
699
|
_errmsg = "Error: require_rebuild?(): Status check failed on '#{dir}' => #{e}"
|
693
700
|
end
|
@@ -714,9 +721,24 @@ protect=1
|
|
714
721
|
return (0...24).map{ (65 + rand(26)).chr }.join.downcase
|
715
722
|
end
|
716
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
|
+
|
717
739
|
# Check and see if 'dir' requires a rebuild based on published packages
|
718
740
|
#
|
719
|
-
# If 'fetch' is true => Download the RPM
|
741
|
+
# If 'fetch' is true => Download the published RPM
|
720
742
|
# If 'verbose' is true => Print helpful information to stderr
|
721
743
|
# If 'check_git' is true => Print the git tag status if 'verbose' is true
|
722
744
|
# 'prefix' is used to prepend verbose messages
|
@@ -725,7 +747,13 @@ protect=1
|
|
725
747
|
# - Method is too long
|
726
748
|
# - Method needs to be passed in class variables (@xxx) so that it
|
727
749
|
# can be pulled out into a library that is easily unit-testable
|
728
|
-
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
|
+
})
|
729
757
|
result = false
|
730
758
|
rpm_metadata = File.exist?(@rpm_dependency_file) ? YAML.load(File.read(@rpm_dependency_file)) : {}
|
731
759
|
dir_relpath = Pathname.new(dir).relative_path_from(Pathname.new(Dir.pwd)).to_path
|
@@ -860,7 +888,8 @@ protect=1
|
|
860
888
|
else
|
861
889
|
$stderr.puts "#{opts[:prefix]}Found Existing Remote RPM: #{published_rpm}" if opts[:verbose]
|
862
890
|
if opts[:fetch]
|
863
|
-
# Download
|
891
|
+
# Download published RPM, unless it's already been downloaded.
|
892
|
+
# TODO Unhandled edge case: Validate that downloaded RPM is valid
|
864
893
|
if File.exist?(File.join('dist', published_rpm))
|
865
894
|
$stderr.puts "#{opts[:prefix]}#{published_rpm} previously downloaded" if opts[:verbose]
|
866
895
|
else
|
@@ -904,101 +933,107 @@ protect=1
|
|
904
933
|
return result
|
905
934
|
end
|
906
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
|
+
|
907
1007
|
# Takes a list of directories to hop into and perform builds within
|
908
1008
|
#
|
909
1009
|
# The task must be passed so that we can output the calling name in the
|
910
1010
|
# status bar.
|
911
1011
|
def build(dirs, task, rebuild_for_arch=false, remake_yum_cache = false)
|
912
|
-
_verbose = ENV.fetch('SIMP_PKG_verbose','no') == 'yes'
|
913
|
-
dbg_prefix = ' ' # prefix for debug messages
|
914
|
-
|
915
1012
|
fail("Could not find RPM dependency file '#{@rpm_dependency_file}'") unless File.exist?(@rpm_dependency_file)
|
916
|
-
|
917
|
-
begin
|
918
|
-
yum_helper = Simp::YUM.new(
|
919
|
-
Simp::YUM.generate_yum_conf(File.join(@distro_build_dir, 'yum_data'))
|
920
|
-
)
|
921
|
-
rescue Simp::YUM::Error
|
922
|
-
end
|
1013
|
+
yum_helper = get_yum_helper( remake_yum_cache )
|
923
1014
|
|
924
1015
|
Parallel.map(
|
925
1016
|
# Allow for shell globs
|
926
|
-
Array(dirs),
|
927
|
-
|
928
|
-
|
1017
|
+
Array(dirs), {
|
1018
|
+
in_processes: @cpu_limit,
|
1019
|
+
progress: (ENV.fetch('SIMP_PKG_progress_bar','yes') == 'yes') ? task.name : nil,
|
1020
|
+
}
|
929
1021
|
) do |dir|
|
930
1022
|
fail("Could not find directory #{dir}") unless Dir.exist?(dir)
|
931
1023
|
|
932
1024
|
Dir.chdir(dir) do
|
933
1025
|
built_rpm = false
|
1026
|
+
$stderr.puts("\nPackaging #{File.basename(dir)}") if @verbose
|
934
1027
|
|
935
|
-
if @verbose
|
936
|
-
$stderr.puts("\nPackaging #{File.basename(dir)}")
|
937
|
-
end
|
938
|
-
|
939
|
-
# We're building a module, override anything down there
|
940
1028
|
if File.exist?('metadata.json')
|
941
|
-
|
942
|
-
|
943
|
-
$stderr.puts("#{dbg_prefix}Running 'rake pkg:rpm' on #{File.basename(dir)}") if @verbose
|
944
|
-
Rake::Task["#{unique_namespace}:pkg:rpm"].invoke
|
945
|
-
else
|
946
|
-
# Record metadata for the downloaded RPM
|
947
|
-
Simp::RPM::create_rpm_build_metadata(File.expand_path(dir))
|
948
|
-
end
|
949
|
-
|
950
|
-
built_rpm = true
|
951
|
-
|
952
|
-
# We're building one of the extra assets and should honor its Rakefile
|
953
|
-
# and RPM spec file.
|
1029
|
+
# We're building a module, override anything down there
|
1030
|
+
built_rpm = build_pupmod_rpm(dir, yum_helper)
|
954
1031
|
elsif File.exist?('Rakefile')
|
955
|
-
|
956
|
-
|
957
|
-
|
958
|
-
cmd = %{SIMP_BUILD_version=#{@simp_version} rake pkg:rpm #{rake_flags} 2>&1}
|
959
|
-
|
960
|
-
build_success = true
|
961
|
-
begin
|
962
|
-
%x{#{cmd}}
|
963
|
-
build_success = $?.success?
|
964
|
-
|
965
|
-
built_rpm = true
|
966
|
-
rescue
|
967
|
-
build_success = false
|
968
|
-
end
|
969
|
-
|
970
|
-
unless build_success
|
971
|
-
if @verbose
|
972
|
-
$stderr.puts("First 'rake pkg:rpm' attempt for #{dir} failed, running bundle and trying again.")
|
973
|
-
end
|
974
|
-
|
975
|
-
if Bundler.respond_to?(:with_unbundled_env)
|
976
|
-
# Bundler 2.1+
|
977
|
-
clean_env_method = :with_unbundled_env
|
978
|
-
bundle_install_cmd = %{bundle config set with 'development' && bundle install}
|
979
|
-
else
|
980
|
-
# Old Bundler
|
981
|
-
clean_env_method = :with_clean_env
|
982
|
-
bundle_install_cmd = %{bundle install --with development}
|
983
|
-
end
|
984
|
-
|
985
|
-
::Bundler.send(clean_env_method) do
|
986
|
-
%x{#{bundle_install_cmd}}
|
987
|
-
|
988
|
-
output = %x{#{cmd} 2>&1}
|
989
|
-
|
990
|
-
unless $?.success?
|
991
|
-
raise("Error in #{dir} running #{cmd}\n#{output}")
|
992
|
-
end
|
993
|
-
end
|
994
|
-
end
|
995
|
-
else
|
996
|
-
# Record metadata for the downloaded RPM
|
997
|
-
Simp::RPM::create_rpm_build_metadata(File.expand_path(dir))
|
998
|
-
built_rpm = true
|
999
|
-
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)
|
1000
1035
|
else
|
1001
|
-
puts "Warning: '#{dir}' could not be built
|
1036
|
+
puts "Warning: '#{dir}' could not be built (not a pupmod & no Rakefile!)"
|
1002
1037
|
end
|
1003
1038
|
|
1004
1039
|
if built_rpm
|
@@ -1014,12 +1049,7 @@ protect=1
|
|
1014
1049
|
|
1015
1050
|
raise("No RPMs generated for #{dir}") if rpms.empty?
|
1016
1051
|
end
|
1017
|
-
|
1018
|
-
if @verbose
|
1019
|
-
rpms = Dir.glob('dist/*.rpm')
|
1020
|
-
# $stderr.puts("#{dbg_prefix}RPMS: #{rpms.join("\n#{dbg_prefix} ")}")
|
1021
|
-
$stderr.puts("Finished #{File.basename(dir)}")
|
1022
|
-
end
|
1052
|
+
$stderr.puts("Finished #{File.basename(dir)}") if @verbose
|
1023
1053
|
end
|
1024
1054
|
end
|
1025
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
|
@@ -126,10 +130,16 @@ module Simp::Rake::Build
|
|
126
130
|
|
127
131
|
Simp::RPM.copy_wo_vcs(@dvd_src,".",base_dir)
|
128
132
|
|
129
|
-
# Copy in the GPG Public Keys
|
133
|
+
# Copy in the GPG Public Keys from @build_dir
|
130
134
|
mkdir_p("#{destdir}/GPGKEYS")
|
131
135
|
ln(Dir.glob("#{@build_dir}/GPGKEYS/RPM-GPG-KEY*"), "#{destdir}/GPGKEYS", { :force => true })
|
132
136
|
|
137
|
+
# Copy in the GPG Public Keys packaged by simp-gpgkeys
|
138
|
+
simp_gpgkeys = File.join(@src_dir, 'assets', 'gpgkeys', 'GPGKEYS')
|
139
|
+
if Dir.exist?(simp_gpgkeys)
|
140
|
+
ln(Dir.glob("#{simp_gpgkeys}/RPM-GPG-KEY*"), "#{destdir}/GPGKEYS", { :force => true })
|
141
|
+
end
|
142
|
+
|
133
143
|
# Copy in the auto-build RPMs
|
134
144
|
Dir.chdir("#{@build_dir}/SIMP/RPMS") do
|
135
145
|
Dir.glob('*').each do |type|
|
data/lib/simp/rpm_signer.rb
CHANGED
@@ -195,8 +195,13 @@ class Simp::RpmSigner
|
|
195
195
|
# the first RPM to be signed with the key after the gpg-agent is
|
196
196
|
# started and the key's passphrase has not been cleared from the
|
197
197
|
# agent's cache.
|
198
|
-
read.expect(/pass\s?phrase
|
199
|
-
|
198
|
+
read.expect(/(pass\s?phrase:|verwrite).*/) do |text|
|
199
|
+
if text.last.include?('verwrite')
|
200
|
+
write.puts('y')
|
201
|
+
else
|
202
|
+
write.puts(gpgkey[:password])
|
203
|
+
end
|
204
|
+
|
200
205
|
write.flush
|
201
206
|
end
|
202
207
|
end
|
@@ -287,7 +292,7 @@ class Simp::RpmSigner
|
|
287
292
|
begin
|
288
293
|
results = Parallel.map(
|
289
294
|
to_sign,
|
290
|
-
:in_processes =>
|
295
|
+
:in_processes => 1,
|
291
296
|
:progress => opts[:progress_bar_title]
|
292
297
|
) do |rpm|
|
293
298
|
_result = nil
|
@@ -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)
|
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.0
|
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-01-11 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: simp-beaker-helpers
|