simp-rake-helpers 4.0.1 → 4.1.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/.travis.yml +16 -11
- data/CHANGELOG.md +8 -0
- data/lib/simp/rake/build/pkg.rb +13 -2
- data/lib/simp/rake/build/rpmdeps.rb +162 -0
- data/lib/simp/rake/fixtures.rb +1 -1
- data/lib/simp/rake/helpers/assets/rpm_spec/simp4.spec +9 -8
- data/lib/simp/rake/helpers/assets/rpm_spec/simp5.spec +9 -8
- data/lib/simp/rake/helpers/assets/rpm_spec/simp6.spec +357 -0
- data/lib/simp/rake/helpers/assets/rpm_spec/simpdefault.spec +11 -10
- data/lib/simp/rake/helpers/version.rb +1 -1
- data/lib/simp/rake/pkg.rb +3 -1
- data/spec/acceptance/pkg_rpm_spec.rb +7 -7
- data/spec/lib/simp/rake/build/files/changed_name_mod/metadata.json +65 -0
- data/spec/lib/simp/rake/build/files/dependencies.yaml +36 -0
- data/spec/lib/simp/rake/build/files/malformed_dep_meta_mod/metadata.json +45 -0
- data/spec/lib/simp/rake/build/files/managed_mod/metadata.json +57 -0
- data/spec/lib/simp/rake/build/files/obsoletes_too_new_mod/metadata.json +49 -0
- data/spec/lib/simp/rake/build/files/unknown_dep_mod/metadata.json +45 -0
- data/spec/lib/simp/rake/build/files/unmanaged_mod/build/rpm_metadata/requires +9 -0
- data/spec/lib/simp/rake/build/files/unmanaged_mod/metadata.json +50 -0
- data/spec/lib/simp/rake/build/rpmdeps_spec.rb +179 -0
- metadata +12 -2
- data/lib/simp/rake/helpers/assets/rpm_spec/simp6.spec +0 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6113186e329690af05d0b8ab80c1f9bcd49dce2d
|
4
|
+
data.tar.gz: 5058893b87cabbc46c2644d82a70d1f2f1aecd8c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ef33179fc629100aab0347fba56ade32c1546c9b5b259daaaf726cd061b8fd9fab14dfc06f7584c7a4f1d5e53359a6ba1873805b5829040d0ee8c6d4701ea978
|
7
|
+
data.tar.gz: a697cc85f44d2150ec67e47b13971cd2d06440c9e3a1b911446f9077a3b8707f66ec5989cf4448aa1910ac2712b2f06bfeceefc2f104f8dfca005870de394ae2
|
data/.travis.yml
CHANGED
@@ -5,8 +5,6 @@ before_install:
|
|
5
5
|
- sudo apt-get update -qq
|
6
6
|
- sudo apt-get install -y rpm
|
7
7
|
- rm Gemfile.lock || true
|
8
|
-
- rvm @global do gem uninstall bundler -a -x
|
9
|
-
- rvm @global do gem install bundler -v '~> 1.14.0'
|
10
8
|
bundler_args: "--without development --path .vendor"
|
11
9
|
notifications:
|
12
10
|
email: false
|
@@ -26,12 +24,19 @@ before_deploy:
|
|
26
24
|
- "export GEM_VERSION=`ruby -r ./lib/simp/rake/helpers/version.rb -e 'puts Simp::Rake::Helpers::VERSION'`"
|
27
25
|
- '[[ $TRAVIS_TAG =~ ^${GEM_VERSION}$ ]]'
|
28
26
|
deploy:
|
29
|
-
provider: rubygems
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
27
|
+
- provider: rubygems
|
28
|
+
gemspec: simp-rake-helpers.gemspec
|
29
|
+
gem: simp-rake-helpers
|
30
|
+
api_key:
|
31
|
+
secure: "aoPmOZ3WgjNJ56UXmamKxaRv37iUaxKekAeS8n2fPk78X/nU2qGjdDHFH+SBrfl33PyzsGnS3WAANMKaIkAgssvKoaII/sAC+Sl6q1eyVUprZqloXrG+cHlnHY4GnziWEH3JrkHDChW0xoJq7hhpj7qTRKrEIp6nA25MjozjveoL+HH4kKy/ACJhiEdsYTFaDLYYFY50gGUL9KjIkwN6g9d+dIzG9JqcYoDbneQlO6/23yr4GiAHQ8HM1j5tUoBqJad+CWjWhSY7pbfYBy2ziwVhFy1qoOS4/bhlasRCsLTtz0AjjR0YWOhJap1vJqYhrSxtvhmVuzScmDkueAem/PfWS3XCQvbmjdmFMzPOxo0aRRJMlaeVWRsZ/aVFC7ngpRzokq1duZEKI47xZC27vJSOp3RZMmYl/7GsykoYkqHHsTvzSALEQiVtQq8sIOtN0JOTFI8H4LSMirXuqGq+SgCJiAQ3mQzSgh50TXiZaA2UPPcQaw4AzY36BRKs1cgw3cEWuL38O2cWUTAzEE4SUh499wrU5x+N0PsYL0AvMFONsRaq5epOYrlIL9UPSL/qZRLmzpcEWZRfOX4Ni5N6Aa9ZR8juenR6UmE79S2dupBxQeinkdfXuWznUZH7BcnUDoz8rErABpJGHNVY60dUO/s055WCr7Y95Gi+H75X9/I="
|
32
|
+
on:
|
33
|
+
tags: true
|
34
|
+
rvm: 2.1.9
|
35
|
+
condition: '($SKIP_PUBLISH != true)'
|
36
|
+
- provider: releases
|
37
|
+
api_key:
|
38
|
+
secure: "QKvAL4yAk8u9prJT6dFzKvszJfoo5/R9jIJ/WEUwdH17jij9Q/XhNrUzJZnrdVtqq4yCK6UqGqkRMMn2YLOKthoJycLEXzH+ZeCxBwzyN6uQkLmK5Mx43H+NNCsRkYTmcOdi4wJraWaWVq7XBxz6XdNRUkV99WyIh93wVnTwZuJxvF9koDFq+lRR4qRPh5Xn8HjKEZNPY7QHaecqsyWjgdEILWaQk/32IU20dLCT7U3jDdSuk92p24gWlkvTJ/gP+IYKWEPhgMMpx+WAtGGC+djMyZUrkaKEa/ennkOcFgqJ6UtDEInEtTBFWScGL70dwHORbEVExp9AKcLP3TmMyQ/36ybu7yrgcp6L995tM4Huez3GBM6NJ8xl/hYG3D1QwwoXGnWfUjQW2we7h8gcvl2yUSx59pb2V5QW3nCbD8rAiF/kpAcgwWyBT3iLpMer2j0Ux05NCBGqsltl9J944M+pLtO+YKldUw7uGDWMQQzq8/2m5+MoE4fvTgnaJ0rv0eRLWfNH2RQ565mE95nyJC/wXz/XB2v/KKHrf8FQZRIavH4Nuo4E2+tU8u2APU/n+gP8iQrtd86Nlo5RrBTu+NoDPDrM5OBnVYTT/AUAEUggXTPgZsqwZrSDSBEt0VbExnwQ5QMGIB9ZX+ZunrEZ6NeH8hV5hm67WYZ+qRFOPvI="
|
39
|
+
on:
|
40
|
+
tags: true
|
41
|
+
rvm: 2.1.9
|
42
|
+
condition: '($SKIP_PUBLISH != true)'
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,11 @@
|
|
1
|
+
### 4.1.0 / 2017-08-02
|
2
|
+
* Added the ability to read from `simp-core/build/rpm/dependencies.yaml` in a
|
3
|
+
checked out repo to add the necessary Obsoletes and Requires statements for
|
4
|
+
external RPMs
|
5
|
+
* Changed the 'YEAR' part of the RPM release to reflect the current year
|
6
|
+
* Ensure that the 'spec/fixtures/modules' directory is no longer added to the
|
7
|
+
RPMs
|
8
|
+
|
1
9
|
### 4.0.1 / 2017-08-02
|
2
10
|
* Reverted the bundler pinning since it was causing too many issues on CI
|
3
11
|
systems
|
data/lib/simp/rake/build/pkg.rb
CHANGED
@@ -2,6 +2,7 @@
|
|
2
2
|
|
3
3
|
require 'simp/rake/pkg'
|
4
4
|
require 'simp/rake/build/constants'
|
5
|
+
require 'simp/rake/build/rpmdeps'
|
5
6
|
|
6
7
|
module Simp; end
|
7
8
|
module Simp::Rake; end
|
@@ -740,8 +741,12 @@ protect=1
|
|
740
741
|
validate_in_mock_group?
|
741
742
|
_verbose = ENV.fetch('SIMP_PKG_verbose','no') == 'yes'
|
742
743
|
|
743
|
-
|
744
|
-
|
744
|
+
rpm_dependency_file = File.join(@base_dir, 'build', 'rpm',
|
745
|
+
'dependencies.yaml')
|
746
|
+
|
747
|
+
if File.exist?(rpm_dependency_file)
|
748
|
+
rpm_dependency_metadata = YAML.load(File.read(rpm_dependency_file))
|
749
|
+
end
|
745
750
|
|
746
751
|
metadata = Parallel.map(
|
747
752
|
# Allow for shell globs
|
@@ -763,6 +768,12 @@ protect=1
|
|
763
768
|
|
764
769
|
# We're building a module, override anything down there
|
765
770
|
if File.exist?('metadata.json')
|
771
|
+
|
772
|
+
# Generate RPM dependency/obsoletes information from the
|
773
|
+
# dependencies.yaml and the module's metadata.json
|
774
|
+
Simp::Rake::Build::RpmDeps::generate_rpm_requires_file(dir,
|
775
|
+
rpm_dependency_metadata)
|
776
|
+
|
766
777
|
unique_namespace = (0...24).map{ (65 + rand(26)).chr }.join.downcase
|
767
778
|
|
768
779
|
Simp::Rake::Pkg.new(Dir.pwd, nil, unique_namespace, @simp_version)
|
@@ -0,0 +1,162 @@
|
|
1
|
+
class SIMPRpmDepException < StandardError; end
|
2
|
+
class SIMPRpmDepVersionException < StandardError; end
|
3
|
+
|
4
|
+
module Simp; end
|
5
|
+
module Simp::Rake; end
|
6
|
+
module Simp::Rake::Build; end
|
7
|
+
module Simp::Rake::Build::RpmDeps
|
8
|
+
|
9
|
+
# returns array of RPM spec file 'Requires' lines derived
|
10
|
+
# from a metadata.json dependency version specification.
|
11
|
+
def self.get_version_requires(pkg, dep_version)
|
12
|
+
requires = []
|
13
|
+
if dep_version =~ /^\s*(\d+\.\d+\.\d+)\s*$/
|
14
|
+
requires << "Requires: #{pkg} = #{$1}"
|
15
|
+
else
|
16
|
+
if dep_version.include?('x')
|
17
|
+
dep_parts = dep_version.split('.')
|
18
|
+
|
19
|
+
if dep_parts.count == 3
|
20
|
+
dep_version = ">= #{dep_parts[0]}.#{dep_parts[1]}.0 < #{dep_parts[0].to_i + 1}.0.0"
|
21
|
+
else
|
22
|
+
dep_version = ">= #{dep_parts[0]}.0.0 < #{dep_parts[0].to_i + 1}.0.0"
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
# metadata.json is a LOT more forgiving than the RPM spec file
|
27
|
+
if dep_version =~ /^\s*(?:(?:([<>]=?)\s*(\d+\.\d+\.\d+))\s*(?:(<)\s*(\d+\.\d+\.\d+))?)\s*$/
|
28
|
+
requires << "Requires: #{pkg} #{$1} #{$2}"
|
29
|
+
requires << "Requires: #{pkg} #{$3} #{$4}" if $3
|
30
|
+
else
|
31
|
+
raise SIMPRpmDepVersionException.new
|
32
|
+
end
|
33
|
+
end
|
34
|
+
requires
|
35
|
+
end
|
36
|
+
|
37
|
+
# Generate 'Obsoletes' and 'Requires' lines, from a combination of
|
38
|
+
# the module_dep_info and module_metadata. Only dependencies listed
|
39
|
+
# in the module_dep_info hash will be included in the output. The
|
40
|
+
# version requirements for each dependency will be pulled from
|
41
|
+
# module_metadata.
|
42
|
+
#
|
43
|
+
# returns array of strings, each of which is an 'Obsoletes' or
|
44
|
+
# 'Requires' line for use in an RPM spec file
|
45
|
+
def self.generate_custom_rpm_requires(module_dep_info, module_metadata)
|
46
|
+
rpm_metadata_content = []
|
47
|
+
|
48
|
+
if module_dep_info[:obsoletes]
|
49
|
+
module_dep_info[:obsoletes].each_pair do |pkg, version|
|
50
|
+
module_version = module_metadata['version']
|
51
|
+
|
52
|
+
# We don't want to add this if we're building an older
|
53
|
+
# version or the RPM will be malformed
|
54
|
+
if Gem::Version.new(module_version) >
|
55
|
+
Gem::Version.new(version.split('-').first)
|
56
|
+
|
57
|
+
rpm_metadata_content << "Obsoletes: #{pkg} > #{version}"
|
58
|
+
else
|
59
|
+
puts "Ignoring 'obsoletes' for #{pkg}: module version" +
|
60
|
+
" #{module_version} from metadata.json is not >" +
|
61
|
+
" obsolete version #{version}"
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
module_dep_info[:requires].each do |pkg|
|
67
|
+
pkg_parts = pkg.split(%r(-|/))[-2..-1]
|
68
|
+
|
69
|
+
# Need to cover all base cases
|
70
|
+
short_names = [pkg_parts.join('/'), pkg_parts.join('-')]
|
71
|
+
|
72
|
+
dep_info = module_metadata['dependencies'].select{ |dep|
|
73
|
+
short_names.include?(dep['name'])
|
74
|
+
}
|
75
|
+
|
76
|
+
if dep_info.empty?
|
77
|
+
err_msg = "Could not find #{short_names.first} dependency"
|
78
|
+
raise SIMPRpmDepException.new(err_msg)
|
79
|
+
else
|
80
|
+
dep_version = dep_info.first['version_requirement']
|
81
|
+
end
|
82
|
+
|
83
|
+
begin
|
84
|
+
rpm_metadata_content << get_version_requires(pkg, dep_version)
|
85
|
+
rescue SIMPRpmDepVersionException => e
|
86
|
+
err_msg = "Unable to parse #{short_names.first} dependency" +
|
87
|
+
" version '#{dep_version}'"
|
88
|
+
raise SIMPRpmDepException.new(err_msg)
|
89
|
+
end
|
90
|
+
end
|
91
|
+
rpm_metadata_content.flatten
|
92
|
+
end
|
93
|
+
|
94
|
+
# Generate 'Requires' lines from each dependency specified in the
|
95
|
+
# module_metadata hash
|
96
|
+
#
|
97
|
+
# returns array of strings, each of which is a 'Requires' line for
|
98
|
+
# use in an RPM spec file
|
99
|
+
def self.generate_module_rpm_requires(module_metadata)
|
100
|
+
rpm_metadata_content = []
|
101
|
+
module_metadata['dependencies'].each do |dep|
|
102
|
+
pkg = "pupmod-#{dep['name'].gsub('/', '-')}"
|
103
|
+
dep_version = dep['version_requirement']
|
104
|
+
|
105
|
+
begin
|
106
|
+
rpm_metadata_content << get_version_requires(pkg, dep_version)
|
107
|
+
rescue SIMPRpmDepVersionException => e
|
108
|
+
err_msg = "Unable to parse #{dep['name']} dependency" +
|
109
|
+
" version '#{dep_version}'"
|
110
|
+
raise SIMPRpmDepException.new(err_msg)
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
rpm_metadata_content.flatten
|
115
|
+
end
|
116
|
+
|
117
|
+
# Generate 'build/rpm_metadata/requires' file containing
|
118
|
+
# 'Obsoletes' and/or 'Requires' lines for use in an RPM spec file
|
119
|
+
# from a combination of the 'metadata.json' file in dir and
|
120
|
+
# the rpm_dependency_metadata
|
121
|
+
# hash.
|
122
|
+
#
|
123
|
+
# If the rpm_dependency_metadata hash as an entry for the
|
124
|
+
# module named in the 'metadata.json' file, the generated
|
125
|
+
# 'requires' file will contain
|
126
|
+
# * 'Obsoletes' lines for any obsoletes specified in the
|
127
|
+
# rpm_dependency_metadata hash
|
128
|
+
# * 'Requires' lines for any requires specified in the
|
129
|
+
# rpm_dependency_metadata hash, where the versions for those
|
130
|
+
# dependencies are pulled from the 'metadata.json' file.
|
131
|
+
#
|
132
|
+
# Otherwise, the generated 'requires' file will contain
|
133
|
+
# "Requires" lines for each dependency specified in the
|
134
|
+
# 'metadata.json' file.
|
135
|
+
def self.generate_rpm_requires_file(dir, rpm_dependency_metadata)
|
136
|
+
require 'json'
|
137
|
+
|
138
|
+
metadata_json_file = File.join(dir, 'metadata.json')
|
139
|
+
module_metadata = JSON.parse(File.read(metadata_json_file))
|
140
|
+
module_name = module_metadata['name'].split(%r(-|/)).last
|
141
|
+
|
142
|
+
module_dep_info = rpm_dependency_metadata[module_name]
|
143
|
+
rpm_metadata_content = []
|
144
|
+
begin
|
145
|
+
if module_dep_info
|
146
|
+
rpm_metadata_content = generate_custom_rpm_requires(module_dep_info, module_metadata)
|
147
|
+
else
|
148
|
+
rpm_metadata_content = generate_module_rpm_requires(module_metadata)
|
149
|
+
end
|
150
|
+
rescue SIMPRpmDepException => e
|
151
|
+
fail "#{e.message} in #{metadata_json_file}"
|
152
|
+
end
|
153
|
+
|
154
|
+
rpm_metadata_file = File.join(dir, 'build', 'rpm_metadata', 'requires')
|
155
|
+
|
156
|
+
FileUtils.mkdir_p(File.dirname(rpm_metadata_file))
|
157
|
+
File.open(rpm_metadata_file, 'w') do |fh|
|
158
|
+
fh.puts(rpm_metadata_content.flatten.join("\n"))
|
159
|
+
fh.flush
|
160
|
+
end
|
161
|
+
end
|
162
|
+
end
|
data/lib/simp/rake/fixtures.rb
CHANGED
@@ -53,7 +53,7 @@ module Simp::Rake
|
|
53
53
|
require 'yaml'
|
54
54
|
pwd = File.expand_path(@base_dir)
|
55
55
|
_f = YAML.load_file(File.join(pwd,'.fixtures.yml'))
|
56
|
-
|
56
|
+
|
57
57
|
unless File.file?(File.join(pwd,'.fixtures.yml.local'))
|
58
58
|
fail "ERROR: Can't diff fixtures without a `.fixtures.yml.local` file"
|
59
59
|
end
|
@@ -41,11 +41,10 @@ package_version = "UNKNOWN"
|
|
41
41
|
module_license = "UNKNOWN"
|
42
42
|
|
43
43
|
--
|
44
|
-
-- Default to
|
45
|
-
-- This was done due to the change in naming scheme across all of the modules.
|
44
|
+
-- Default to 0
|
46
45
|
--
|
47
46
|
|
48
|
-
package_release =
|
47
|
+
package_release = 0
|
49
48
|
|
50
49
|
}
|
51
50
|
|
@@ -338,12 +337,14 @@ curdir=`pwd`
|
|
338
337
|
dirname=`basename $curdir`
|
339
338
|
cp -r ../$dirname %{buildroot}/%{prefix}/%{module_name}
|
340
339
|
cd %{buildroot}%{prefix}/%{module_name}
|
340
|
+
|
341
|
+
# Remove unnecessary assets
|
341
342
|
rm -rf %{buildroot}/%{prefix}/%{module_name}/.git
|
342
|
-
rm -f %{buildroot}/%{prefix}/*.lock
|
343
|
-
rm -rf %{buildroot}/%{prefix}/spec/fixtures/modules
|
344
|
-
rm -rf %{buildroot}/%{prefix}/dist
|
345
|
-
rm -rf %{buildroot}/%{prefix}/junit
|
346
|
-
rm -rf %{buildroot}/%{prefix}/log
|
343
|
+
rm -f %{buildroot}/%{prefix}/%{module_name}/*.lock
|
344
|
+
rm -rf %{buildroot}/%{prefix}/%{module_name}/spec/fixtures/modules
|
345
|
+
rm -rf %{buildroot}/%{prefix}/%{module_name}/dist
|
346
|
+
rm -rf %{buildroot}/%{prefix}/%{module_name}/junit
|
347
|
+
rm -rf %{buildroot}/%{prefix}/%{module_name}/log
|
347
348
|
|
348
349
|
%clean
|
349
350
|
[ "%{buildroot}" != "/" ] && rm -rf %{buildroot}
|
@@ -41,11 +41,10 @@ package_version = "UNKNOWN"
|
|
41
41
|
module_license = "UNKNOWN"
|
42
42
|
|
43
43
|
--
|
44
|
-
-- Default to
|
45
|
-
-- This was done due to the change in naming scheme across all of the modules.
|
44
|
+
-- Default to 0
|
46
45
|
--
|
47
46
|
|
48
|
-
package_release =
|
47
|
+
package_release = 0
|
49
48
|
|
50
49
|
}
|
51
50
|
|
@@ -338,12 +337,14 @@ curdir=`pwd`
|
|
338
337
|
dirname=`basename $curdir`
|
339
338
|
cp -r ../$dirname %{buildroot}/%{prefix}/%{module_name}
|
340
339
|
cd %{buildroot}%{prefix}/%{module_name}
|
340
|
+
|
341
|
+
# Remove unnecessary assets
|
341
342
|
rm -rf %{buildroot}/%{prefix}/%{module_name}/.git
|
342
|
-
rm -f %{buildroot}/%{prefix}/*.lock
|
343
|
-
rm -rf %{buildroot}/%{prefix}/spec/fixtures/modules
|
344
|
-
rm -rf %{buildroot}/%{prefix}/dist
|
345
|
-
rm -rf %{buildroot}/%{prefix}/junit
|
346
|
-
rm -rf %{buildroot}/%{prefix}/log
|
343
|
+
rm -f %{buildroot}/%{prefix}/%{module_name}/*.lock
|
344
|
+
rm -rf %{buildroot}/%{prefix}/%{module_name}/spec/fixtures/modules
|
345
|
+
rm -rf %{buildroot}/%{prefix}/%{module_name}/dist
|
346
|
+
rm -rf %{buildroot}/%{prefix}/%{module_name}/junit
|
347
|
+
rm -rf %{buildroot}/%{prefix}/%{module_name}/log
|
347
348
|
|
348
349
|
%clean
|
349
350
|
[ "%{buildroot}" != "/" ] && rm -rf %{buildroot}
|
@@ -0,0 +1,357 @@
|
|
1
|
+
%{lua:
|
2
|
+
|
3
|
+
--
|
4
|
+
-- When you build you must to pass this along so that we know how
|
5
|
+
-- to get the preliminary information.
|
6
|
+
-- This directory should hold the following items:
|
7
|
+
-- * 'build/rpm_metadata/requires' <- optional list of 'Requires', 'Provides',
|
8
|
+
-- and 'Obsoletes' to supplement those auto-generated in this spec file
|
9
|
+
-- * 'build/rpm_metadata/release' <- optional RPM release number to use in
|
10
|
+
-- lieu of number hard-coded in this spec file
|
11
|
+
-- * 'CHANGELOG' <- optional RPM formatted Changelog to use in lieu of minimal,
|
12
|
+
-- changelog entry auto-generated in this spec file
|
13
|
+
-- * 'metadata.json' <- required file that must contain the following metadata:
|
14
|
+
-- - 'name' - package name
|
15
|
+
-- - 'version' - package version
|
16
|
+
-- - 'license' - package license
|
17
|
+
-- - 'summary' - package summary
|
18
|
+
-- - 'source' - package source
|
19
|
+
--
|
20
|
+
-- Example:
|
21
|
+
-- rpmbuild -D 'pup_module_info_dir /home/user/project/puppet_module' -ba SPECS/specfile.spec
|
22
|
+
--
|
23
|
+
-- If this is not found, we will look in %{_sourcedir} for the files and fall
|
24
|
+
-- back to the current directory
|
25
|
+
--
|
26
|
+
|
27
|
+
src_dir = rpm.expand('%{pup_module_info_dir}')
|
28
|
+
|
29
|
+
if string.match(src_dir, '^%%') or (posix.stat(src_dir, 'type') ~= 'directory') then
|
30
|
+
src_dir = rpm.expand('%{_sourcedir}')
|
31
|
+
|
32
|
+
if (posix.stat((src_dir .. "/metadata.json"), 'type') ~= 'regular') then
|
33
|
+
src_dir = './'
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
-- These UNKNOWN entries should break the build if something bad happens
|
38
|
+
|
39
|
+
package_name = "UNKNOWN"
|
40
|
+
package_version = "UNKNOWN"
|
41
|
+
module_license = "UNKNOWN"
|
42
|
+
|
43
|
+
--
|
44
|
+
-- Default to 0
|
45
|
+
--
|
46
|
+
|
47
|
+
package_release = 0
|
48
|
+
}
|
49
|
+
|
50
|
+
%{lua:
|
51
|
+
-- Pull the Relevant Metadata out of the Puppet module metadata.json.
|
52
|
+
|
53
|
+
metadata = ''
|
54
|
+
metadata_file = io.open(src_dir .. "/metadata.json","r")
|
55
|
+
if metadata_file then
|
56
|
+
metadata = metadata_file:read("*all")
|
57
|
+
|
58
|
+
-- Ignore the first curly brace
|
59
|
+
metadata = metadata:gsub("{}?", '|', 1)
|
60
|
+
|
61
|
+
-- Ignore all keys that are below the first level
|
62
|
+
metadata = metadata:gsub("{.-}", '')
|
63
|
+
metadata = metadata:gsub("%[.-%]", '')
|
64
|
+
else
|
65
|
+
error("Could not open 'metadata.json'", 0)
|
66
|
+
end
|
67
|
+
|
68
|
+
-- This starts as an empty string so that we can build it later
|
69
|
+
module_requires = ''
|
70
|
+
|
71
|
+
}
|
72
|
+
|
73
|
+
%{lua:
|
74
|
+
|
75
|
+
-- Get the Module Name and put it in the correct format
|
76
|
+
|
77
|
+
local name_match = string.match(metadata, '"name":%s+"(.-)"%s*,')
|
78
|
+
|
79
|
+
module_author = ''
|
80
|
+
module_name = ''
|
81
|
+
|
82
|
+
if name_match then
|
83
|
+
package_name = ('pupmod-' .. name_match)
|
84
|
+
|
85
|
+
local i = 0
|
86
|
+
for str in string.gmatch(name_match,'[^-]+') do
|
87
|
+
if i == 0 then
|
88
|
+
module_author = str
|
89
|
+
else
|
90
|
+
if module_name == '' then
|
91
|
+
module_name = str
|
92
|
+
else
|
93
|
+
module_name = (module_name .. '-' .. str)
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
i = i+1
|
98
|
+
end
|
99
|
+
else
|
100
|
+
error("Could not find valid package name in 'metadata.json'", 0)
|
101
|
+
end
|
102
|
+
|
103
|
+
}
|
104
|
+
|
105
|
+
%{lua:
|
106
|
+
|
107
|
+
-- Get the Module Version
|
108
|
+
|
109
|
+
local version_match = string.match(metadata, '"version":%s+"(.-)"%s*,')
|
110
|
+
|
111
|
+
if version_match then
|
112
|
+
package_version = version_match
|
113
|
+
else
|
114
|
+
error("Could not find valid package version in 'metadata.json'", 0)
|
115
|
+
end
|
116
|
+
|
117
|
+
}
|
118
|
+
|
119
|
+
%{lua:
|
120
|
+
|
121
|
+
-- Get the Module License
|
122
|
+
|
123
|
+
local license_match = string.match(metadata, '"license":%s+"(.-)"%s*,')
|
124
|
+
|
125
|
+
if license_match then
|
126
|
+
module_license = license_match
|
127
|
+
else
|
128
|
+
error("Could not find valid package license in 'metadata.json'", 0)
|
129
|
+
end
|
130
|
+
|
131
|
+
}
|
132
|
+
|
133
|
+
%{lua:
|
134
|
+
|
135
|
+
-- Get the Module Summary
|
136
|
+
|
137
|
+
local summary_match = string.match(metadata, '"summary":%s+"(.-)"%s*,')
|
138
|
+
|
139
|
+
if summary_match then
|
140
|
+
module_summary = summary_match
|
141
|
+
else
|
142
|
+
error("Could not find valid package summary in 'metadata.json'", 0)
|
143
|
+
end
|
144
|
+
|
145
|
+
}
|
146
|
+
|
147
|
+
%{lua:
|
148
|
+
|
149
|
+
-- Get the Module Source line for the URL string
|
150
|
+
|
151
|
+
local source_match = string.match(metadata, '"source":%s+"(.-)"%s*,')
|
152
|
+
|
153
|
+
if source_match then
|
154
|
+
module_source = source_match
|
155
|
+
else
|
156
|
+
error("Could not find valid package source in 'metadata.json'", 0)
|
157
|
+
end
|
158
|
+
|
159
|
+
}
|
160
|
+
|
161
|
+
%{lua:
|
162
|
+
|
163
|
+
-- Snag the RPM-specific items out of the 'build/rpm_metadata' directory
|
164
|
+
|
165
|
+
-- First, the Release Number
|
166
|
+
|
167
|
+
rel_file = io.open(src_dir .. "/build/rpm_metadata/release", "r")
|
168
|
+
|
169
|
+
if not rel_file then
|
170
|
+
-- Need this for the SRPM case
|
171
|
+
rel_file = io.open(src_dir .. "/release", "r")
|
172
|
+
end
|
173
|
+
|
174
|
+
if rel_file then
|
175
|
+
for line in rel_file:lines() do
|
176
|
+
is_comment = string.match(line, "^%s*#")
|
177
|
+
is_blank = string.match(line, "^%s*$")
|
178
|
+
|
179
|
+
if not (is_comment or is_blank) then
|
180
|
+
package_release = line
|
181
|
+
break
|
182
|
+
end
|
183
|
+
end
|
184
|
+
end
|
185
|
+
|
186
|
+
}
|
187
|
+
|
188
|
+
%{lua:
|
189
|
+
|
190
|
+
-- Next, the Requirements
|
191
|
+
req_file = io.open(src_dir .. "/build/rpm_metadata/requires", "r")
|
192
|
+
|
193
|
+
if not req_file then
|
194
|
+
-- Need this for the SRPM case
|
195
|
+
req_file = io.open(src_dir .. "/requires", "r")
|
196
|
+
end
|
197
|
+
|
198
|
+
if req_file then
|
199
|
+
for line in req_file:lines() do
|
200
|
+
valid_line = (string.match(line, "^Requires: ") or string.match(line, "^Obsoletes: ") or string.match(line, "^Provides: "))
|
201
|
+
|
202
|
+
if valid_line then
|
203
|
+
module_requires = (module_requires .. "\n" .. line)
|
204
|
+
end
|
205
|
+
end
|
206
|
+
end
|
207
|
+
}
|
208
|
+
|
209
|
+
%global _binaries_in_noarch_packages_terminate_build 0
|
210
|
+
|
211
|
+
%define module_name %{lua: print(module_name)}
|
212
|
+
%define package_name %{lua: print(package_name)}
|
213
|
+
|
214
|
+
Summary: %{module_name} Puppet Module
|
215
|
+
Name: %{package_name}
|
216
|
+
|
217
|
+
Version: %{lua: print(package_version)}
|
218
|
+
Release: %{lua: print(package_release)}
|
219
|
+
License: %{lua: print(module_license)}
|
220
|
+
Group: Applications/System
|
221
|
+
Source0: %{package_name}-%{version}-%{release}.tar.gz
|
222
|
+
Source1: %{lua: print("metadata.json")}
|
223
|
+
%{lua:
|
224
|
+
-- Include our sources as appropriate
|
225
|
+
changelog = io.open(src_dir .. "/CHANGELOG","r")
|
226
|
+
if changelog then
|
227
|
+
print("Source2: " .. "CHANGELOG\n")
|
228
|
+
end
|
229
|
+
|
230
|
+
if rel_file then
|
231
|
+
print("Source3: " .. "release\n")
|
232
|
+
end
|
233
|
+
if req_file then
|
234
|
+
print("Source4: " .. "requires\n")
|
235
|
+
end
|
236
|
+
}
|
237
|
+
URL: %{lua: print(module_source)}
|
238
|
+
BuildRoot: %{_tmppath}/%{package_name}-%{version}-%{release}-buildroot
|
239
|
+
BuildArch: noarch
|
240
|
+
|
241
|
+
Requires(pre,preun,post,postun): simp-adapter >= 0.0.1
|
242
|
+
|
243
|
+
%if ("%{package_name}" != "pupmod-simp-simplib") && ("%{package_name}" != "pupmod-puppetlabs-stdlib")
|
244
|
+
Requires: pupmod-simp-simplib >= 1.2.6
|
245
|
+
%endif
|
246
|
+
|
247
|
+
%if "%{package_name}" != "pupmod-puppetlabs-stdlib"
|
248
|
+
Requires: pupmod-puppetlabs-stdlib >= 4.9.0
|
249
|
+
Requires: pupmod-puppetlabs-stdlib < 6.0.0
|
250
|
+
%endif
|
251
|
+
|
252
|
+
%{lua: print(module_requires)}
|
253
|
+
|
254
|
+
Provides: pupmod-%{lua: print(module_name)} = %{lua: print(package_version .. "-" .. package_release)}
|
255
|
+
Obsoletes: pupmod-%{lua: print(module_name)} < %{lua: print(package_version .. "-" .. package_release)}
|
256
|
+
|
257
|
+
%{lua:
|
258
|
+
|
259
|
+
-- This is a workaround for the 'simp-rsync' real RPM conflict but is
|
260
|
+
-- required by some external modules.
|
261
|
+
-- This should be removed when SIMP 6 is stable
|
262
|
+
|
263
|
+
author_rpm_name = module_author .. "-" .. module_name
|
264
|
+
|
265
|
+
if author_rpm_name ~= 'simp-rsync' then
|
266
|
+
print("Provides: " .. author_rpm_name .. " = " .. package_version .. "-" .. package_release .. "\n")
|
267
|
+
print("Obsoletes: " .. author_rpm_name .. " < " .. package_version .. "-" .. package_release .. "\n")
|
268
|
+
end
|
269
|
+
}
|
270
|
+
|
271
|
+
Prefix: /usr/share/simp/modules
|
272
|
+
|
273
|
+
%description
|
274
|
+
%{lua: print(module_summary)}
|
275
|
+
|
276
|
+
%prep
|
277
|
+
%setup -q -n %{package_name}-%{version}
|
278
|
+
|
279
|
+
%build
|
280
|
+
|
281
|
+
%install
|
282
|
+
[ "%{buildroot}" != "/" ] && rm -rf %{buildroot}
|
283
|
+
|
284
|
+
mkdir -p %{buildroot}/%{prefix}
|
285
|
+
|
286
|
+
curdir=`pwd`
|
287
|
+
dirname=`basename $curdir`
|
288
|
+
cp -r ../$dirname %{buildroot}/%{prefix}/%{module_name}
|
289
|
+
|
290
|
+
# Remove unnecessary assets
|
291
|
+
rm -rf %{buildroot}/%{prefix}/%{module_name}/.git
|
292
|
+
rm -f %{buildroot}/%{prefix}/%{module_name}/*.lock
|
293
|
+
rm -rf %{buildroot}/%{prefix}/%{module_name}/spec/fixtures/modules
|
294
|
+
rm -rf %{buildroot}/%{prefix}/%{module_name}/dist
|
295
|
+
rm -rf %{buildroot}/%{prefix}/%{module_name}/junit
|
296
|
+
rm -rf %{buildroot}/%{prefix}/%{module_name}/log
|
297
|
+
|
298
|
+
%clean
|
299
|
+
[ "%{buildroot}" != "/" ] && rm -rf %{buildroot}
|
300
|
+
|
301
|
+
mkdir -p %{buildroot}/%{prefix}
|
302
|
+
|
303
|
+
%files
|
304
|
+
%defattr(0640,root,root,0750)
|
305
|
+
%{prefix}/%{module_name}
|
306
|
+
|
307
|
+
# when $1 = 1, this is an install
|
308
|
+
# when $1 = 2, this is an upgrade
|
309
|
+
%pre
|
310
|
+
/usr/local/sbin/simp_rpm_helper --rpm_dir=%{prefix}/%{module_name} --rpm_section='pre' --rpm_status=$1
|
311
|
+
|
312
|
+
# when $1 = 1, this is an install
|
313
|
+
# when $1 = 2, this is an upgrade
|
314
|
+
%post
|
315
|
+
/usr/local/sbin/simp_rpm_helper --rpm_dir=%{prefix}/%{module_name} --rpm_section='post' --rpm_status=$1
|
316
|
+
|
317
|
+
# when $1 = 1, this is the uninstall of the previous version during an upgrade
|
318
|
+
# when $1 = 0, this is the uninstall of the only version during an erase
|
319
|
+
%preun
|
320
|
+
/usr/local/sbin/simp_rpm_helper --rpm_dir=%{prefix}/%{module_name} --rpm_section='preun' --rpm_status=$1
|
321
|
+
|
322
|
+
# when $1 = 1, this is the uninstall of the previous version during an upgrade
|
323
|
+
# when $1 = 0, this is the uninstall of the only version during an erase
|
324
|
+
%postun
|
325
|
+
/usr/local/sbin/simp_rpm_helper --rpm_dir=%{prefix}/%{module_name} --rpm_section='postun' --rpm_status=$1
|
326
|
+
|
327
|
+
%changelog
|
328
|
+
%{lua:
|
329
|
+
-- Finally, the CHANGELOG
|
330
|
+
|
331
|
+
-- A default CHANGELOG in case we cannot find a real one
|
332
|
+
|
333
|
+
default_changelog = [===[
|
334
|
+
* $date Auto Changelog <auto@no.body> - $version-$release
|
335
|
+
- Latest release of $name
|
336
|
+
]===]
|
337
|
+
|
338
|
+
default_lookup_table = {
|
339
|
+
date = os.date("%a %b %d %Y"),
|
340
|
+
version = package_version,
|
341
|
+
release = package_release,
|
342
|
+
name = package_name
|
343
|
+
}
|
344
|
+
|
345
|
+
changelog = io.open(src_dir .. "/CHANGELOG","r")
|
346
|
+
if changelog then
|
347
|
+
first_line = changelog:read()
|
348
|
+
if string.match(first_line, "^*%s+%a%a%a%s+%a%a%a%s+%d%d?%s+%d%d%d%d%s+.+") then
|
349
|
+
changelog:seek("set",0)
|
350
|
+
print(changelog:read("*all"))
|
351
|
+
else
|
352
|
+
print((default_changelog:gsub('$(%w+)', default_lookup_table)))
|
353
|
+
end
|
354
|
+
else
|
355
|
+
print((default_changelog:gsub('$(%w+)', default_lookup_table)))
|
356
|
+
end
|
357
|
+
}
|