simp-rake-helpers 5.24.0 → 6.0.0
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 +4 -4
- data/.gitignore +20 -1
- data/CHANGELOG.md +33 -0
- data/Gemfile +14 -6
- data/lib/simp/command_utils.rb +6 -3
- data/lib/simp/componentinfo.rb +47 -33
- data/lib/simp/local_gpg_signing_key.rb +302 -303
- data/lib/simp/packer/iso_vars_json.rb +17 -15
- data/lib/simp/rake/build/auto.rb +415 -432
- data/lib/simp/rake/build/build.rb +119 -124
- data/lib/simp/rake/build/clean.rb +39 -39
- data/lib/simp/rake/build/code.rb +125 -128
- data/lib/simp/rake/build/constants.rb +7 -4
- data/lib/simp/rake/build/deps.rb +196 -207
- data/lib/simp/rake/build/helpers.rb +17 -13
- data/lib/simp/rake/build/iso.rb +404 -411
- data/lib/simp/rake/build/pkg.rb +752 -759
- data/lib/simp/rake/build/rpmdeps.rb +70 -70
- data/lib/simp/rake/build/spec.rb +44 -46
- data/lib/simp/rake/build/tar.rb +169 -173
- data/lib/simp/rake/build/unpack.rb +105 -107
- data/lib/simp/rake/build/upload.rb +93 -102
- data/lib/simp/rake/fixtures.rb +69 -66
- data/lib/simp/rake/helpers/rpm_spec.rb +10 -7
- data/lib/simp/rake/helpers/version.rb +3 -1
- data/lib/simp/rake/helpers.rb +12 -10
- data/lib/simp/rake/pkg.rb +417 -440
- data/lib/simp/rake/pupmod/helpers.rb +100 -87
- data/lib/simp/rake/pupmod/module_build.rb +39 -0
- data/lib/simp/rake/rubygem.rb +57 -56
- data/lib/simp/rake.rb +34 -29
- data/lib/simp/relchecks.rb +52 -43
- data/lib/simp/rpm.rb +123 -127
- data/lib/simp/rpm_signer.rb +57 -55
- data/lib/simp/yum.rb +54 -53
- data/spec/acceptance/nodesets/{default_ruby3_1.yml → almalinux10.yml} +4 -4
- data/spec/acceptance/nodesets/{default.yml → almalinux8.yml} +2 -2
- data/spec/acceptance/nodesets/almalinux9.yml +25 -0
- data/spec/acceptance/suites/default/00_pkg_rpm_custom_scriptlets_spec.rb +23 -28
- data/spec/acceptance/suites/default/10_pkg_rpm_spec.rb +54 -56
- data/spec/acceptance/suites/default/30_pkg_misc_spec.rb +17 -19
- data/spec/acceptance/suites/default/50_local_gpg_signing_key_spec.rb +5 -5
- data/spec/acceptance/suites/default/55_build_pkg_signing_spec.rb +109 -101
- data/spec/acceptance/suites/default/files/testpackage/spec/classes/init_spec.rb +1 -0
- data/spec/acceptance/suites/default/files/testpackage/spec/files/mock_something.rb +3 -1
- data/spec/acceptance/suites/default/files/testpackage/utils/convert_v1_to_v2.rb +2 -0
- data/spec/acceptance/suites/default/support/build_project_helpers.rb +20 -17
- data/spec/acceptance/suites/default/support/build_user_helpers.rb +4 -2
- data/spec/acceptance/suites/default/support/pkg_rpm_helpers.rb +30 -31
- data/spec/acceptance/support/simp_rake_helpers.rb +3 -1
- data/spec/lib/simp/command_utils_spec.rb +13 -10
- data/spec/lib/simp/componentinfo_changelog_regex_spec.rb +33 -33
- data/spec/lib/simp/componentinfo_spec.rb +99 -86
- data/spec/lib/simp/packer/iso_vars_json_spec.rb +16 -14
- data/spec/lib/simp/rake/build/helpers_spec.rb +7 -7
- data/spec/lib/simp/rake/build/rpmdeps_spec.rb +48 -46
- data/spec/lib/simp/rake/helpers_spec.rb +6 -5
- data/spec/lib/simp/rake/pkg_spec.rb +7 -5
- data/spec/lib/simp/rake/pupmod/fixtures/othermod/spec/classes/init_spec.rb +3 -1
- data/spec/lib/simp/rake/pupmod/fixtures/othermod/spec/spec_helper.rb +2 -0
- data/spec/lib/simp/rake/pupmod/fixtures/simpmod/spec/acceptance/suites/default/class_spec.rb +6 -5
- data/spec/lib/simp/rake/pupmod/fixtures/simpmod/spec/classes/init_spec.rb +51 -33
- data/spec/lib/simp/rake/pupmod/fixtures/simpmod/spec/spec_helper.rb +15 -16
- data/spec/lib/simp/rake/pupmod/fixtures/simpmod/spec/spec_helper_acceptance.rb +9 -9
- data/spec/lib/simp/rake/pupmod/helpers_spec.rb +20 -19
- data/spec/lib/simp/rake/pupmod/module_build_spec.rb +87 -0
- data/spec/lib/simp/rake_spec.rb +7 -6
- data/spec/lib/simp/relchecks_check_rpm_changelog_spec.rb +26 -31
- data/spec/lib/simp/relchecks_compare_latest_tag_spec.rb +32 -26
- data/spec/lib/simp/relchecks_create_tag_changelog_spec.rb +27 -19
- data/spec/lib/simp/rpm_signer_spec.rb +45 -39
- data/spec/lib/simp/rpm_spec.rb +190 -194
- data/spec/spec_helper.rb +4 -2
- data/spec/spec_helper_acceptance.rb +3 -5
- metadata +47 -76
- data/bin/simp_rake_helpers +0 -3
- data/lib/simp/ci/gitlab.rb +0 -226
- data/lib/simp/rake/ci.rb +0 -31
- data/spec/lib/simp/ci/files/global_nodesets_only/spec/acceptance/nodesets/default.yml +0 -41
- data/spec/lib/simp/ci/files/global_nodesets_only/spec/acceptance/nodesets/oel.yml +0 -41
- data/spec/lib/simp/ci/files/job_broken_link_nodeset/spec/acceptance/nodesets/centos.yml +0 -41
- data/spec/lib/simp/ci/files/job_broken_link_nodeset/spec/acceptance/nodesets/oel.yml +0 -41
- data/spec/lib/simp/ci/files/job_broken_link_nodeset/spec/acceptance/suites/default/class_spec.rb +0 -0
- data/spec/lib/simp/ci/files/job_invalid_nodeset/spec/acceptance/nodesets/default.yml +0 -41
- data/spec/lib/simp/ci/files/job_invalid_nodeset/spec/acceptance/nodesets/oel.yml +0 -41
- data/spec/lib/simp/ci/files/job_invalid_nodeset/spec/acceptance/suites/default/class_spec.rb +0 -0
- data/spec/lib/simp/ci/files/job_invalid_suite/spec/acceptance/nodesets/default.yml +0 -41
- data/spec/lib/simp/ci/files/job_invalid_suite/spec/acceptance/nodesets/oel.yml +0 -41
- data/spec/lib/simp/ci/files/job_invalid_suite/spec/acceptance/suites/default/class_spec.rb +0 -0
- data/spec/lib/simp/ci/files/job_missing_nodeset/spec/acceptance/nodesets/default.yml +0 -41
- data/spec/lib/simp/ci/files/job_missing_nodeset/spec/acceptance/nodesets/oel.yml +0 -41
- data/spec/lib/simp/ci/files/job_missing_nodeset/spec/acceptance/suites/default/class_spec.rb +0 -0
- data/spec/lib/simp/ci/files/job_missing_suite_and_nodeset/spec/acceptance/nodesets/default.yml +0 -41
- data/spec/lib/simp/ci/files/job_missing_suite_and_nodeset/spec/acceptance/nodesets/oel.yml +0 -41
- data/spec/lib/simp/ci/files/job_missing_suite_and_nodeset/spec/acceptance/suites/default/class_spec.rb +0 -0
- data/spec/lib/simp/ci/files/multiple_invalid_jobs/spec/acceptance/nodesets/default.yml +0 -41
- data/spec/lib/simp/ci/files/multiple_invalid_jobs/spec/acceptance/nodesets/oel.yml +0 -41
- data/spec/lib/simp/ci/files/multiple_invalid_jobs/spec/acceptance/suites/default/class_spec.rb +0 -0
- data/spec/lib/simp/ci/files/multiple_invalid_jobs/spec/acceptance/suites/feature-1/feature-1_spec.rb +0 -0
- data/spec/lib/simp/ci/files/multiple_invalid_jobs/spec/acceptance/suites/feature_2/feature_2_spec.rb +0 -0
- data/spec/lib/simp/ci/files/multiple_invalid_jobs/spec/acceptance/suites/feature_2/nodesets/default.yml +0 -35
- data/spec/lib/simp/ci/files/multiple_invalid_jobs/spec/acceptance/suites/feature_2/nodesets/oel.yml +0 -35
- data/spec/lib/simp/ci/files/multiple_valid_jobs/spec/acceptance/nodesets/default.yml +0 -41
- data/spec/lib/simp/ci/files/multiple_valid_jobs/spec/acceptance/nodesets/oel.yml +0 -41
- data/spec/lib/simp/ci/files/multiple_valid_jobs/spec/acceptance/suites/default/class_spec.rb +0 -0
- data/spec/lib/simp/ci/files/multiple_valid_jobs/spec/acceptance/suites/feature-1/feature-1_spec.rb +0 -0
- data/spec/lib/simp/ci/files/multiple_valid_jobs/spec/acceptance/suites/feature_2/feature_2_spec.rb +0 -0
- data/spec/lib/simp/ci/files/multiple_valid_jobs/spec/acceptance/suites/feature_2/nodesets/default.yml +0 -35
- data/spec/lib/simp/ci/files/multiple_valid_jobs/spec/acceptance/suites/feature_2/nodesets/oel.yml +0 -35
- data/spec/lib/simp/ci/files/no_acceptance_tests/spec/spec_helper.rb +0 -0
- data/spec/lib/simp/ci/files/no_gitlab_config_with_tests/spec/acceptance/nodesets/default.yml +0 -41
- data/spec/lib/simp/ci/files/no_gitlab_config_with_tests/spec/acceptance/nodesets/oel.yml +0 -41
- data/spec/lib/simp/ci/files/no_gitlab_config_with_tests/spec/acceptance/suites/default/class_spec.rb +0 -0
- data/spec/lib/simp/ci/files/no_gitlab_config_without_tests/spec/acceptance/nodesets/default.yml +0 -41
- data/spec/lib/simp/ci/files/no_gitlab_config_without_tests/spec/acceptance/nodesets/oel.yml +0 -41
- data/spec/lib/simp/ci/files/suite_skeleton_only/spec/acceptance/nodesets/centos.yml +0 -41
- data/spec/lib/simp/ci/files/suite_skeleton_only/spec/acceptance/nodesets/oel.yml +0 -41
- data/spec/lib/simp/ci/files/valid_job_global_nodeset/spec/acceptance/nodesets/default.yml +0 -41
- data/spec/lib/simp/ci/files/valid_job_global_nodeset/spec/acceptance/nodesets/oel.yml +0 -41
- data/spec/lib/simp/ci/files/valid_job_global_nodeset/spec/acceptance/suites/default/class_spec.rb +0 -0
- data/spec/lib/simp/ci/files/valid_job_nodeset_dir_link/spec/acceptance/nodesets/default.yml +0 -41
- data/spec/lib/simp/ci/files/valid_job_nodeset_dir_link/spec/acceptance/nodesets/oel.yml +0 -41
- data/spec/lib/simp/ci/files/valid_job_nodeset_dir_link/spec/acceptance/suites/default/class_spec.rb +0 -0
- data/spec/lib/simp/ci/files/valid_job_nodeset_link/spec/acceptance/suites/default/class_spec.rb +0 -0
- data/spec/lib/simp/ci/files/valid_job_nodeset_link/spec/acceptance/suites/default/nodesets/centos.yml +0 -41
- data/spec/lib/simp/ci/files/valid_job_nodeset_link/spec/acceptance/suites/default/nodesets/oel.yml +0 -41
- data/spec/lib/simp/ci/files/valid_job_suite_nodeset/spec/acceptance/suites/default/class_spec.rb +0 -0
- data/spec/lib/simp/ci/files/valid_job_suite_nodeset/spec/acceptance/suites/default/nodesets/default.yml +0 -41
- data/spec/lib/simp/ci/files/valid_job_suite_nodeset/spec/acceptance/suites/default/nodesets/oel.yml +0 -41
- data/spec/lib/simp/ci/gitlab_spec.rb +0 -245
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'English'
|
|
1
4
|
require 'bundler'
|
|
2
5
|
require 'simp/yum'
|
|
3
6
|
require 'simp/rake'
|
|
@@ -5,6 +8,7 @@ require 'simp/rake/build/constants'
|
|
|
5
8
|
|
|
6
9
|
module Simp; end
|
|
7
10
|
module Simp::Rake; end
|
|
11
|
+
|
|
8
12
|
module Simp::Rake::Build
|
|
9
13
|
class SIMPBuildException < StandardError
|
|
10
14
|
end
|
|
@@ -14,8 +18,8 @@ module Simp::Rake::Build
|
|
|
14
18
|
class Build < ::Rake::TaskLib
|
|
15
19
|
include Simp::Rake::Build::Constants
|
|
16
20
|
|
|
17
|
-
def initialize(
|
|
18
|
-
init_member_vars(
|
|
21
|
+
def initialize(base_dir)
|
|
22
|
+
init_member_vars(base_dir)
|
|
19
23
|
|
|
20
24
|
define_tasks
|
|
21
25
|
end
|
|
@@ -46,7 +50,7 @@ module Simp::Rake::Build
|
|
|
46
50
|
args.with_defaults(:verbose => 'false')
|
|
47
51
|
args.with_defaults(:method => 'tracking')
|
|
48
52
|
|
|
49
|
-
verbose = args[:verbose]
|
|
53
|
+
verbose = args[:verbose] != 'false'
|
|
50
54
|
|
|
51
55
|
load_puppetfile(args[:method])
|
|
52
56
|
|
|
@@ -57,14 +61,14 @@ module Simp::Rake::Build
|
|
|
57
61
|
Parallel.map(
|
|
58
62
|
module_paths,
|
|
59
63
|
:in_processes => 1,
|
|
60
|
-
:progress => t.name
|
|
64
|
+
:progress => t.name,
|
|
61
65
|
) do |mod|
|
|
62
|
-
|
|
63
66
|
status = true
|
|
64
67
|
|
|
65
|
-
|
|
68
|
+
raise("Could not find directory #{mod}") unless Dir.exist?(mod)
|
|
69
|
+
|
|
70
|
+
next unless File.exist?(File.join(mod, 'Gemfile'))
|
|
66
71
|
|
|
67
|
-
next unless File.exist?(File.join(mod,'Gemfile'))
|
|
68
72
|
puts "\n#{mod}\n" if verbose
|
|
69
73
|
Dir.chdir(mod) do
|
|
70
74
|
if File.exist?('Gemfile.lock')
|
|
@@ -78,8 +82,8 @@ module Simp::Rake::Build
|
|
|
78
82
|
# Bundler is activated.
|
|
79
83
|
clean_env_method = Bundler.respond_to?(:with_unbundled_env) ? :with_unbundled_env : :with_clean_env
|
|
80
84
|
::Bundler.send(clean_env_method) do
|
|
81
|
-
out =
|
|
82
|
-
status =
|
|
85
|
+
out = `bundle #{args[:action]} 2>&1`
|
|
86
|
+
status = $CHILD_STATUS.success?
|
|
83
87
|
puts out if verbose
|
|
84
88
|
failed_mod_lock.synchronize do
|
|
85
89
|
failed_mods << mod unless status
|
|
@@ -89,7 +93,7 @@ module Simp::Rake::Build
|
|
|
89
93
|
end
|
|
90
94
|
|
|
91
95
|
failed_mods.compact!
|
|
92
|
-
|
|
96
|
+
raise(%(The following modules failed bundle #{args[:action]}:\n * #{failed_mods.sort.join("\n *")})) unless failed_mods.empty?
|
|
93
97
|
end
|
|
94
98
|
|
|
95
99
|
namespace :yum do
|
|
@@ -98,16 +102,14 @@ module Simp::Rake::Build
|
|
|
98
102
|
# `$simp6_build_dir` is set by the build:auto task
|
|
99
103
|
@build_dir = $simp6_build_dir || @distro_build_dir
|
|
100
104
|
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
@build_dir = ENV['SIMP_BUILD_yum_dir']
|
|
104
|
-
end
|
|
105
|
+
if !@build_dir && ENV.fetch('SIMP_BUILD_yum_dir', nil) && File.exist?(File.join(ENV.fetch('SIMP_BUILD_yum_dir', nil), 'yum_data'))
|
|
106
|
+
@build_dir = ENV.fetch('SIMP_BUILD_yum_dir', nil)
|
|
105
107
|
end
|
|
106
108
|
|
|
107
109
|
raise('Error: For SIMP 6+ builds, you need to set SIMP_BUILD_yum_dir to the directory holding the "yum_data" directory that you wish to sync') unless @build_dir
|
|
108
110
|
end
|
|
109
111
|
|
|
110
|
-
@build_base_dir = File.join(@build_dir,'yum_data')
|
|
112
|
+
@build_base_dir = File.join(@build_dir, 'yum_data')
|
|
111
113
|
@build_arch = 'x86_64'
|
|
112
114
|
end
|
|
113
115
|
|
|
@@ -119,21 +121,21 @@ module Simp::Rake::Build
|
|
|
119
121
|
# Expects one argument which is the 'arguments' hash to one of the tasks.
|
|
120
122
|
def get_target_dir(args)
|
|
121
123
|
if $simp6
|
|
122
|
-
|
|
124
|
+
@build_base_dir
|
|
123
125
|
else
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
126
|
+
raise("Error: You must specify 'os'") unless args[:os]
|
|
127
|
+
raise("Error: You must specify 'os_version'") unless args[:os_version]
|
|
128
|
+
raise('Error: You must specify both major and minor version for the OS') unless %r{^.+\..+$}.match?(args[:os_version])
|
|
129
|
+
raise("Error: You must specify 'simp_version'") unless args[:simp_version]
|
|
130
|
+
raise("Error: You must specify 'arch'") unless args[:arch]
|
|
129
131
|
|
|
130
132
|
# Yes, this is a kluge but the amount of variable passing that would need
|
|
131
133
|
# to be done to support this is silly.
|
|
132
134
|
@build_arch = args[:arch]
|
|
133
135
|
|
|
134
|
-
|
|
136
|
+
File.join(
|
|
135
137
|
@build_base_dir,
|
|
136
|
-
"SIMP#{args[:simp_version]}_#{args[:os]}#{args[:os_version]}_#{args[:arch]}"
|
|
138
|
+
"SIMP#{args[:simp_version]}_#{args[:os]}#{args[:os_version]}_#{args[:arch]}",
|
|
137
139
|
)
|
|
138
140
|
end
|
|
139
141
|
end
|
|
@@ -143,92 +145,90 @@ module Simp::Rake::Build
|
|
|
143
145
|
puts("Looking up: #{rpm}")
|
|
144
146
|
yum_helper = Simp::YUM.new(yum_conf)
|
|
145
147
|
|
|
146
|
-
|
|
148
|
+
yum_helper.get_source(rpm, @build_arch)
|
|
147
149
|
end
|
|
148
150
|
|
|
149
151
|
# Snag an RPM via YUM.
|
|
150
152
|
# Returns where the tool got the file from.
|
|
151
153
|
#
|
|
152
154
|
# If passed a source, simply downloads the file into the packages directory
|
|
153
|
-
def download_rpm(rpm, yum_conf, source=nil,
|
|
155
|
+
def download_rpm(rpm, yum_conf, source = nil, _distro_dir = Dir.pwd)
|
|
154
156
|
yum_helper = Simp::YUM.new(yum_conf)
|
|
155
157
|
|
|
156
158
|
# We're doing this so that we can be 100% sure that we're pulling the RPM
|
|
157
159
|
# from where the last command indicated. YUM can choose multiple sources
|
|
158
160
|
# and we definitely want the one that we actually state!
|
|
159
|
-
source
|
|
161
|
+
source ||= yum_helper.get_source(rpm)
|
|
160
162
|
|
|
161
163
|
Dir.chdir('packages') do
|
|
162
164
|
unless File.exist?(rpm)
|
|
163
165
|
puts("Downloading: #{rpm}")
|
|
164
166
|
downloaded_rpm = yum_helper.download(source)
|
|
165
167
|
|
|
166
|
-
raise(SIMPBuildException,"#{rpm} could not be downloaded") unless downloaded_rpm
|
|
168
|
+
raise(SIMPBuildException, "#{rpm} could not be downloaded") unless downloaded_rpm
|
|
167
169
|
|
|
168
170
|
begin
|
|
169
171
|
validate_rpm(downloaded_rpm)
|
|
170
172
|
rescue SIMPBuildException
|
|
171
173
|
rm(rpm) if File.exist?(rpm)
|
|
172
|
-
raise(SIMPBuildException,"#{rpm} could not be downloaded")
|
|
174
|
+
raise(SIMPBuildException, "#{rpm} could not be downloaded")
|
|
173
175
|
end
|
|
174
176
|
end
|
|
175
177
|
end
|
|
176
178
|
|
|
177
|
-
|
|
179
|
+
source
|
|
178
180
|
end
|
|
179
181
|
|
|
180
182
|
# Check to see if an RPM is actually a valid RPM
|
|
181
183
|
# Optionally remove any invalid RPMS.
|
|
182
184
|
#
|
|
183
185
|
# Returns true if the rpm is valid raises a SIMPBuildException otherwise
|
|
184
|
-
def validate_rpm(rpm, clean=true)
|
|
186
|
+
def validate_rpm(rpm, clean = true)
|
|
185
187
|
# Check to see if what we got is actually valid
|
|
186
|
-
|
|
188
|
+
`rpm -K --nosignature "#{rpm}" 2>&1 > /dev/null`
|
|
187
189
|
|
|
188
|
-
unless
|
|
190
|
+
unless $CHILD_STATUS.success?
|
|
189
191
|
errmsg = "RPM '#{rpm}' is invalid"
|
|
190
192
|
|
|
191
193
|
if clean
|
|
192
194
|
errmsg += ', removing'
|
|
193
|
-
FileUtils.
|
|
195
|
+
FileUtils.rm_f(rpm)
|
|
194
196
|
end
|
|
195
197
|
|
|
196
|
-
raise(SIMPBuildException,errmsg)
|
|
198
|
+
raise(SIMPBuildException, errmsg)
|
|
197
199
|
end
|
|
198
200
|
|
|
199
201
|
true
|
|
200
202
|
end
|
|
201
203
|
|
|
202
|
-
def get_known_packages(target_dir=Dir.pwd)
|
|
204
|
+
def get_known_packages(target_dir = Dir.pwd)
|
|
203
205
|
known_package_hash = {}
|
|
204
206
|
|
|
205
207
|
Dir.chdir(target_dir) do
|
|
206
208
|
if File.exist?('packages.yaml')
|
|
207
209
|
# The empty YAML file returns 'false'
|
|
208
|
-
known_package_hash = YAML
|
|
210
|
+
known_package_hash = YAML.load_file('packages.yaml') || {}
|
|
209
211
|
end
|
|
210
212
|
end
|
|
211
213
|
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
new_package_hash = known_package_hash.dup
|
|
214
|
+
if !known_package_hash.empty? && !known_package_hash.first.last[:rpm_name]
|
|
215
|
+
# Convert from Legacy
|
|
216
|
+
# This is imperfect since we can't accurately determine the RPM sort
|
|
217
|
+
# name but the code should straighten everything out since we rewrite
|
|
218
|
+
# the entire file based on what has been downloaded.
|
|
219
|
+
new_package_hash = known_package_hash.dup
|
|
219
220
|
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
}
|
|
223
|
-
|
|
224
|
-
known_package_hash = new_package_hash
|
|
221
|
+
known_package_hash.each_key do |k|
|
|
222
|
+
new_package_hash[k][:rpm_name] = k
|
|
225
223
|
end
|
|
224
|
+
|
|
225
|
+
known_package_hash = new_package_hash
|
|
226
226
|
end
|
|
227
227
|
|
|
228
|
-
|
|
228
|
+
known_package_hash
|
|
229
229
|
end
|
|
230
230
|
|
|
231
|
-
def get_downloaded_packages(target_dir=Dir.pwd)
|
|
231
|
+
def get_downloaded_packages(target_dir = Dir.pwd)
|
|
232
232
|
downloaded_packages = {}
|
|
233
233
|
|
|
234
234
|
Dir.chdir(target_dir) do
|
|
@@ -237,16 +237,16 @@ module Simp::Rake::Build
|
|
|
237
237
|
end
|
|
238
238
|
end
|
|
239
239
|
|
|
240
|
-
|
|
240
|
+
downloaded_packages
|
|
241
241
|
end
|
|
242
242
|
|
|
243
243
|
# Update the packages.yaml and packages/ directories
|
|
244
244
|
# * target_dir => The actual distribution directory where packages.yaml and
|
|
245
245
|
# packages/ reside.
|
|
246
|
-
def update_packages(target_dir,
|
|
246
|
+
def update_packages(target_dir, _bootstrap = false)
|
|
247
247
|
# This really should never happen....
|
|
248
248
|
unless File.directory?(target_dir)
|
|
249
|
-
|
|
249
|
+
raise <<-EOM
|
|
250
250
|
Error: Could not update packages.
|
|
251
251
|
|
|
252
252
|
Target directory '#{target_dir}' does not exist!
|
|
@@ -255,7 +255,7 @@ module Simp::Rake::Build
|
|
|
255
255
|
|
|
256
256
|
Dir.chdir(target_dir) do
|
|
257
257
|
unless File.exist?('packages.yaml') || File.directory?('packages')
|
|
258
|
-
|
|
258
|
+
raise <<-EOM
|
|
259
259
|
Error: Either 'packages.yaml' or the 'packages/' directory need to exist under '#{target_dir}
|
|
260
260
|
EOM
|
|
261
261
|
end
|
|
@@ -269,16 +269,16 @@ module Simp::Rake::Build
|
|
|
269
269
|
# This holds packages for which we could not find a source.
|
|
270
270
|
unknown_package_hash = {}
|
|
271
271
|
|
|
272
|
-
known_packages = known_package_hash.keys.
|
|
273
|
-
|
|
274
|
-
|
|
272
|
+
known_packages = known_package_hash.keys.filter_map do |pkg|
|
|
273
|
+
known_package_hash[pkg][:rpm_name]
|
|
274
|
+
end
|
|
275
275
|
|
|
276
|
-
downloaded_packages = downloaded_package_hash.keys.
|
|
277
|
-
|
|
278
|
-
|
|
276
|
+
downloaded_packages = downloaded_package_hash.keys.filter_map do |pkg|
|
|
277
|
+
downloaded_package_hash[pkg][:rpm_name]
|
|
278
|
+
end
|
|
279
279
|
|
|
280
280
|
if known_packages.empty? && downloaded_packages.empty? && Dir.glob('reposync/**/repomd.xml').empty?
|
|
281
|
-
|
|
281
|
+
raise <<-EOM
|
|
282
282
|
Error: Could not find anything to do!
|
|
283
283
|
|
|
284
284
|
In #{target_dir}:
|
|
@@ -303,23 +303,19 @@ module Simp::Rake::Build
|
|
|
303
303
|
(known_packages - downloaded_packages).sort.each do |package_to_download|
|
|
304
304
|
begin
|
|
305
305
|
# Do we have a valid external source?
|
|
306
|
-
package_source = known_package_hash.find{|
|
|
307
|
-
if package_source && (package_source =~ %r
|
|
306
|
+
package_source = known_package_hash.find { |_k, h| h[:rpm_name] == package_to_download }.last[:source]
|
|
307
|
+
if package_source && (package_source =~ %r{^[a-z]+://})
|
|
308
308
|
begin
|
|
309
309
|
download_rpm(package_to_download, yum_conf, package_source)
|
|
310
|
-
rescue => e
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
end
|
|
320
|
-
else
|
|
321
|
-
raise(e)
|
|
322
|
-
end
|
|
310
|
+
rescue StandardError => e
|
|
311
|
+
raise(e) unless ['yes', 'true'].include?(ENV['SIMP_BUILD_update_packages'])
|
|
312
|
+
|
|
313
|
+
pkg_shortname = known_package_hash.find { |_k, v| v[:rpm_name] == package_to_download }
|
|
314
|
+
|
|
315
|
+
raise(e) unless pkg_shortname
|
|
316
|
+
|
|
317
|
+
pkg_shortname = pkg_shortname.first
|
|
318
|
+
download_rpm(pkg_shortname, yum_conf)
|
|
323
319
|
end
|
|
324
320
|
else
|
|
325
321
|
# If you get here, then you'll need to have an internal mirror of the
|
|
@@ -328,8 +324,8 @@ module Simp::Rake::Build
|
|
|
328
324
|
download_rpm(package_to_download, yum_conf)
|
|
329
325
|
end
|
|
330
326
|
rescue SIMPBuildException => e
|
|
331
|
-
base_package_name = known_package_hash.find{|
|
|
332
|
-
updated_package = update_rpm(base_package_name,yum_conf,true)
|
|
327
|
+
base_package_name = known_package_hash.find { |_k, h| h[:rpm_name] == package_to_download }.first
|
|
328
|
+
updated_package = update_rpm(base_package_name, yum_conf, true)
|
|
333
329
|
|
|
334
330
|
if updated_package
|
|
335
331
|
updated_package_rpm_name = updated_package[base_package_name][:rpm_name]
|
|
@@ -351,34 +347,34 @@ module Simp::Rake::Build
|
|
|
351
347
|
# Now, let's update the known_packages data structure for anything that's
|
|
352
348
|
# new!
|
|
353
349
|
(downloaded_packages - known_packages).each do |package|
|
|
354
|
-
downloaded_package_hash.
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
break
|
|
350
|
+
downloaded_package_hash.each_key do |key|
|
|
351
|
+
next unless downloaded_package_hash[key][:rpm_name] == package
|
|
352
|
+
|
|
353
|
+
begin
|
|
354
|
+
rpm_source = yum_helper.get_source(package)
|
|
355
|
+
# rpm_source = get_rpm_source(package,yum_conf)
|
|
356
|
+
known_package_hash[key] = downloaded_package_hash[key]
|
|
357
|
+
known_package_hash[key][:source] = rpm_source
|
|
358
|
+
rescue SIMPBuildException => e
|
|
359
|
+
unknown_package_hash[key] = {} unless unknown_package_hash[key]
|
|
360
|
+
unknown_package_hash[key][:rpm_name] = package
|
|
361
|
+
failed_updates[package] = e
|
|
367
362
|
end
|
|
363
|
+
break
|
|
368
364
|
end
|
|
369
365
|
end
|
|
370
366
|
|
|
371
367
|
# OK! In theory, we're done with all of this nonsense! Let's update the
|
|
372
368
|
# YAML file.
|
|
373
|
-
File.open('packages.yaml','w') do |fh|
|
|
369
|
+
File.open('packages.yaml', 'w') do |fh|
|
|
374
370
|
sorted_packages = {}
|
|
375
371
|
known_package_hash.keys.sort.each do |k|
|
|
376
372
|
# Make sure we don't capture any legacy malformed info
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
373
|
+
next unless known_package_hash[k][:rpm_name][-4..] == '.rpm'
|
|
374
|
+
|
|
375
|
+
sorted_packages[k] ||= {}
|
|
376
|
+
known_package_hash[k].keys.sort.each do |subk|
|
|
377
|
+
sorted_packages[k][subk] = known_package_hash[k][subk]
|
|
382
378
|
end
|
|
383
379
|
end
|
|
384
380
|
|
|
@@ -389,7 +385,7 @@ module Simp::Rake::Build
|
|
|
389
385
|
rm('unknown_packages.yaml') if File.exist?('unknown_packages.yaml')
|
|
390
386
|
else
|
|
391
387
|
# Next, let's freshen up the unknown packages reference file
|
|
392
|
-
File.open('unknown_packages.yaml','w') do |fh|
|
|
388
|
+
File.open('unknown_packages.yaml', 'w') do |fh|
|
|
393
389
|
sorted_packages = {}
|
|
394
390
|
unknown_package_hash.keys.sort.each do |k|
|
|
395
391
|
sorted_packages[k] ||= {}
|
|
@@ -404,10 +400,10 @@ module Simp::Rake::Build
|
|
|
404
400
|
|
|
405
401
|
# Now, let's tell the user what went wrong.
|
|
406
402
|
unless failed_updates.empty?
|
|
407
|
-
|
|
403
|
+
warn('Warning: There were errors updating some files:')
|
|
408
404
|
|
|
409
405
|
failed_updates.keys.sort.each do |k|
|
|
410
|
-
|
|
406
|
+
warn(" * #{k} => #{failed_updates[k]}")
|
|
411
407
|
end
|
|
412
408
|
|
|
413
409
|
raise('Could not update all packages')
|
|
@@ -427,7 +423,7 @@ module Simp::Rake::Build
|
|
|
427
423
|
#
|
|
428
424
|
# Returns a hash of the new package information if found.
|
|
429
425
|
#
|
|
430
|
-
def update_rpm(pkg,yum_conf,verbose=false)
|
|
426
|
+
def update_rpm(pkg, yum_conf, verbose = false)
|
|
431
427
|
updated_pkg = nil
|
|
432
428
|
|
|
433
429
|
begin
|
|
@@ -443,14 +439,13 @@ module Simp::Rake::Build
|
|
|
443
439
|
# Don't obsolete yourself!
|
|
444
440
|
next unless new_pkg_info.basename == old_pkg_info.basename
|
|
445
441
|
|
|
442
|
+
next unless new_pkg_info.newer?(old_pkg_info.rpm_name)
|
|
446
443
|
|
|
447
|
-
|
|
448
|
-
mkdir('obsolete') unless File.directory?('obsolete')
|
|
444
|
+
mkdir('obsolete') unless File.directory?('obsolete')
|
|
449
445
|
|
|
450
|
-
|
|
446
|
+
puts("Retiring #{old_pkg}") if verbose
|
|
451
447
|
|
|
452
|
-
|
|
453
|
-
end
|
|
448
|
+
mv(old_pkg, 'obsolete')
|
|
454
449
|
end
|
|
455
450
|
|
|
456
451
|
updated_pkg = {
|
|
@@ -490,27 +485,27 @@ module Simp::Rake::Build
|
|
|
490
485
|
|
|
491
486
|
Will not overwrite existing directories or package.yaml files
|
|
492
487
|
EOM
|
|
493
|
-
task :scaffold,[:os
|
|
488
|
+
task :scaffold, [:os, :os_version, :simp_version, :arch] do |_t, args|
|
|
494
489
|
# @simp_version is set in the main Rakefile
|
|
495
490
|
args.with_defaults(:simp_version => @simp_version.split('-').first)
|
|
496
491
|
args.with_defaults(:arch => @build_arch)
|
|
497
492
|
|
|
498
493
|
major_os_ver = args[:os_version].split('.').first
|
|
499
494
|
build_dir = distro_build_dir(
|
|
500
|
-
File.join(@base_dir,'build'), args[:os], major_os_ver, args[:arch]
|
|
495
|
+
File.join(@base_dir, 'build'), args[:os], major_os_ver, args[:arch]
|
|
501
496
|
)
|
|
502
|
-
build_dir = ENV
|
|
503
|
-
ENV['SIMP_BUILD_yum_dir'] ||= build_dir
|
|
497
|
+
build_dir = ENV.fetch('SIMP_BUILD_yum_dir', nil) if File.directory?(ENV['SIMP_BUILD_yum_dir'].to_s)
|
|
498
|
+
ENV['SIMP_BUILD_yum_dir'] ||= build_dir # <-- for hacky :prep task
|
|
504
499
|
|
|
505
|
-
target_dir = File.join(build_dir,'yum_data')
|
|
500
|
+
target_dir = File.join(build_dir, 'yum_data')
|
|
506
501
|
|
|
507
502
|
# Create directories
|
|
508
503
|
my_repos = $simp6 ? '../my_repos' : 'my_repos'
|
|
509
504
|
[
|
|
510
505
|
target_dir,
|
|
511
|
-
File.join(target_dir,'repos'),
|
|
512
|
-
File.join(target_dir,'packages'),
|
|
513
|
-
File.expand_path(my_repos,target_dir)
|
|
506
|
+
File.join(target_dir, 'repos'),
|
|
507
|
+
File.join(target_dir, 'packages'),
|
|
508
|
+
File.expand_path(my_repos, target_dir),
|
|
514
509
|
].each { |dir| mkdir_p(dir, verbose: false) }
|
|
515
510
|
|
|
516
511
|
# Create example packages.yaml
|
|
@@ -521,7 +516,7 @@ module Simp::Rake::Build
|
|
|
521
516
|
yum_url = "https://yum.server/#{args[:os]}/#{major_os_ver}/#{args[:arch]}"
|
|
522
517
|
pkg_url = "#{yum_url}/#{pkg_file}"
|
|
523
518
|
yaml = { pkg => { rpm_name: pkg_file, source: pkg_url } }.to_yaml
|
|
524
|
-
File.open(packages_yaml_path,'w'){|f| f.puts yaml.gsub(
|
|
519
|
+
File.open(packages_yaml_path, 'w') { |f| f.puts yaml.gsub(%r{^}, '# ') }
|
|
525
520
|
puts "Created #{target_dir}"
|
|
526
521
|
puts "Created example file at #{packages_yaml_path}"
|
|
527
522
|
end
|
|
@@ -542,7 +537,7 @@ module Simp::Rake::Build
|
|
|
542
537
|
|
|
543
538
|
* :arch - The architecture that you support. Default: x86_64
|
|
544
539
|
EOM
|
|
545
|
-
task :sync,[:os
|
|
540
|
+
task :sync, [:os, :os_version, :simp_version, :arch] => [:scaffold, :prep] do |_t, args|
|
|
546
541
|
# @simp_version is set in the main Rakefile
|
|
547
542
|
args.with_defaults(:simp_version => @simp_version.split('-').first)
|
|
548
543
|
args.with_defaults(:arch => @build_arch)
|
|
@@ -567,7 +562,7 @@ module Simp::Rake::Build
|
|
|
567
562
|
|
|
568
563
|
* :arch - The architecture that you support. Default: x86_64
|
|
569
564
|
EOM
|
|
570
|
-
task :diff,[:os
|
|
565
|
+
task :diff, [:os, :os_version, :simp_version, :arch] => [:scaffold, :prep] do |_t, args|
|
|
571
566
|
args.with_defaults(:simp_version => @simp_version.split('-').first)
|
|
572
567
|
args.with_defaults(:arch => @build_arch)
|
|
573
568
|
|
|
@@ -585,7 +580,7 @@ module Simp::Rake::Build
|
|
|
585
580
|
unless known_not_downloaded.empty?
|
|
586
581
|
differences_found = true
|
|
587
582
|
|
|
588
|
-
puts(
|
|
583
|
+
puts('=== Packages Not Downloaded ===')
|
|
589
584
|
known_not_downloaded.each do |package|
|
|
590
585
|
puts " - #{package}"
|
|
591
586
|
end
|
|
@@ -595,7 +590,7 @@ module Simp::Rake::Build
|
|
|
595
590
|
unless downloaded_not_known.empty?
|
|
596
591
|
differences_found = true
|
|
597
592
|
|
|
598
|
-
puts
|
|
593
|
+
puts('=== Pacakges Downloaded not Recorded ===')
|
|
599
594
|
downloaded_not_known.each do |package|
|
|
600
595
|
puts " ~ #{downloaded_package_hash[package][:rpm_name]}"
|
|
601
596
|
end
|
|
@@ -604,7 +599,7 @@ module Simp::Rake::Build
|
|
|
604
599
|
if differences_found
|
|
605
600
|
exit 1
|
|
606
601
|
else
|
|
607
|
-
puts(
|
|
602
|
+
puts('=== No Differences Found ===')
|
|
608
603
|
exit 0
|
|
609
604
|
end
|
|
610
605
|
end
|
|
@@ -633,18 +628,18 @@ module Simp::Rake::Build
|
|
|
633
628
|
|
|
634
629
|
* :arch - The architecture that you support. Default: x86_64
|
|
635
630
|
EOM
|
|
636
|
-
task :fetch,[:pkg
|
|
631
|
+
task :fetch, [:pkg, :os, :os_version, :simp_version, :arch] => [:scaffold, :prep] do |_t, args|
|
|
637
632
|
args.with_defaults(:simp_version => @simp_version.split('-').first)
|
|
638
633
|
args.with_defaults(:arch => @build_arch)
|
|
639
634
|
|
|
640
|
-
|
|
635
|
+
raise("Error: You must specify 'pkg'") unless args[:pkg]
|
|
641
636
|
|
|
642
637
|
pkgs = []
|
|
643
638
|
# Handle the output of build:yum_diff
|
|
644
639
|
if File.readable?(args[:pkg])
|
|
645
640
|
File.read(args[:pkg]).each_line do |line|
|
|
646
|
-
if line =~
|
|
647
|
-
pkgs <<
|
|
641
|
+
if line =~ %r{\s+~\s+(.*)}
|
|
642
|
+
pkgs << ::Regexp.last_match(1).split(%r{-\d+}).first
|
|
648
643
|
end
|
|
649
644
|
end
|
|
650
645
|
else
|
|
@@ -1,50 +1,50 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require 'simp/rake/build/constants'
|
|
2
4
|
|
|
3
5
|
module Simp; end
|
|
4
6
|
module Simp::Rake; end
|
|
5
|
-
module Simp::Rake::Build
|
|
6
7
|
|
|
7
|
-
|
|
8
|
-
|
|
8
|
+
class Simp::Rake::Build::Clean < Rake::TaskLib
|
|
9
|
+
include Simp::Rake::Build::Constants
|
|
10
|
+
|
|
11
|
+
def initialize(base_dir)
|
|
12
|
+
init_member_vars(base_dir)
|
|
13
|
+
define_tasks
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def define_tasks
|
|
17
|
+
::CLEAN.include(
|
|
18
|
+
"#{@dist_dir}/*",
|
|
19
|
+
'.discinfo',
|
|
20
|
+
@dvd_dir,
|
|
21
|
+
"#{@build_dir}/SIMP",
|
|
22
|
+
"#{@base_dir}/SIMP_ISO*",
|
|
23
|
+
)
|
|
24
|
+
|
|
25
|
+
if $simp6_build_dirs
|
|
26
|
+
::CLEAN.include($simp6_clean_dirs)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
::CLOBBER.include(
|
|
30
|
+
@dist_dir,
|
|
31
|
+
"#{@build_dir}/build_keys/dev",
|
|
32
|
+
"#{@build_dir}/yum_data/*/packages",
|
|
33
|
+
)
|
|
34
|
+
|
|
35
|
+
# This just abstracts the clean/clobber space in such a way that clobber can actally be used!
|
|
36
|
+
def advanced_clean(type, _args)
|
|
37
|
+
raise "Type must be one of 'clean' or 'clobber'" unless ['clean', 'clobber'].include?(type)
|
|
38
|
+
|
|
39
|
+
Rake::Task["pkg:#{type}"].invoke
|
|
40
|
+
end
|
|
9
41
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
define_tasks
|
|
42
|
+
task :clobber do |_t, args|
|
|
43
|
+
advanced_clean('clobber', args)
|
|
13
44
|
end
|
|
14
45
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
"#{@dist_dir}/*",
|
|
18
|
-
".discinfo",
|
|
19
|
-
@dvd_dir,
|
|
20
|
-
"#{@build_dir}/SIMP",
|
|
21
|
-
"#{@base_dir}/SIMP_ISO*"
|
|
22
|
-
)
|
|
23
|
-
|
|
24
|
-
if $simp6_build_dirs
|
|
25
|
-
::CLEAN.include($simp6_clean_dirs)
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
::CLOBBER.include(
|
|
29
|
-
@dist_dir,
|
|
30
|
-
"#{@build_dir}/build_keys/dev",
|
|
31
|
-
"#{@build_dir}/yum_data/*/packages"
|
|
32
|
-
)
|
|
33
|
-
|
|
34
|
-
# This just abstracts the clean/clobber space in such a way that clobber can actally be used!
|
|
35
|
-
def advanced_clean(type,args)
|
|
36
|
-
fail "Type must be one of 'clean' or 'clobber'" unless ['clean','clobber'].include?(type)
|
|
37
|
-
|
|
38
|
-
Rake::Task["pkg:#{type}"].invoke
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
task :clobber do |t,args|
|
|
42
|
-
advanced_clean('clobber',args)
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
task :clean do |t,args|
|
|
46
|
-
advanced_clean('clean',args)
|
|
47
|
-
end
|
|
46
|
+
task :clean do |_t, args|
|
|
47
|
+
advanced_clean('clean', args)
|
|
48
48
|
end
|
|
49
49
|
end
|
|
50
50
|
end
|