packaging 0.88.77
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/LICENSE +17 -0
- data/README-Solaris.md +117 -0
- data/README.md +977 -0
- data/lib/packaging.rb +32 -0
- data/lib/packaging/archive.rb +126 -0
- data/lib/packaging/artifactory.rb +651 -0
- data/lib/packaging/artifactory/extensions.rb +94 -0
- data/lib/packaging/config.rb +492 -0
- data/lib/packaging/config/params.rb +387 -0
- data/lib/packaging/config/validations.rb +13 -0
- data/lib/packaging/deb.rb +28 -0
- data/lib/packaging/deb/repo.rb +264 -0
- data/lib/packaging/gem.rb +70 -0
- data/lib/packaging/metrics.rb +15 -0
- data/lib/packaging/nuget.rb +39 -0
- data/lib/packaging/paths.rb +376 -0
- data/lib/packaging/platforms.rb +507 -0
- data/lib/packaging/repo.rb +155 -0
- data/lib/packaging/retrieve.rb +75 -0
- data/lib/packaging/rpm.rb +5 -0
- data/lib/packaging/rpm/repo.rb +254 -0
- data/lib/packaging/sign.rb +8 -0
- data/lib/packaging/sign/deb.rb +9 -0
- data/lib/packaging/sign/dmg.rb +41 -0
- data/lib/packaging/sign/ips.rb +57 -0
- data/lib/packaging/sign/msi.rb +124 -0
- data/lib/packaging/sign/rpm.rb +115 -0
- data/lib/packaging/tar.rb +163 -0
- data/lib/packaging/util.rb +146 -0
- data/lib/packaging/util/date.rb +20 -0
- data/lib/packaging/util/execution.rb +85 -0
- data/lib/packaging/util/file.rb +125 -0
- data/lib/packaging/util/git.rb +174 -0
- data/lib/packaging/util/git_tags.rb +73 -0
- data/lib/packaging/util/gpg.rb +66 -0
- data/lib/packaging/util/jenkins.rb +95 -0
- data/lib/packaging/util/misc.rb +69 -0
- data/lib/packaging/util/net.rb +410 -0
- data/lib/packaging/util/os.rb +17 -0
- data/lib/packaging/util/platform.rb +40 -0
- data/lib/packaging/util/rake_utils.rb +112 -0
- data/lib/packaging/util/serialization.rb +19 -0
- data/lib/packaging/util/ship.rb +300 -0
- data/lib/packaging/util/tool.rb +41 -0
- data/lib/packaging/util/version.rb +334 -0
- data/spec/fixtures/config/ext/build_defaults.yaml +2 -0
- data/spec/fixtures/config/ext/project_data.yaml +2 -0
- data/spec/fixtures/configs/components/test_file.json +1 -0
- data/spec/fixtures/configs/components/test_file_2.json +0 -0
- data/spec/fixtures/configs/components/test_file_not_tagged.json +1 -0
- data/spec/fixtures/configs/components/test_file_wrong_ext.txt +0 -0
- data/spec/fixtures/configs/components/test_file_wrong_ext.wrong +0 -0
- data/spec/fixtures/util/pre_tasks.yaml +4 -0
- data/spec/lib/packaging/artifactory_spec.rb +221 -0
- data/spec/lib/packaging/config_spec.rb +576 -0
- data/spec/lib/packaging/deb/repo_spec.rb +157 -0
- data/spec/lib/packaging/deb_spec.rb +52 -0
- data/spec/lib/packaging/gem_spec.rb +86 -0
- data/spec/lib/packaging/paths_spec.rb +418 -0
- data/spec/lib/packaging/platforms_spec.rb +178 -0
- data/spec/lib/packaging/repo_spec.rb +135 -0
- data/spec/lib/packaging/retrieve_spec.rb +100 -0
- data/spec/lib/packaging/rpm/repo_spec.rb +133 -0
- data/spec/lib/packaging/sign_spec.rb +133 -0
- data/spec/lib/packaging/tar_spec.rb +116 -0
- data/spec/lib/packaging/util/execution_spec.rb +56 -0
- data/spec/lib/packaging/util/file_spec.rb +139 -0
- data/spec/lib/packaging/util/git_spec.rb +160 -0
- data/spec/lib/packaging/util/git_tag_spec.rb +36 -0
- data/spec/lib/packaging/util/gpg_spec.rb +64 -0
- data/spec/lib/packaging/util/jenkins_spec.rb +112 -0
- data/spec/lib/packaging/util/misc_spec.rb +31 -0
- data/spec/lib/packaging/util/net_spec.rb +259 -0
- data/spec/lib/packaging/util/os_spec.rb +31 -0
- data/spec/lib/packaging/util/rake_utils_spec.rb +70 -0
- data/spec/lib/packaging/util/ship_spec.rb +199 -0
- data/spec/lib/packaging/util/version_spec.rb +123 -0
- data/spec/lib/packaging_spec.rb +19 -0
- data/spec/spec_helper.rb +22 -0
- data/static_artifacts/PackageInfo.plist +3 -0
- data/tasks/00_utils.rake +214 -0
- data/tasks/30_metrics.rake +33 -0
- data/tasks/apple.rake +268 -0
- data/tasks/archive.rake +69 -0
- data/tasks/build.rake +12 -0
- data/tasks/clean.rake +5 -0
- data/tasks/config.rake +35 -0
- data/tasks/deb.rake +129 -0
- data/tasks/deb_repos.rake +28 -0
- data/tasks/deprecated.rake +130 -0
- data/tasks/doc.rake +20 -0
- data/tasks/education.rake +57 -0
- data/tasks/fetch.rake +60 -0
- data/tasks/gem.rake +159 -0
- data/tasks/jenkins.rake +538 -0
- data/tasks/jenkins_dynamic.rake +202 -0
- data/tasks/load_extras.rake +21 -0
- data/tasks/mock.rake +348 -0
- data/tasks/nightly_repos.rake +286 -0
- data/tasks/pe_deb.rake +12 -0
- data/tasks/pe_rpm.rake +13 -0
- data/tasks/pe_ship.rake +226 -0
- data/tasks/pe_sign.rake +13 -0
- data/tasks/pe_tar.rake +5 -0
- data/tasks/retrieve.rake +52 -0
- data/tasks/rpm.rake +66 -0
- data/tasks/rpm_repos.rake +29 -0
- data/tasks/ship.rake +692 -0
- data/tasks/sign.rake +154 -0
- data/tasks/tag.rake +8 -0
- data/tasks/tar.rake +28 -0
- data/tasks/update.rake +16 -0
- data/tasks/vanagon.rake +35 -0
- data/tasks/vendor_gems.rake +117 -0
- data/tasks/version.rake +33 -0
- data/tasks/z_data_dump.rake +65 -0
- data/templates/README +1 -0
- data/templates/downstream.xml.erb +47 -0
- data/templates/msi.xml.erb +197 -0
- data/templates/packaging.xml.erb +346 -0
- data/templates/repo.xml.erb +117 -0
- metadata +287 -0
@@ -0,0 +1,41 @@
|
|
1
|
+
# Utility methods for handling system binaries
|
2
|
+
|
3
|
+
module Pkg::Util::Tool
|
4
|
+
|
5
|
+
# Set up utility methods for handling system binaries
|
6
|
+
#
|
7
|
+
class << self
|
8
|
+
def check_tool(tool)
|
9
|
+
find_tool(tool, :required => true)
|
10
|
+
end
|
11
|
+
|
12
|
+
def find_tool(tool, args = { :required => false })
|
13
|
+
ENV['PATH'].split(File::PATH_SEPARATOR).each do |root|
|
14
|
+
location = File.join(root, tool)
|
15
|
+
|
16
|
+
if Pkg::Util::OS.windows? && File.extname(location).empty?
|
17
|
+
exts = ENV['PATHEXT']
|
18
|
+
exts = exts ? exts.split(File::PATH_SEPARATOR) : %w(.EXE .BAT .CMD .COM)
|
19
|
+
exts.each do |ext|
|
20
|
+
locationext = File.expand_path(location + ext)
|
21
|
+
|
22
|
+
return '"' + locationext + '"' if FileTest.executable?(locationext)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
return location if FileTest.executable? location
|
27
|
+
end
|
28
|
+
fail "#{tool} tool not found...exiting" if args[:required]
|
29
|
+
return nil
|
30
|
+
end
|
31
|
+
|
32
|
+
alias :has_tool :find_tool
|
33
|
+
|
34
|
+
end
|
35
|
+
|
36
|
+
# Set up paths to system tools we use in the packaging repo
|
37
|
+
# no matter what distribution we're packaging for.
|
38
|
+
|
39
|
+
GIT = Pkg::Util::Tool.check_tool('git')
|
40
|
+
|
41
|
+
end
|
@@ -0,0 +1,334 @@
|
|
1
|
+
require 'json'
|
2
|
+
|
3
|
+
# Utility methods used for versioning projects for various kinds of packaging
|
4
|
+
module Pkg::Util::Version
|
5
|
+
class << self
|
6
|
+
def uname_r
|
7
|
+
uname = Pkg::Util::Tool.find_tool('uname', required: true)
|
8
|
+
stdout, = Pkg::Util::Execution.capture3("#{uname} -r")
|
9
|
+
stdout.chomp
|
10
|
+
end
|
11
|
+
|
12
|
+
def pwd_version
|
13
|
+
Dir.pwd.split('.')[-1]
|
14
|
+
end
|
15
|
+
|
16
|
+
def debversion
|
17
|
+
base_pkg_version.join('-') << "#{Pkg::Config.packager}1"
|
18
|
+
end
|
19
|
+
|
20
|
+
def origversion
|
21
|
+
Pkg::Config.debversion.split('-')[0]
|
22
|
+
end
|
23
|
+
|
24
|
+
def rpmversion
|
25
|
+
base_pkg_version[0]
|
26
|
+
end
|
27
|
+
|
28
|
+
def rpmrelease
|
29
|
+
base_pkg_version[1]
|
30
|
+
end
|
31
|
+
|
32
|
+
# This is used to set Pkg::Config.version
|
33
|
+
# describe can return a number of potential formats
|
34
|
+
# 5.3.0
|
35
|
+
# 5.3.0-18-gfbddc8f
|
36
|
+
# 5.3.0-18-gfbddc8f-dirty
|
37
|
+
# 0.7.0-rc1
|
38
|
+
# 0.7.0-rc1-63-g51ccc51
|
39
|
+
# 0.7.0-rc1-63-g51ccc51-dirty
|
40
|
+
#
|
41
|
+
# we want all of it except the `gfbddc8f` part.
|
42
|
+
def dash_version
|
43
|
+
describe = Pkg::Util::Git.describe
|
44
|
+
info = describe.split('-')
|
45
|
+
|
46
|
+
if Pkg::Util::Git.ref_type == "tag"
|
47
|
+
describe
|
48
|
+
else
|
49
|
+
info.reject { |d| d.match(/^g.{7}/) }.join('-')
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def extended_dash_version
|
54
|
+
Pkg::Util::Git.describe(['--tags', '--dirty', '--abbrev=7'])
|
55
|
+
end
|
56
|
+
|
57
|
+
# This version is used for gems and platform types that do not support
|
58
|
+
# dashes in the package version
|
59
|
+
def dot_version(version = Pkg::Config.version)
|
60
|
+
version.tr('-', '.')
|
61
|
+
end
|
62
|
+
|
63
|
+
def extended_dot_version
|
64
|
+
dot_version(extended_dash_version)
|
65
|
+
end
|
66
|
+
|
67
|
+
# Given a version, reformat it to be appropriate for a final package
|
68
|
+
# version. This means we need to add a `0.` before the release version
|
69
|
+
# for non-final builds
|
70
|
+
#
|
71
|
+
# This only applies to packages that are built with the automation in this
|
72
|
+
# repo. This is invalid for all other build automation, like vanagon
|
73
|
+
#
|
74
|
+
# Examples of output:
|
75
|
+
# 4.99.0.22.gf64bc49-1
|
76
|
+
# 4.4.1-0.1SNAPSHOT.2017.05.16T1005
|
77
|
+
# 4.99.0-1
|
78
|
+
# 4.99.0.29.g431768c-1
|
79
|
+
# 2.7.1-1
|
80
|
+
# 5.3.0.rc4-1
|
81
|
+
# 3.0.5.rc6.24.g431768c-1
|
82
|
+
#
|
83
|
+
# rubocop:disable Metrics/AbcSize, Metrics/MethodLength
|
84
|
+
def base_pkg_version(version = Pkg::Config.version)
|
85
|
+
return "#{dot_version(version)}-#{Pkg::Config.release}".split('-') if final?(version) || Pkg::Config.vanagon_project
|
86
|
+
|
87
|
+
if version.include?('SNAPSHOT')
|
88
|
+
new_version = dot_version(version).sub(/\.SNAPSHOT/, "-0.#{Pkg::Config.release}SNAPSHOT")
|
89
|
+
elsif version.include?('rc')
|
90
|
+
rc_ver = dot_version(version).match(/\.?rc(\d+)/)[1]
|
91
|
+
new_version = dot_version(version).sub(/\.?rc(\d+)/, '') + "-0.#{Pkg::Config.release}rc#{rc_ver}"
|
92
|
+
else
|
93
|
+
new_version = dot_version(version) + "-0.#{Pkg::Config.release}"
|
94
|
+
end
|
95
|
+
|
96
|
+
if new_version.include?('dirty')
|
97
|
+
new_version = new_version.sub(/\.?dirty/, '') + 'dirty'
|
98
|
+
end
|
99
|
+
|
100
|
+
new_version.split('-')
|
101
|
+
end
|
102
|
+
|
103
|
+
# Determines if the version we are working with is or is not final
|
104
|
+
#
|
105
|
+
# The version here does not include the release version. Therefore, we
|
106
|
+
# assume that any version that includes a `-\d+` was not built from a tag
|
107
|
+
# and is a non-final version.
|
108
|
+
# Examples:
|
109
|
+
# Final
|
110
|
+
# - 5.0.0
|
111
|
+
# - 2016.5.6.7
|
112
|
+
# Nonfinal
|
113
|
+
# - 4.99.0-22
|
114
|
+
# - 1.0.0-658-gabc1234
|
115
|
+
# - 5.0.0.master.SNAPSHOT.2017.05.16T1357
|
116
|
+
# - 5.9.7-rc4
|
117
|
+
# - 4.99.0-56-dirty
|
118
|
+
#
|
119
|
+
def final?(version = Pkg::Config.version)
|
120
|
+
case version
|
121
|
+
when /rc/
|
122
|
+
false
|
123
|
+
when /SNAPSHOT/
|
124
|
+
false
|
125
|
+
when /g[a-f0-9]{7}/
|
126
|
+
false
|
127
|
+
when /^(\d+\.)+\d+-\d+/
|
128
|
+
false
|
129
|
+
when /-dirty/
|
130
|
+
Pkg::Config.allow_dirty_tree
|
131
|
+
else
|
132
|
+
true
|
133
|
+
end
|
134
|
+
end
|
135
|
+
|
136
|
+
# This is to support packages that only burn-in the version number in the
|
137
|
+
# release artifact, rather than storing it two (or more) times in the
|
138
|
+
# version control system. Razor is a good example of that; see
|
139
|
+
# https://github.com/puppetlabs/Razor/blob/master/lib/project_razor/version.rb
|
140
|
+
# for an example of that this looks like.
|
141
|
+
#
|
142
|
+
# If you invoke this the version will only be modified in the temporary copy,
|
143
|
+
# with the intent that it never change the official source tree.
|
144
|
+
#
|
145
|
+
# rubocop:disable Metrics/AbcSize
|
146
|
+
# rubocop:disable Metrics/CyclomaticComplexity
|
147
|
+
# rubocop:disable Metrics/PerceivedComplexity
|
148
|
+
def versionbump(workdir = nil)
|
149
|
+
version = ENV['VERSION'] || Pkg::Config.version.to_s.strip
|
150
|
+
new_version = '"' + version + '"'
|
151
|
+
|
152
|
+
version_file = "#{workdir ? workdir + '/' : ''}#{Pkg::Config.version_file}"
|
153
|
+
|
154
|
+
# Read the previous version file in...
|
155
|
+
contents = IO.read(version_file)
|
156
|
+
|
157
|
+
# Match version files containing 'VERSION = "x.x.x"' and just x.x.x
|
158
|
+
if contents =~ /VERSION =.*/
|
159
|
+
old_version = contents.match(/VERSION =.*/).to_s.split[-1]
|
160
|
+
else
|
161
|
+
old_version = contents
|
162
|
+
end
|
163
|
+
|
164
|
+
puts "Updating #{old_version} to #{new_version} in #{version_file}"
|
165
|
+
if contents =~ /@DEVELOPMENT_VERSION@/
|
166
|
+
contents.gsub!('@DEVELOPMENT_VERSION@', version)
|
167
|
+
elsif contents =~ /version\s*=\s*[\'"]DEVELOPMENT[\'"]/
|
168
|
+
contents.gsub!(/version\s*=\s*['"]DEVELOPMENT['"]/, "version = '#{version}'")
|
169
|
+
elsif contents =~ /VERSION = #{old_version}/
|
170
|
+
contents.gsub!("VERSION = #{old_version}", "VERSION = #{new_version}")
|
171
|
+
elsif contents =~ /#{Pkg::Config.project.upcase}VERSION = #{old_version}/
|
172
|
+
contents.gsub!("#{Pkg::Config.project.upcase}VERSION = #{old_version}", "#{Pkg::Config.project.upcase}VERSION = #{new_version}")
|
173
|
+
else
|
174
|
+
contents.gsub!(old_version, Pkg::Config.version)
|
175
|
+
end
|
176
|
+
|
177
|
+
# ...and write it back on out.
|
178
|
+
File.open(version_file, 'w') { |f| f.write contents }
|
179
|
+
end
|
180
|
+
|
181
|
+
# Human readable output for json tags reporting. This will load the
|
182
|
+
# input json file and output if it "looks tagged" or not
|
183
|
+
#
|
184
|
+
# @param json_data [hash] json data hash containing the ref to check
|
185
|
+
def report_json_tags(json_data) # rubocop:disable Metrics/AbcSize
|
186
|
+
puts 'component: ' + File.basename(json_data['url'])
|
187
|
+
puts 'ref: ' + json_data['ref'].to_s
|
188
|
+
if Pkg::Util::Git.remote_tagged?(json_data['url'], json_data['ref'].to_s)
|
189
|
+
tagged = 'Tagged? [ Yes ]'
|
190
|
+
else
|
191
|
+
tagged = 'Tagged? [ No ]'
|
192
|
+
end
|
193
|
+
col_len = (ENV['COLUMNS'] || 70).to_i
|
194
|
+
puts format("\n%#{col_len}s\n\n", tagged)
|
195
|
+
puts '*' * col_len
|
196
|
+
end
|
197
|
+
|
198
|
+
##########################################################################
|
199
|
+
# DEPRECATED METHODS
|
200
|
+
#
|
201
|
+
def git_co(ref)
|
202
|
+
Pkg::Util.deprecate('Pkg::Util::Version.git_co', 'Pkg::Util::Git.checkout')
|
203
|
+
Pkg::Util::Git.checkout(ref)
|
204
|
+
end
|
205
|
+
|
206
|
+
def git_tagged?
|
207
|
+
Pkg::Util.deprecate('Pkg::Util::Version.git_tagged?', 'Pkg::Util::Git.tagged?')
|
208
|
+
Pkg::Util::Git.tagged?
|
209
|
+
end
|
210
|
+
|
211
|
+
def git_describe
|
212
|
+
Pkg::Util.deprecate('Pkg::Util::Version.git_describe', 'Pkg::Util::Git.describe')
|
213
|
+
Pkg::Util::Git.describe
|
214
|
+
end
|
215
|
+
|
216
|
+
def git_sha(length = 40)
|
217
|
+
Pkg::Util.deprecate('Pkg::Util::Version.git_sha', 'Pkg::Util::Git.sha')
|
218
|
+
Pkg::Util::Git.sha(length)
|
219
|
+
end
|
220
|
+
|
221
|
+
def git_ref_type
|
222
|
+
Pkg::Util.deprecate('Pkg::Util::Version.git_ref_type', 'Pkg::Util::Git.ref_type')
|
223
|
+
Pkg::Util::Git.ref_type
|
224
|
+
end
|
225
|
+
|
226
|
+
def git_sha_or_tag(length = 40)
|
227
|
+
Pkg::Util.deprecate('Pkg::Util::Version.git_sha_or_tag', 'Pkg::Util::Git.sha_or_tag')
|
228
|
+
Pkg::Util::Git.sha_or_tag(length)
|
229
|
+
end
|
230
|
+
|
231
|
+
def is_git_repo?
|
232
|
+
Pkg::Util.deprecate('Pkg::Util::Version.is_git_repo?', 'Pkg::Util::Git.repo?')
|
233
|
+
Pkg::Util::Git.repo?
|
234
|
+
end
|
235
|
+
|
236
|
+
def git_project_name
|
237
|
+
Pkg::Util.deprecate('Pkg::Util::Version.git_project_name', 'Pkg::Util::Git.project_name')
|
238
|
+
Pkg::Util::Git.project_name
|
239
|
+
end
|
240
|
+
|
241
|
+
def git_describe_version
|
242
|
+
Pkg::Util.deprecate('Pkg::Util::Version.git_describe_version', 'Pkg::Util::Git.describe')
|
243
|
+
Pkg::Util::Git.describe
|
244
|
+
end
|
245
|
+
|
246
|
+
def run_git_describe_internal
|
247
|
+
Pkg::Util.deprecate('Pkg::Util::Version.git_describe_version', 'Pkg::Util::Git.describe')
|
248
|
+
Pkg::Util::Git.describe
|
249
|
+
end
|
250
|
+
|
251
|
+
def get_dash_version
|
252
|
+
Pkg::Util.deprecate('Pkg::Util::Version.get_dash_version', 'Pkg::Util::Version.dash_version')
|
253
|
+
Pkg::Util::Version.dash_version
|
254
|
+
end
|
255
|
+
|
256
|
+
def get_ips_version
|
257
|
+
raise "The IPS build tasks have been removed from puppetlabs/packaging. Please port all Solaris projects to vanagon (https://github.com/puppetlabs/vanagon)"
|
258
|
+
end
|
259
|
+
|
260
|
+
def get_dot_version
|
261
|
+
Pkg::Util.deprecate('Pkg::Util::Version.get_dot_version', 'Pkg::Util::Version.dot_version')
|
262
|
+
Pkg::Util::Version.dot_version
|
263
|
+
end
|
264
|
+
|
265
|
+
def get_pwd_version
|
266
|
+
Pkg::Util.deprecate('Pkg::Util::Version.get_pwd_version', 'Pkg::Util::Version.pwd_version')
|
267
|
+
Pkg::Util::Version.pwd_version
|
268
|
+
end
|
269
|
+
|
270
|
+
def get_base_pkg_version
|
271
|
+
Pkg::Util.deprecate('Pkg::Util::Version.get_base_pkg_version', 'Pkg::Util::Version.base_pkg_version')
|
272
|
+
Pkg::Util::Version.base_pkg_version
|
273
|
+
end
|
274
|
+
|
275
|
+
def get_debversion
|
276
|
+
Pkg::Util.deprecate('Pkg::Util::Version.get_debversion', 'Pkg::Util::Version.debversion')
|
277
|
+
Pkg::Util::Version.debversion
|
278
|
+
end
|
279
|
+
|
280
|
+
def get_origversion
|
281
|
+
Pkg::Util.deprecate('Pkg::Util::Version.get_origversion', 'Pkg::Util::Version.origversion')
|
282
|
+
Pkg::Util::Version.origversion
|
283
|
+
end
|
284
|
+
|
285
|
+
def get_rpmversion
|
286
|
+
Pkg::Util.deprecate('Pkg::Util::Version.get_rpmversion', 'Pkg::Util::Version.rpmversion')
|
287
|
+
Pkg::Util::Version.rpmversion
|
288
|
+
end
|
289
|
+
|
290
|
+
def get_rpmrelease
|
291
|
+
Pkg::Util.deprecate('Pkg::Util::Version.get_rpmrelease', 'Pkg::Util::Version.rpmrelease')
|
292
|
+
Pkg::Util::Version.rpmrelease
|
293
|
+
end
|
294
|
+
|
295
|
+
def source_dirty?
|
296
|
+
Pkg::Util.deprecate('Pkg::Util::Version.source_dirty?', 'Pkg::Util::Git.source_dirty?')
|
297
|
+
Pkg::Util::Git.source_dirty?
|
298
|
+
end
|
299
|
+
|
300
|
+
def fail_on_dirty_source
|
301
|
+
Pkg::Util.deprecate('Pkg::Util::Version.fail_on_dirty_source', 'Pkg::Util::Git.fail_on_dirty_source')
|
302
|
+
Pkg::Util::Git.fail_on_dirty_source
|
303
|
+
end
|
304
|
+
|
305
|
+
def is_final?
|
306
|
+
Pkg::Util.deprecate('Pkg::Util::Version.is_final?', 'Pkg::Util::Version.final?')
|
307
|
+
Pkg::Util::Version.final?
|
308
|
+
end
|
309
|
+
|
310
|
+
def is_rc?
|
311
|
+
Pkg::Util.deprecate('Pkg::Util::Version.is_rc?', 'Pkg::Util::Version.final?')
|
312
|
+
Pkg::Util::Version.final?
|
313
|
+
end
|
314
|
+
|
315
|
+
def is_odd?
|
316
|
+
Pkg::Util.deprecate('Pkg::Util::Version.is_odd?', 'Pkg::Util::Version.final?')
|
317
|
+
Pkg::Util::Version.final?
|
318
|
+
end
|
319
|
+
|
320
|
+
def is_less_than_one?
|
321
|
+
Pkg::Util.deprecate('Pkg::Util::Version.is_less_than_one?', 'Pkg::Util::Version.final?')
|
322
|
+
Pkg::Util::Version.final?
|
323
|
+
end
|
324
|
+
|
325
|
+
def el_version
|
326
|
+
raise "Pkg::Util::Version.el_version has been removed"
|
327
|
+
end
|
328
|
+
|
329
|
+
def tagged?(url, ref)
|
330
|
+
Pkg::Util.deprecate('Pkg::Util::Version.tagged?', 'Pkg::Util::Git.remote_tagged?')
|
331
|
+
Pkg::Util::Git.remote_tagged?(url, ref)
|
332
|
+
end
|
333
|
+
end
|
334
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
{"url": "git://github.com/puppetlabs/leatherman.git", "ref": "refs/tags/0.6.2"}
|
File without changes
|
@@ -0,0 +1 @@
|
|
1
|
+
{"url": "git://github.com/puppetlabs/leatherman.git", "ref": "4eef05389ebf418b62af17406c7f9f13fa51f975"}
|
File without changes
|
File without changes
|
@@ -0,0 +1,221 @@
|
|
1
|
+
# -*- ruby -*-
|
2
|
+
require 'spec_helper'
|
3
|
+
require 'packaging/artifactory'
|
4
|
+
|
5
|
+
describe 'artifactory.rb' do
|
6
|
+
|
7
|
+
project = 'puppet-agent'
|
8
|
+
project_version = 'ashawithlettersandnumbers'
|
9
|
+
default_repo_name = 'testing'
|
10
|
+
artifactory_uri = 'https://artifactory.url'
|
11
|
+
|
12
|
+
let(:platform_data) {
|
13
|
+
{
|
14
|
+
'el-6-x86_64' => {
|
15
|
+
:artifact => "./el/6/PC1/x86_64/puppet-agent-5.3.1.34.gf65f9ef-1.el6.x86_64.rpm",
|
16
|
+
:repo_config => "../repo_configs/rpm/pl-puppet-agent-f65f9efbb727c3d2d72d6799c0fc345a726f27b5-el-6-x86_64.repo",
|
17
|
+
:additional_artifacts => ["./el/6/PC1/x86_64/puppet-agent-extras-5.3.1.34.gf65f9ef-1.el6.x86_64.rpm"],
|
18
|
+
},
|
19
|
+
'ubuntu-16.04-amd64' => {
|
20
|
+
:artifact => "./deb/xenial/PC1/puppet-agent_5.3.1.34.gf65f9ef-1xenial_amd64.deb",
|
21
|
+
:repo_config => "../repo_configs/deb/pl-puppet-agent-f65f9efbb727c3d2d72d6799c0fc345a726f27b5-xenial.list",
|
22
|
+
:additional_artifacts => ["./deb/xenial/PC1/puppet-agent-extras_5.3.1.34.gf65f9ef-1xenial_amd64.deb"],
|
23
|
+
},
|
24
|
+
'debian-10-amd64' => {
|
25
|
+
:artifact => "./deb/buster/PC1/puppetdb_5.3.1.34.gf65f9ef-1buster_all.deb",
|
26
|
+
:repo_config => "../repo_configs/deb/pl-puppetdb-f65f9efbb727c3d2d72d6799c0fc345a726f27b5-buster.list",
|
27
|
+
:additional_artifacts => ["./deb/buster/PC1/puppetdb-termini_5.3.1.34.gf65f9ef-1buster_all.deb"],
|
28
|
+
},
|
29
|
+
'windows-2012-x86' => {
|
30
|
+
:artifact => "./windows/puppet-agent-5.3.1.34-x86.msi",
|
31
|
+
:repo_config => '',
|
32
|
+
:additional_artifacts => ["./windows/puppet-agent-extras-5.3.1.34-x86.msi"],
|
33
|
+
},
|
34
|
+
'windowsfips-2012-x64' => {
|
35
|
+
:artifact => "./windowsfips/puppet-agent-5.3.1.34-x64.msi",
|
36
|
+
:repo_config => '',
|
37
|
+
:additional_artifacts => ["./windowsfips/puppet-agent-extras-5.3.1.34-x64.msi"],
|
38
|
+
},
|
39
|
+
'osx-10.15-x86_64' => {
|
40
|
+
:artifact => "./apple/10.15/PC1/x86_64/puppet-agent-5.3.1.34.gf65f9ef-1.osx10.15.dmg",
|
41
|
+
:repo_config => '',
|
42
|
+
:additional_artifacts => ["./apple/10.15/PC1/x86_64/puppet-agent-extras-5.3.1.34.gf65f9ef-1.osx10.15.dmg"],
|
43
|
+
},
|
44
|
+
'osx-11-x86_64' => {
|
45
|
+
:artifact => "./apple/11/PC1/x86_64/puppet-agent-5.3.1.34.gf65f9ef-1.osx11.dmg",
|
46
|
+
:repo_config => '',
|
47
|
+
:additional_artifacts => ["./apple/11/PC1/x86_64/puppet-agent-extras-5.3.1.34.gf65f9ef-1.osx11.dmg"],
|
48
|
+
},
|
49
|
+
'solaris-10-sparc' => {
|
50
|
+
:artifact => "./solaris/10/PC1/puppet-agent-5.3.1.34.gf65f9ef-1.sparc.pkg.gz",
|
51
|
+
:repo_config => '',
|
52
|
+
},
|
53
|
+
}
|
54
|
+
}
|
55
|
+
|
56
|
+
platform_tags = {
|
57
|
+
'el-6-x86_64' => {
|
58
|
+
:toplevel_repo => 'rpm',
|
59
|
+
:repo_subdirectories => "#{default_repo_name}/#{project}/#{project_version}/el-6-x86_64",
|
60
|
+
:package_format => 'rpm',
|
61
|
+
:package_name => 'path/to/a/el/6/package/puppet-agent-5.3.1.34.gf65f9ef-1.el6.x86_64.rpm',
|
62
|
+
:all_package_names => ['puppet-agent-5.3.1.34.gf65f9ef-1.el6.x86_64.rpm', 'puppet-agent-extras-5.3.1.34.gf65f9ef-1.el6.x86_64.rpm']
|
63
|
+
},
|
64
|
+
'ubuntu-16.04-amd64' => {
|
65
|
+
:toplevel_repo => 'debian__local',
|
66
|
+
:repo_subdirectories => "#{default_repo_name}/#{project}/#{project_version}/ubuntu-16.04",
|
67
|
+
:codename => 'xenial',
|
68
|
+
:arch => 'amd64',
|
69
|
+
:package_name => 'path/to/a/xenial/package/puppet-agent_5.3.1.34.gf65f9ef-1xenial_amd64.deb',
|
70
|
+
:all_package_names => ['puppet-agent_5.3.1.34.gf65f9ef-1xenial_amd64.deb', 'puppet-agent-extras_5.3.1.34.gf65f9ef-1xenial_amd64.deb']
|
71
|
+
},
|
72
|
+
'debian-10-amd64' => {
|
73
|
+
:toplevel_repo => 'debian__local',
|
74
|
+
:repo_subdirectories => "#{default_repo_name}/#{project}/#{project_version}/debian-10",
|
75
|
+
:codename => 'buster',
|
76
|
+
:arch => 'all',
|
77
|
+
:package_name => 'path/to/a/buster/package/puppetdb_5.3.1.34.gf65f9ef-1buster_all.deb',
|
78
|
+
:all_package_names => ['puppetdb_5.3.1.34.gf65f9ef-1buster_all.deb', 'puppetdb-termini_5.3.1.34.gf65f9ef-1buster_all.deb']
|
79
|
+
},
|
80
|
+
'windows-2012-x86' => {
|
81
|
+
:toplevel_repo => 'generic',
|
82
|
+
:repo_subdirectories => "#{default_repo_name}/#{project}/#{project_version}/windows-x86",
|
83
|
+
:package_name => 'path/to/a/windows/package/puppet-agent-5.3.1.34-x86.msi',
|
84
|
+
:all_package_names => ['puppet-agent-5.3.1.34-x86.msi','puppet-agent-extras-5.3.1.34-x86.msi']
|
85
|
+
},
|
86
|
+
'windowsfips-2012-x64' => {
|
87
|
+
:toplevel_repo => 'generic',
|
88
|
+
:repo_subdirectories => "#{default_repo_name}/#{project}/#{project_version}/windowsfips-x64",
|
89
|
+
:package_name => 'path/to/a/windowsfips/package/puppet-agent-5.3.1.34-x64.msi',
|
90
|
+
:all_package_names => ['puppet-agent-5.3.1.34-x64.msi','puppet-agent-extras-5.3.1.34-x64.msi']
|
91
|
+
},
|
92
|
+
'osx-10.15-x86_64' => {
|
93
|
+
:toplevel_repo => 'generic',
|
94
|
+
:repo_subdirectories => "#{default_repo_name}/#{project}/#{project_version}/osx-10.15-x86_64",
|
95
|
+
:package_name => 'path/to/an/osx/10.15/package/puppet-agent-5.3.1.34.gf65f9ef-1.osx10.15.dmg',
|
96
|
+
:all_package_names => ['puppet-agent-5.3.1.34.gf65f9ef-1.osx10.15.dmg', 'puppet-agent-extras-5.3.1.34.gf65f9ef-1.osx10.15.dmg']
|
97
|
+
},
|
98
|
+
'osx-11-x86_64' => {
|
99
|
+
:toplevel_repo => 'generic',
|
100
|
+
:repo_subdirectories => "#{default_repo_name}/#{project}/#{project_version}/osx-11-x86_64",
|
101
|
+
:package_name => 'path/to/an/osx/11/package/puppet-agent-5.3.1.34.gf65f9ef-1.osx11.dmg',
|
102
|
+
:all_package_names => ['puppet-agent-5.3.1.34.gf65f9ef-1.osx11.dmg', 'puppet-agent-extras-5.3.1.34.gf65f9ef-1.osx11.dmg']
|
103
|
+
},
|
104
|
+
'solaris-10-sparc' => {
|
105
|
+
:toplevel_repo => 'generic',
|
106
|
+
:repo_subdirectories => "#{default_repo_name}/#{project}/#{project_version}/solaris-10-sparc",
|
107
|
+
:package_name => 'path/to/a/solaris/10/package/puppet-agent-5.3.1.34.gf65f9ef-1.sparc.pkg.gz',
|
108
|
+
:all_package_names => ['puppet-agent-5.3.1.34.gf65f9ef-1.sparc.pkg.gz']
|
109
|
+
},
|
110
|
+
}
|
111
|
+
|
112
|
+
let(:artifact) { Pkg::ManageArtifactory.new(project, project_version, {:repo_base => default_repo_name, :artifactory_uri => artifactory_uri})}
|
113
|
+
|
114
|
+
around(:each) do |example|
|
115
|
+
original_artifactory_api_key = ENV['ARTIFACTORY_API_KEY']
|
116
|
+
ENV['ARTIFACTORY_API_KEY'] = 'anapikeythatdefinitelyworks'
|
117
|
+
example.run
|
118
|
+
ENV['ARTIFACTORY_API_KEY'] = original_artifactory_api_key
|
119
|
+
end
|
120
|
+
|
121
|
+
platform_tags.each do |platform_tag, platform_tag_data|
|
122
|
+
describe '#location_for' do
|
123
|
+
if platform_tag_data[:codename]
|
124
|
+
it 'returns the expected repo name and paths by default, prepending `pool` for debian-ish platforms' do
|
125
|
+
expect(artifact.location_for(platform_tag)).to match_array([
|
126
|
+
platform_tag_data[:toplevel_repo],
|
127
|
+
platform_tag_data[:repo_subdirectories],
|
128
|
+
])
|
129
|
+
end
|
130
|
+
else
|
131
|
+
it 'returns the expected repo name and paths by default' do
|
132
|
+
expect(artifact.location_for(platform_tag)).to match_array([
|
133
|
+
platform_tag_data[:toplevel_repo],
|
134
|
+
platform_tag_data[:repo_subdirectories],
|
135
|
+
])
|
136
|
+
end
|
137
|
+
end
|
138
|
+
|
139
|
+
it 'returns the correct paths for the passed in format' do
|
140
|
+
expect(artifact.location_for('generic')).to match_array([
|
141
|
+
'generic',
|
142
|
+
File.join(default_repo_name, project, project_version),
|
143
|
+
])
|
144
|
+
end
|
145
|
+
end
|
146
|
+
|
147
|
+
describe '#package_name' do
|
148
|
+
it 'parses the retrieved yaml file and returns the correct package name' do
|
149
|
+
expect(artifact.package_name(platform_data, platform_tag)).to eq(File.basename(platform_tag_data[:package_name]))
|
150
|
+
end
|
151
|
+
|
152
|
+
it 'fails if it cannot find a valid platform name' do
|
153
|
+
new_platform_data = platform_data
|
154
|
+
new_platform_data.delete_if { |k| k.match(platform_tag) }
|
155
|
+
expect{artifact.package_name(new_platform_data, platform_tag)}.to raise_error
|
156
|
+
end
|
157
|
+
end
|
158
|
+
|
159
|
+
describe '#all_package_names' do
|
160
|
+
it 'parses the retrieved yaml file and returns the correct package name' do
|
161
|
+
all_package_names = artifact.all_package_names(platform_data, platform_tag)
|
162
|
+
all_package_names_data = [platform_tag_data[:additional_artifacts], platform_tag_data[:all_package_names]].flatten.compact
|
163
|
+
all_package_names.map! { |p| File.basename(p) }
|
164
|
+
all_package_names_data.map! { |p| File.basename(p) }
|
165
|
+
expect(all_package_names.size).to eq(all_package_names_data.size)
|
166
|
+
expect(all_package_names.sort).to eq(all_package_names_data.sort)
|
167
|
+
end
|
168
|
+
|
169
|
+
it 'fails if it cannot find a valid platform name' do
|
170
|
+
new_platform_data = platform_data
|
171
|
+
new_platform_data.delete_if { |k| k.match(platform_tag) }
|
172
|
+
expect{artifact.package_name(new_platform_data, platform_tag)}.to raise_error
|
173
|
+
end
|
174
|
+
end
|
175
|
+
|
176
|
+
describe '#deb_list_contents' do
|
177
|
+
it "returns the correct contents for the debian list file for #{platform_tag}" do
|
178
|
+
if platform_tag_data[:codename]
|
179
|
+
expect(artifact.deb_list_contents(platform_tag)).to eq("deb #{artifactory_uri}/#{platform_tag_data[:toplevel_repo].chomp('/pool')} #{platform_tag_data[:codename]} #{platform_tag_data[:repo_subdirectories]}")
|
180
|
+
else
|
181
|
+
expect{artifact.deb_list_contents(platform_tag)}.to raise_error
|
182
|
+
end
|
183
|
+
end
|
184
|
+
end
|
185
|
+
|
186
|
+
describe '#rpm_repo_contents' do
|
187
|
+
it "returns the correct contents for the rpm repo file for #{platform_tag}" do
|
188
|
+
if platform_tag_data[:package_format] == 'rpm'
|
189
|
+
expect(artifact.rpm_repo_contents(platform_tag)).to include("baseurl=#{artifactory_uri}\/#{platform_tag_data[:toplevel_repo]}\/#{platform_tag_data[:repo_subdirectories]}")
|
190
|
+
else
|
191
|
+
expect{artifact.rpm_repo_contents(platform_tag)}.to raise_error
|
192
|
+
end
|
193
|
+
end
|
194
|
+
end
|
195
|
+
|
196
|
+
describe '#deploy_properties' do
|
197
|
+
it "returns the correct contents for the deploy properties for #{platform_tag}" do
|
198
|
+
if platform_tag_data[:codename]
|
199
|
+
expect(artifact.deploy_properties(platform_tag, File.basename(platform_tag_data[:package_name]))).to include({
|
200
|
+
'deb.distribution' => platform_tag_data[:codename],
|
201
|
+
'deb.component' => platform_tag_data[:repo_subdirectories],
|
202
|
+
'deb.architecture' => platform_tag_data[:arch]
|
203
|
+
})
|
204
|
+
else
|
205
|
+
expect(artifact.deploy_properties(platform_tag, File.basename(platform_tag_data[:package_name]))).not_to include({
|
206
|
+
'deb.component' => platform_tag_data[:repo_subdirectories]
|
207
|
+
})
|
208
|
+
end
|
209
|
+
end
|
210
|
+
end
|
211
|
+
end
|
212
|
+
|
213
|
+
describe '#check_authorization' do
|
214
|
+
it 'fails gracefully if authorization is not set' do
|
215
|
+
original_artifactory_api_key = ENV['ARTIFACTORY_API_KEY']
|
216
|
+
ENV['ARTIFACTORY_API_KEY'] = nil
|
217
|
+
expect { artifact.deploy_package('path/to/el/7/x86_64/package.rpm') }.to raise_error
|
218
|
+
ENV['ARTIFACTORY_API_KEY'] = original_artifactory_api_key
|
219
|
+
end
|
220
|
+
end
|
221
|
+
end
|