packaging 0.88.77

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.
Files changed (123) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +17 -0
  3. data/README-Solaris.md +117 -0
  4. data/README.md +977 -0
  5. data/lib/packaging.rb +32 -0
  6. data/lib/packaging/archive.rb +126 -0
  7. data/lib/packaging/artifactory.rb +651 -0
  8. data/lib/packaging/artifactory/extensions.rb +94 -0
  9. data/lib/packaging/config.rb +492 -0
  10. data/lib/packaging/config/params.rb +387 -0
  11. data/lib/packaging/config/validations.rb +13 -0
  12. data/lib/packaging/deb.rb +28 -0
  13. data/lib/packaging/deb/repo.rb +264 -0
  14. data/lib/packaging/gem.rb +70 -0
  15. data/lib/packaging/metrics.rb +15 -0
  16. data/lib/packaging/nuget.rb +39 -0
  17. data/lib/packaging/paths.rb +376 -0
  18. data/lib/packaging/platforms.rb +507 -0
  19. data/lib/packaging/repo.rb +155 -0
  20. data/lib/packaging/retrieve.rb +75 -0
  21. data/lib/packaging/rpm.rb +5 -0
  22. data/lib/packaging/rpm/repo.rb +254 -0
  23. data/lib/packaging/sign.rb +8 -0
  24. data/lib/packaging/sign/deb.rb +9 -0
  25. data/lib/packaging/sign/dmg.rb +41 -0
  26. data/lib/packaging/sign/ips.rb +57 -0
  27. data/lib/packaging/sign/msi.rb +124 -0
  28. data/lib/packaging/sign/rpm.rb +115 -0
  29. data/lib/packaging/tar.rb +163 -0
  30. data/lib/packaging/util.rb +146 -0
  31. data/lib/packaging/util/date.rb +20 -0
  32. data/lib/packaging/util/execution.rb +85 -0
  33. data/lib/packaging/util/file.rb +125 -0
  34. data/lib/packaging/util/git.rb +174 -0
  35. data/lib/packaging/util/git_tags.rb +73 -0
  36. data/lib/packaging/util/gpg.rb +66 -0
  37. data/lib/packaging/util/jenkins.rb +95 -0
  38. data/lib/packaging/util/misc.rb +69 -0
  39. data/lib/packaging/util/net.rb +410 -0
  40. data/lib/packaging/util/os.rb +17 -0
  41. data/lib/packaging/util/platform.rb +40 -0
  42. data/lib/packaging/util/rake_utils.rb +112 -0
  43. data/lib/packaging/util/serialization.rb +19 -0
  44. data/lib/packaging/util/ship.rb +300 -0
  45. data/lib/packaging/util/tool.rb +41 -0
  46. data/lib/packaging/util/version.rb +334 -0
  47. data/spec/fixtures/config/ext/build_defaults.yaml +2 -0
  48. data/spec/fixtures/config/ext/project_data.yaml +2 -0
  49. data/spec/fixtures/configs/components/test_file.json +1 -0
  50. data/spec/fixtures/configs/components/test_file_2.json +0 -0
  51. data/spec/fixtures/configs/components/test_file_not_tagged.json +1 -0
  52. data/spec/fixtures/configs/components/test_file_wrong_ext.txt +0 -0
  53. data/spec/fixtures/configs/components/test_file_wrong_ext.wrong +0 -0
  54. data/spec/fixtures/util/pre_tasks.yaml +4 -0
  55. data/spec/lib/packaging/artifactory_spec.rb +221 -0
  56. data/spec/lib/packaging/config_spec.rb +576 -0
  57. data/spec/lib/packaging/deb/repo_spec.rb +157 -0
  58. data/spec/lib/packaging/deb_spec.rb +52 -0
  59. data/spec/lib/packaging/gem_spec.rb +86 -0
  60. data/spec/lib/packaging/paths_spec.rb +418 -0
  61. data/spec/lib/packaging/platforms_spec.rb +178 -0
  62. data/spec/lib/packaging/repo_spec.rb +135 -0
  63. data/spec/lib/packaging/retrieve_spec.rb +100 -0
  64. data/spec/lib/packaging/rpm/repo_spec.rb +133 -0
  65. data/spec/lib/packaging/sign_spec.rb +133 -0
  66. data/spec/lib/packaging/tar_spec.rb +116 -0
  67. data/spec/lib/packaging/util/execution_spec.rb +56 -0
  68. data/spec/lib/packaging/util/file_spec.rb +139 -0
  69. data/spec/lib/packaging/util/git_spec.rb +160 -0
  70. data/spec/lib/packaging/util/git_tag_spec.rb +36 -0
  71. data/spec/lib/packaging/util/gpg_spec.rb +64 -0
  72. data/spec/lib/packaging/util/jenkins_spec.rb +112 -0
  73. data/spec/lib/packaging/util/misc_spec.rb +31 -0
  74. data/spec/lib/packaging/util/net_spec.rb +259 -0
  75. data/spec/lib/packaging/util/os_spec.rb +31 -0
  76. data/spec/lib/packaging/util/rake_utils_spec.rb +70 -0
  77. data/spec/lib/packaging/util/ship_spec.rb +199 -0
  78. data/spec/lib/packaging/util/version_spec.rb +123 -0
  79. data/spec/lib/packaging_spec.rb +19 -0
  80. data/spec/spec_helper.rb +22 -0
  81. data/static_artifacts/PackageInfo.plist +3 -0
  82. data/tasks/00_utils.rake +214 -0
  83. data/tasks/30_metrics.rake +33 -0
  84. data/tasks/apple.rake +268 -0
  85. data/tasks/archive.rake +69 -0
  86. data/tasks/build.rake +12 -0
  87. data/tasks/clean.rake +5 -0
  88. data/tasks/config.rake +35 -0
  89. data/tasks/deb.rake +129 -0
  90. data/tasks/deb_repos.rake +28 -0
  91. data/tasks/deprecated.rake +130 -0
  92. data/tasks/doc.rake +20 -0
  93. data/tasks/education.rake +57 -0
  94. data/tasks/fetch.rake +60 -0
  95. data/tasks/gem.rake +159 -0
  96. data/tasks/jenkins.rake +538 -0
  97. data/tasks/jenkins_dynamic.rake +202 -0
  98. data/tasks/load_extras.rake +21 -0
  99. data/tasks/mock.rake +348 -0
  100. data/tasks/nightly_repos.rake +286 -0
  101. data/tasks/pe_deb.rake +12 -0
  102. data/tasks/pe_rpm.rake +13 -0
  103. data/tasks/pe_ship.rake +226 -0
  104. data/tasks/pe_sign.rake +13 -0
  105. data/tasks/pe_tar.rake +5 -0
  106. data/tasks/retrieve.rake +52 -0
  107. data/tasks/rpm.rake +66 -0
  108. data/tasks/rpm_repos.rake +29 -0
  109. data/tasks/ship.rake +692 -0
  110. data/tasks/sign.rake +154 -0
  111. data/tasks/tag.rake +8 -0
  112. data/tasks/tar.rake +28 -0
  113. data/tasks/update.rake +16 -0
  114. data/tasks/vanagon.rake +35 -0
  115. data/tasks/vendor_gems.rake +117 -0
  116. data/tasks/version.rake +33 -0
  117. data/tasks/z_data_dump.rake +65 -0
  118. data/templates/README +1 -0
  119. data/templates/downstream.xml.erb +47 -0
  120. data/templates/msi.xml.erb +197 -0
  121. data/templates/packaging.xml.erb +346 -0
  122. data/templates/repo.xml.erb +117 -0
  123. metadata +287 -0
@@ -0,0 +1,507 @@
1
+ require 'set'
2
+
3
+ # Data plus utilities surrounding platforms that the automation in this repo
4
+ # explicitly supports
5
+ module Pkg
6
+ module Platforms
7
+
8
+ module_function
9
+
10
+ DEBIAN_SOURCE_FORMATS = ['debian.tar.gz', 'orig.tar.gz', 'dsc', 'changes']
11
+
12
+ # Each element in this hash
13
+ PLATFORM_INFO = {
14
+ 'aix' => {
15
+ '7.1' => {
16
+ architectures: ['power'],
17
+ source_architecture: 'SRPMS',
18
+ package_format: 'rpm',
19
+ source_package_formats: ['src.rpm'],
20
+ repo: false,
21
+ },
22
+ },
23
+
24
+ 'debian' => {
25
+ '8' => {
26
+ codename: 'jessie',
27
+ architectures: ['amd64', 'i386', 'powerpc'],
28
+ source_architecture: 'source',
29
+ package_format: 'deb',
30
+ source_package_formats: DEBIAN_SOURCE_FORMATS,
31
+ repo: true,
32
+ },
33
+ '9' => {
34
+ codename: 'stretch',
35
+ architectures: ['amd64', 'i386'],
36
+ source_architecture: 'source',
37
+ package_format: 'deb',
38
+ source_package_formats: DEBIAN_SOURCE_FORMATS,
39
+ repo: true,
40
+ },
41
+ '10' => {
42
+ codename: 'buster',
43
+ architectures: ['amd64', 'i386'],
44
+ source_architecture: 'source',
45
+ package_format: 'deb',
46
+ source_package_formats: DEBIAN_SOURCE_FORMATS,
47
+ repo: true,
48
+ },
49
+ },
50
+
51
+ 'el' => {
52
+ '5' => {
53
+ architectures: ['x86_64', 'i386'],
54
+ source_architecture: 'SRPMS',
55
+ package_format: 'rpm',
56
+ source_package_formats: ['src.rpm'],
57
+ signature_format: 'v3',
58
+ repo: true,
59
+ },
60
+ '6' => {
61
+ architectures: ['x86_64', 'i386'],
62
+ source_architecture: 'SRPMS',
63
+ package_format: 'rpm',
64
+ source_package_formats: ['src.rpm'],
65
+ signature_format: 'v4',
66
+ repo: true,
67
+ },
68
+ '7' => {
69
+ architectures: ['x86_64', 'ppc64le', 'aarch64'],
70
+ source_architecture: 'SRPMS',
71
+ package_format: 'rpm',
72
+ source_package_formats: ['src.rpm'],
73
+ signature_format: 'v4',
74
+ repo: true,
75
+ },
76
+ '8' => {
77
+ architectures: ['x86_64', 'ppc64le', 'aarch64'],
78
+ source_architecture: 'SRPMS',
79
+ package_format: 'rpm',
80
+ source_package_formats: ['src.rpm'],
81
+ signature_format: 'v4',
82
+ repo: true,
83
+ }
84
+ },
85
+
86
+ 'fedora' => {
87
+ '30' => {
88
+ architectures: ['x86_64'],
89
+ source_architecture: 'SRPMS',
90
+ package_format: 'rpm',
91
+ source_package_formats: ['src.rpm'],
92
+ signature_format: 'v4',
93
+ repo: true,
94
+ },
95
+ '31' => {
96
+ architectures: ['x86_64'],
97
+ source_architecture: 'SRPMS',
98
+ package_format: 'rpm',
99
+ source_package_formats: ['src.rpm'],
100
+ signature_format: 'v4',
101
+ repo: true,
102
+ },
103
+ '32' => {
104
+ architectures: ['x86_64'],
105
+ source_architecture: 'SRPMS',
106
+ package_format: 'rpm',
107
+ source_package_formats: ['src.rpm'],
108
+ signature_format: 'v4',
109
+ repo: true,
110
+ },
111
+ '34' => {
112
+ architectures: ['x86_64'],
113
+ source_architecture: 'SRPMS',
114
+ package_format: 'rpm',
115
+ source_package_formats: ['src.rpm'],
116
+ signature_format: 'v4',
117
+ repo: true,
118
+ },
119
+ },
120
+
121
+ 'osx' => {
122
+ '10.13' => {
123
+ architectures: ['x86_64'],
124
+ package_format: 'dmg',
125
+ repo: false,
126
+ },
127
+ '10.14' => {
128
+ architectures: ['x86_64'],
129
+ package_format: 'dmg',
130
+ repo: false,
131
+ },
132
+ '10.15' => {
133
+ architectures: ['x86_64'],
134
+ package_format: 'dmg',
135
+ repo: false,
136
+ },
137
+ '11' => {
138
+ architectures: ['x86_64'],
139
+ package_format: 'dmg',
140
+ repo: false,
141
+ },
142
+ },
143
+
144
+ 'redhatfips' => {
145
+ '7' => {
146
+ architectures: ['x86_64'],
147
+ source_architecture: 'SRPMS',
148
+ package_format: 'rpm',
149
+ source_package_formats: ['src.rpm'],
150
+ signature_format: 'v3',
151
+ repo: true,
152
+ }
153
+ },
154
+
155
+ 'sles' => {
156
+ '11' => {
157
+ architectures: ['x86_64', 'i386'],
158
+ source_architecture: 'SRPMS',
159
+ package_format: 'rpm',
160
+ source_package_formats: ['src.rpm'],
161
+ signature_format: 'v3',
162
+ repo: true,
163
+ },
164
+ '12' => {
165
+ architectures: ['x86_64', 'ppc64le'],
166
+ source_architecture: 'SRPMS',
167
+ package_format: 'rpm',
168
+ source_package_formats: ['src.rpm'],
169
+ signature_format: 'v4',
170
+ repo: true,
171
+ },
172
+ '15' => {
173
+ architectures: ['x86_64', 'ppc64le'],
174
+ source_architecture: 'SRPMS',
175
+ package_format: 'rpm',
176
+ source_package_formats: ['src.rpm'],
177
+ signature_format: 'v4',
178
+ repo: true,
179
+ },
180
+ },
181
+
182
+ 'solaris' => {
183
+ '10' => {
184
+ architectures: ['i386', 'sparc'],
185
+ package_format: 'svr4',
186
+ repo: false,
187
+ },
188
+ '11' => {
189
+ architectures: ['i386', 'sparc'],
190
+ package_format: 'ips',
191
+ repo: false,
192
+ },
193
+ },
194
+
195
+ 'ubuntu' => {
196
+ '14.04' => {
197
+ codename: 'trusty',
198
+ architectures: ['amd64', 'i386'],
199
+ source_architecture: 'source',
200
+ package_format: 'deb',
201
+ source_package_formats: DEBIAN_SOURCE_FORMATS,
202
+ repo: true,
203
+ },
204
+ '16.04' => {
205
+ codename: 'xenial',
206
+ architectures: ['amd64', 'i386', 'ppc64el'],
207
+ source_architecture: 'source',
208
+ package_format: 'deb',
209
+ source_package_formats: DEBIAN_SOURCE_FORMATS,
210
+ repo: true,
211
+ },
212
+ '18.04' => {
213
+ codename: 'bionic',
214
+ architectures: ['amd64', 'ppc64el'],
215
+ source_architecture: 'source',
216
+ package_format: 'deb',
217
+ source_package_formats: DEBIAN_SOURCE_FORMATS,
218
+ repo: true,
219
+ },
220
+ '18.10' => {
221
+ codename: 'cosmic',
222
+ architectures: ['amd64', 'ppc64el'],
223
+ source_architecture: 'source',
224
+ package_format: 'deb',
225
+ source_package_formats: DEBIAN_SOURCE_FORMATS,
226
+ repo: true,
227
+ },
228
+ '20.04' => {
229
+ codename: 'focal',
230
+ architectures: ['amd64', 'aarch64'],
231
+ source_architecture: 'source',
232
+ package_format: 'deb',
233
+ source_package_formats: DEBIAN_SOURCE_FORMATS,
234
+ repo: true,
235
+ },
236
+ },
237
+
238
+ 'windows' => {
239
+ '2012' => {
240
+ architectures: ['x86', 'x64'],
241
+ package_format: 'msi',
242
+ repo: false,
243
+ }
244
+ },
245
+ 'windowsfips' => {
246
+ '2012' => {
247
+ architectures: ['x64'],
248
+ package_format: 'msi',
249
+ repo: false,
250
+ }
251
+ },
252
+ }.freeze
253
+
254
+ # @return [Array] An array of Strings, containing all of the supported
255
+ # platforms as defined in PLATFORM_INFO
256
+ def supported_platforms
257
+ PLATFORM_INFO.keys
258
+ end
259
+
260
+ # @return [Array] An Array of Strings, containing all the supported
261
+ # versions for the given platform
262
+ def versions_for_platform(platform)
263
+ PLATFORM_INFO[platform].keys
264
+ rescue
265
+ raise "No information found for '#{platform}'"
266
+ end
267
+
268
+ # @param platform_tag [String] May be either the two or three unit string
269
+ # that corresponds to a platform in the form of platform-version or
270
+ # platform-version-arch.
271
+ # @return [Array] An array of three elements: the platform name, the platform
272
+ # version, and the architecture. If the architecture was not included in
273
+ # the original platform tag, then nil is returned in place of the
274
+ # architecture
275
+ def parse_platform_tag(platform_tag)
276
+ platform_elements = platform_tag.split('-')
277
+
278
+ # Look for platform. This is probably the only place where we have to look
279
+ # for a combination of elements rather than a single element
280
+ platform = (platform_elements & supported_platforms).first
281
+ codename = (platform_elements & codenames).first
282
+
283
+ # This is probably a bad assumption, but I'm assuming if we find a codename,
284
+ # that's more reliable as it's less likely to give us a false match
285
+ if codename
286
+ platform, version = codename_to_platform_version(codename)
287
+ end
288
+
289
+ # There's a possibility that the platform name has a dash in it, in which
290
+ # case, our assumption that it's an element of the above array is false,
291
+ # since it would be a combination of elements in that array
292
+ platform ||= supported_platforms.find { |p| platform_tag =~ /#{p}-/ }
293
+
294
+ version ||= (platform_elements & versions_for_platform(platform)).first
295
+
296
+
297
+ # For platform names with a dash in them, because everything is special
298
+ supported_arches = arches_for_platform_version(platform, version, true)
299
+ architecture = platform_tag.sub(/^(#{platform}-#{version}|#{codename})-?/, '')
300
+
301
+ fail unless supported_arches.include?(architecture) || architecture.empty?
302
+
303
+ # AIX uses 'ppc' as its architecture in paths and file names
304
+ architecture = 'ppc' if platform == 'aix'
305
+ return [platform, version, architecture]
306
+ rescue
307
+ raise "Could not verify that '#{platform_tag}' is a valid tag"
308
+ end
309
+
310
+ # @param platform_tag [String] May be either the two or three unit string
311
+ # that corresponds to a platform in the form of platform-version or
312
+ # platform-version-arch
313
+ # @return [Hash] The hash of data associated with the given platform version
314
+ def platform_lookup(platform_tag)
315
+ platform, version, _ = parse_platform_tag(platform_tag)
316
+ PLATFORM_INFO[platform][version]
317
+ end
318
+
319
+ # @param platform_tag [String] May be either the two or three unit string
320
+ # that corresponds to a platform in the form of platform-version or
321
+ # platform-version-arch
322
+ # @param attribute_name [String, Symbol] The name of the requested attribute
323
+ # @return [String, Array] the contents of the requested attribute
324
+ def get_attribute(platform_tag, attribute_name)
325
+ info = platform_lookup(platform_tag)
326
+ raise "#{platform_tag} doesn't have information about #{attribute_name} available" unless info.key?(attribute_name)
327
+ info[attribute_name]
328
+ end
329
+
330
+ def get_attribute_for_platform_version(platform, version, attribute_name)
331
+ info = PLATFORM_INFO[platform][version]
332
+ raise "#{platform_tag} doesn't have information about #{attribute_name} available" unless info.key?(attribute_name)
333
+ info[attribute_name]
334
+ end
335
+
336
+ # @private List platforms that use a given package format
337
+ # @param format [String] The name of the packaging format to filter on
338
+ # @return [Array] An Array of Strings, containing all platforms that
339
+ # use <format> for their packages
340
+ def by_package_format(format)
341
+ PLATFORM_INFO.keys.select do |key|
342
+ formats = PLATFORM_INFO[key].values.collect { |v| v[:package_format] }
343
+ formats.include? format
344
+ end
345
+ end
346
+
347
+ # @return [Array] An Array of Strings, containing all of the package
348
+ # formats defined in Pkg::Platforms
349
+ def formats
350
+ fmts = PLATFORM_INFO.flat_map do |_, p|
351
+ p.collect do |_, r|
352
+ r[:package_format]
353
+ end
354
+ end
355
+ fmts.to_set.sort
356
+ end
357
+
358
+ # @return [Array] An Array of Strings, containing all the package formats
359
+ # and source package formats defined in Pkg::Platforms
360
+ def all_supported_package_formats
361
+ fmts = formats
362
+ source_fmts = PLATFORM_INFO.flat_map do |_, p|
363
+ p.collect do |_, r|
364
+ r[:source_package_formats]
365
+ end
366
+ end
367
+
368
+ (fmts + source_fmts).flatten.compact.uniq.to_set.sort
369
+ end
370
+
371
+ # @param platform [String] Optional, the platform to list all codenames for.
372
+ # Defaults to 'deb'
373
+ # @return [Array] An Array of Strings, containing all of the codenames
374
+ # defined for a given Platform
375
+ def codenames(platform = 'deb')
376
+ releases = by_package_format(platform).flat_map do |p|
377
+ PLATFORM_INFO[p].values.collect { |r| r[:codename] }
378
+ end
379
+ releases.sort
380
+ end
381
+
382
+ # Given a debian codename, return the platform and version it corresponds to
383
+ def codename_to_platform_version(codename)
384
+ PLATFORM_INFO.each do |platform, platform_versions|
385
+ platform_versions.each do |version, info|
386
+ return [platform, version] if info[:codename] && codename == info[:codename]
387
+ end
388
+ end
389
+ raise "Unable to find a platform and version for '#{codename}'"
390
+ end
391
+
392
+ # Given a debian platform and version, return the codename that corresponds to
393
+ # the set
394
+ def codename_for_platform_version(platform, version)
395
+ get_attribute_for_platform_version(platform, version, :codename)
396
+ end
397
+
398
+ # Given a debian codename, return the arches that we build for that codename
399
+ def arches_for_codename(codename, include_source = false)
400
+ platform, version = codename_to_platform_version(codename)
401
+ arches_for_platform_version(platform, version, include_source)
402
+ end
403
+
404
+ # Given a codename, return an array of associated tags
405
+ def codename_to_tags(codename)
406
+ platform_tags = []
407
+ platform, version = codename_to_platform_version(codename)
408
+ arches_for_codename(codename).each do |arch|
409
+ platform_tags << "#{platform}-#{version}-#{arch}"
410
+ end
411
+ platform_tags
412
+ end
413
+
414
+ # Given a platform and version, return the arches that we build for that
415
+ # platform
416
+ def arches_for_platform_version(platform, version, include_source = false)
417
+ platform_architectures = get_attribute_for_platform_version(platform, version, :architectures)
418
+ # get_attribute_for_platform_version will raise an exception if the attribute
419
+ # isn't found. We don't want this to be a fatal error, we just want to append
420
+ # the source architecture if it's found
421
+ source_architecture = []
422
+ if include_source
423
+ begin
424
+ source_architecture = Array(get_attribute_for_platform_version(platform, version, :source_architecture))
425
+ rescue
426
+ end
427
+ end
428
+ return (platform_architectures + source_architecture).flatten
429
+ end
430
+
431
+ # Returns an array of all currently valid platform tags
432
+ def platform_tags
433
+ tags = []
434
+ PLATFORM_INFO.each do |platform, platform_versions|
435
+ platform_versions.each do |version, info|
436
+ info[:architectures].each do |arch|
437
+ tags << "#{platform}-#{version}-#{arch}"
438
+ end
439
+ end
440
+ end
441
+ tags
442
+ end
443
+
444
+ def package_format_for_tag(platform_tag)
445
+ get_attribute(platform_tag, :package_format)
446
+ end
447
+
448
+ def signature_format_for_tag(platform_tag)
449
+ get_attribute(platform_tag, :signature_format)
450
+ end
451
+
452
+ def signature_format_for_platform_version(platform, version)
453
+ get_attribute_for_platform_version(platform, version, :signature_format)
454
+ end
455
+
456
+ def source_architecture_for_platform_tag(platform_tag)
457
+ get_attribute(platform_tag, :source_architecture)
458
+ end
459
+
460
+ def source_package_formats_for_platform_tag(platform_tag)
461
+ get_attribute(platform_tag, :source_package_formats)
462
+ end
463
+
464
+ # Return an array of platform tags associated with a given package format
465
+ def platform_tags_for_package_format(format)
466
+ platform_tags = []
467
+ PLATFORM_INFO.each do |platform, platform_versions|
468
+ platform_versions.each do |version, info|
469
+ info[:architectures].each do |architecture|
470
+ if info[:package_format] == format
471
+ platform_tags << "#{platform}-#{version}-#{architecture}"
472
+ end
473
+ end
474
+ end
475
+ end
476
+ platform_tags
477
+ end
478
+
479
+ # Return a supported platform tag for the given platform, not caring about
480
+ # version or architecture
481
+ def generic_platform_tag(platform)
482
+ version = versions_for_platform(platform).first
483
+ arch = arches_for_platform_version(platform, version).first
484
+ return "#{platform}-#{version}-#{arch}"
485
+ end
486
+
487
+ # @method by_deb
488
+ # @return [Array] An Array of Strings, containing all platforms
489
+ # that use .deb packages
490
+ # Helper meta-method to return all platforms that use .deb packages
491
+ # @scope class
492
+ def by_deb
493
+ by_package_format('deb')
494
+ end
495
+
496
+ # @method by_rpm
497
+ # @return [Array] An Array of Strings, containing all platforms
498
+ # that use .rpm packages
499
+ # Helper meta-method to return all platforms that use .rpm packages
500
+ # @scope class
501
+ def by_rpm
502
+ by_package_format('rpm')
503
+ end
504
+
505
+ private :by_package_format
506
+ end
507
+ end