packaging 0.108.2 → 0.109.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/README.md +0 -2
- data/lib/packaging/artifactory.rb +15 -10
- data/lib/packaging/config/validations.rb +1 -1
- data/lib/packaging/config.rb +5 -5
- data/lib/packaging/deb/repo.rb +4 -4
- data/lib/packaging/nuget.rb +1 -1
- data/lib/packaging/paths.rb +4 -3
- data/lib/packaging/sign/msi.rb +6 -8
- data/lib/packaging/util/execution.rb +1 -1
- data/lib/packaging/util/ezbake.rb +1 -1
- data/lib/packaging/util/file.rb +4 -6
- data/lib/packaging/util/net.rb +8 -12
- data/lib/packaging/util/ship.rb +17 -7
- data/lib/packaging/util/tool.rb +1 -1
- data/lib/packaging/util/version.rb +7 -5
- data/spec/lib/packaging/config_spec.rb +300 -279
- data/spec/lib/packaging/deb/repo_spec.rb +138 -76
- data/spec/lib/packaging/deb_spec.rb +28 -25
- data/spec/lib/packaging/repo_spec.rb +52 -31
- data/spec/lib/packaging/rpm/repo_spec.rb +18 -37
- data/spec/lib/packaging/sign_spec.rb +22 -43
- data/spec/lib/packaging/tar_spec.rb +48 -44
- data/spec/lib/packaging/util/execution_spec.rb +32 -32
- data/spec/lib/packaging/util/file_spec.rb +112 -75
- data/spec/lib/packaging/util/gpg_spec.rb +24 -19
- data/spec/lib/packaging/util/jenkins_spec.rb +79 -48
- data/spec/lib/packaging/util/misc_spec.rb +13 -8
- data/spec/lib/packaging/util/net_spec.rb +193 -152
- data/spec/lib/packaging/util/rake_utils_spec.rb +24 -18
- data/spec/lib/packaging_spec.rb +7 -9
- data/tasks/apple.rake +7 -8
- data/tasks/deb.rake +1 -1
- data/tasks/fetch.rake +2 -2
- data/tasks/mock.rake +3 -3
- data/tasks/nightly_repos.rake +11 -9
- data/tasks/rpm.rake +2 -3
- data/tasks/ship.rake +4 -2
- data/tasks/sign.rake +8 -10
- data/tasks/z_data_dump.rake +3 -3
- metadata +46 -33
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 11bd7673d3f37ddab90b44202787f13882b390ffb4acbb858b3161166f0d2d0e
|
4
|
+
data.tar.gz: 4623cd4dd183c885ac2984fcb31d403629b2a8e1b294fade1ee918862a978f04
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b495a1512b62e06c39405daaa6a89c09dcea8350006ef6321af2084f01e04b6c97dd41f80bb8ec8592d7b4fe875b1491ae5deee1b45b4bdb99b6888a586dfbee
|
7
|
+
data.tar.gz: f448461101f22184101346cddba0650932796d4dff63fc7ce716f13592c29ff1c417f5908226c3184095067c6aecb32dff6cf069d9274d701c5e559aa0e73079
|
data/README.md
CHANGED
@@ -1,7 +1,5 @@
|
|
1
1
|
# Packaging
|
2
2
|
|
3
|
-
[](https://travis-ci.org/puppetlabs/packaging)
|
4
|
-
|
5
3
|
This is a repository for packaging automation for Puppet software.
|
6
4
|
The goal is to abstract and automate packaging processes beyond individual
|
7
5
|
software projects to a level where this repo can be cloned inside any project
|
@@ -192,18 +192,23 @@ module Pkg
|
|
192
192
|
properties_hash
|
193
193
|
end
|
194
194
|
|
195
|
-
#
|
195
|
+
# Return a list of artifact paths for package. Returns empty array if none.
|
196
|
+
def artifact_paths(package)
|
197
|
+
check_authorization
|
198
|
+
Artifactory::Resource::Artifact.search(
|
199
|
+
name: File.basename(package),
|
200
|
+
artifactory_uri: @artifactory_uri
|
201
|
+
)
|
202
|
+
end
|
203
|
+
|
204
|
+
# Check if a package exists on artifactory
|
196
205
|
# @param package [String] The full relative path to the package to be
|
197
206
|
# checked, relative from the current working directory
|
198
|
-
# Return true if package already exists on artifactory
|
207
|
+
# Return true if package already exists on artifactory.
|
208
|
+
# #artifact_paths, above, is more useful since it will inform where they are.
|
209
|
+
# This is kept for backward compatibility.
|
199
210
|
def package_exists_on_artifactory?(package)
|
200
|
-
|
201
|
-
artifact = Artifactory::Resource::Artifact.search(name: File.basename(package), :artifactory_uri => @artifactory_uri)
|
202
|
-
if artifact.empty?
|
203
|
-
return false
|
204
|
-
else
|
205
|
-
return true
|
206
|
-
end
|
211
|
+
artifact_paths(package).any?
|
207
212
|
end
|
208
213
|
|
209
214
|
# @param package [String] The full relative path to the package to be
|
@@ -231,7 +236,7 @@ module Pkg
|
|
231
236
|
# @return [String] The contents of the YAML file
|
232
237
|
def retrieve_yaml_data(pkg, ref)
|
233
238
|
yaml_url = "#{@artifactory_uri}/#{DEFAULT_REPO_TYPE}/#{DEFAULT_REPO_BASE}/#{pkg}/#{ref}/#{ref}.yaml"
|
234
|
-
URI.
|
239
|
+
URI.parse(yaml_url).read
|
235
240
|
rescue StandardError
|
236
241
|
raise "Failed to load YAML data for #{pkg} at #{ref} from #{yaml_url}!"
|
237
242
|
end
|
data/lib/packaging/config.rb
CHANGED
@@ -5,8 +5,8 @@ module Pkg
|
|
5
5
|
# have it set via accessors, and serialize it back to yaml for easy transport.
|
6
6
|
#
|
7
7
|
class Config
|
8
|
-
require 'packaging/config/params
|
9
|
-
require 'packaging/config/validations
|
8
|
+
require 'packaging/config/params'
|
9
|
+
require 'packaging/config/validations'
|
10
10
|
require 'yaml'
|
11
11
|
|
12
12
|
class << self
|
@@ -79,7 +79,7 @@ module Pkg
|
|
79
79
|
Pkg::Util::Net.check_host_ssh([self.builds_server]).empty?
|
80
80
|
|
81
81
|
dir = "/opt/jenkins-builds/#{self.project}/#{self.ref}"
|
82
|
-
cmd = "if [ -s \"#{dir}/artifacts\" ]; then cd #{dir};"\
|
82
|
+
cmd = "if [ -s \"#{dir}/artifacts\" ]; then cd #{dir};" \
|
83
83
|
"find ./artifacts -mindepth 2 -type f; fi"
|
84
84
|
artifacts, = Pkg::Util::Net.remote_execute(
|
85
85
|
self.builds_server,
|
@@ -132,12 +132,12 @@ module Pkg
|
|
132
132
|
|
133
133
|
case package_format
|
134
134
|
when 'deb'
|
135
|
-
repo_config = "../repo_configs/deb/pl-#{self.project}-#{self.ref}-"\
|
135
|
+
repo_config = "../repo_configs/deb/pl-#{self.project}-#{self.ref}-" \
|
136
136
|
"#{Pkg::Platforms.get_attribute(tag, :codename)}.list"
|
137
137
|
when 'rpm'
|
138
138
|
# Using original_tag here to not break legacy fedora repo targets
|
139
139
|
unless tag.include? 'aix'
|
140
|
-
repo_config = "../repo_configs/rpm/pl-#{self.project}-"\
|
140
|
+
repo_config = "../repo_configs/rpm/pl-#{self.project}-" \
|
141
141
|
"#{self.ref}-#{original_tag}.repo"
|
142
142
|
end
|
143
143
|
when 'swix', 'svr4', 'ips', 'dmg', 'msi'
|
data/lib/packaging/deb/repo.rb
CHANGED
@@ -93,7 +93,7 @@ module Pkg::Deb::Repo
|
|
93
93
|
|
94
94
|
artifact_paths.each do |path|
|
95
95
|
platform_tag = Pkg::Paths.tag_from_artifact_path(path)
|
96
|
-
platform, version, = Pkg::Platforms.
|
96
|
+
platform, version, = Pkg::Platforms.parse_platform_tag(platform_tag)
|
97
97
|
codename = Pkg::Platforms.codename_for_platform_version(platform, version)
|
98
98
|
arches = Pkg::Platforms.arches_for_codename(codename)
|
99
99
|
|
@@ -224,10 +224,10 @@ SignWith: #{Pkg::Config.gpg_key}"
|
|
224
224
|
|
225
225
|
options << '--dry-run' if dryrun
|
226
226
|
options << path
|
227
|
-
if
|
228
|
-
options << "#{destination}:#{dest_path.parent}"
|
229
|
-
else
|
227
|
+
if destination.nil?
|
230
228
|
options << dest_path.parent.to_s
|
229
|
+
else
|
230
|
+
options << "#{destination}:#{dest_path.parent}"
|
231
231
|
end
|
232
232
|
options.join("\s")
|
233
233
|
end
|
data/lib/packaging/nuget.rb
CHANGED
@@ -23,7 +23,7 @@ module Pkg::Nuget
|
|
23
23
|
form_data = ["-H 'Authorization: Basic #{authentication}'", "-f"]
|
24
24
|
packages.each do |pkg|
|
25
25
|
puts "Working on package #{pkg}"
|
26
|
-
projname, version = File.basename(pkg).match(/^(.*)-([\d
|
26
|
+
projname, version = File.basename(pkg).match(/^(.*)-([\d+.]+)\.nupkg$/).captures
|
27
27
|
package_form_data = ["--upload-file #{pkg}"]
|
28
28
|
package_path = "#{projname}/#{version}/#{File.basename(pkg)}"
|
29
29
|
stdout = ''
|
data/lib/packaging/paths.rb
CHANGED
@@ -23,7 +23,7 @@ module Pkg::Paths
|
|
23
23
|
# Given a path to an artifact, divine the appropriate platform tag associated
|
24
24
|
# with the artifact and path
|
25
25
|
def tag_from_artifact_path(path)
|
26
|
-
platform = Pkg::Platforms.supported_platforms.find { |p| path =~ /(\/|\.)#{p}[
|
26
|
+
platform = Pkg::Platforms.supported_platforms.find { |p| path =~ /(\/|\.)#{p}[^.]/ }
|
27
27
|
platform = 'windowsfips' if path =~ /windowsfips/
|
28
28
|
|
29
29
|
codename = Pkg::Platforms.codenames.find { |c| path =~ /\/#{c}/ }
|
@@ -318,7 +318,8 @@ module Pkg::Paths
|
|
318
318
|
|
319
319
|
# For repos prior to puppet7, the puppet version was part of the repository
|
320
320
|
# For example: /opt/repository/apt/pool/bionic/puppet6/p/puppet-agent
|
321
|
-
if %w[
|
321
|
+
if %w[puppet8 puppet8-nightly
|
322
|
+
puppet7 puppet7-nightly
|
322
323
|
puppet6 puppet6-nightly
|
323
324
|
puppet5 puppet5-nightly
|
324
325
|
puppet puppet-nightly
|
@@ -349,7 +350,7 @@ module Pkg::Paths
|
|
349
350
|
def debian_component_from_path(path)
|
350
351
|
# substitute '.' and '/' since those aren't valid characters for debian components
|
351
352
|
matches = path.match(/(\d+\.\d+|master|main)\/(\w+)/)
|
352
|
-
regex_for_substitution = /[
|
353
|
+
regex_for_substitution = /[.\/]/
|
353
354
|
fail "Error: Could not determine Debian Component from path #{path}" if matches.nil?
|
354
355
|
base_component = matches[1]
|
355
356
|
component_qualifier = matches[2]
|
data/lib/packaging/sign/msi.rb
CHANGED
@@ -66,14 +66,12 @@ module Pkg::Sign::Msi
|
|
66
66
|
|
67
67
|
# Download the signed msis
|
68
68
|
msis.each do |msi|
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
fail "There was an error retrieving the signed msi:#{msi}.\n#{e}"
|
76
|
-
end
|
69
|
+
signed_msi = signed_bucket.file(signed_msis[msi])
|
70
|
+
signed_msi.download(msi)
|
71
|
+
rescue StandardError => e
|
72
|
+
delete_tosign_msis(tosign_bucket, msis)
|
73
|
+
delete_signed_msis(signed_bucket, signed_msis)
|
74
|
+
fail "There was an error retrieving the signed msi:#{msi}.\n#{e}"
|
77
75
|
end
|
78
76
|
|
79
77
|
# Cleanup buckets
|
@@ -71,7 +71,7 @@ module Pkg::Util::Execution
|
|
71
71
|
break
|
72
72
|
rescue StandardError => err
|
73
73
|
puts "An error was encountered evaluating block. Retrying.."
|
74
|
-
exception = err.to_s
|
74
|
+
exception = "#{err.to_s}\n#{err.backtrace.join("\n")}"
|
75
75
|
end
|
76
76
|
end
|
77
77
|
else
|
data/lib/packaging/util/file.rb
CHANGED
@@ -58,7 +58,7 @@ module Pkg::Util::File
|
|
58
58
|
|
59
59
|
def erb_string(erbfile, b = binding)
|
60
60
|
template = File.read(erbfile)
|
61
|
-
message = ERB.new(template,
|
61
|
+
message = ERB.new(template, trim_mode: "-")
|
62
62
|
message.result(b)
|
63
63
|
end
|
64
64
|
|
@@ -98,7 +98,7 @@ module Pkg::Util::File
|
|
98
98
|
Dir.chdir(Pkg::Config.project_root) do
|
99
99
|
file_patterns.each do |pattern|
|
100
100
|
if File.directory?(pattern) and !Pkg::Util::File.empty_dir?(pattern)
|
101
|
-
install << Dir[pattern
|
101
|
+
install << Dir["#{pattern}/**/*"]
|
102
102
|
else
|
103
103
|
install << Dir[pattern]
|
104
104
|
end
|
@@ -146,8 +146,8 @@ module Pkg::Util::File
|
|
146
146
|
team_data_branch = Pkg::Config.team
|
147
147
|
|
148
148
|
if Pkg::Config.build_pe
|
149
|
-
project_data_branch =
|
150
|
-
team_data_branch =
|
149
|
+
project_data_branch = "pe-#{project_data_branch}" unless project_data_branch =~ /^pe-/
|
150
|
+
team_data_branch = "pe-#{team_data_branch}" unless team_data_branch =~ /^pe-/
|
151
151
|
end
|
152
152
|
|
153
153
|
# Remove .packaging directory from old-style extras loading
|
@@ -189,7 +189,6 @@ module Pkg::Util::File
|
|
189
189
|
# PL Release team
|
190
190
|
def load_extras(temp_directory)
|
191
191
|
unless ENV['PARAMS_FILE'] && ENV['PARAMS_FILE'] != ''
|
192
|
-
temp_directory = temp_directory
|
193
192
|
raise "load_extras requires a directory containing extras data" if temp_directory.nil?
|
194
193
|
Pkg::Config.config_from_yaml("#{temp_directory}/#{Pkg::Config.builder_data_file}")
|
195
194
|
|
@@ -200,4 +199,3 @@ module Pkg::Util::File
|
|
200
199
|
end
|
201
200
|
end
|
202
201
|
end
|
203
|
-
|
data/lib/packaging/util/net.rb
CHANGED
@@ -7,7 +7,7 @@ module Pkg::Util::Net
|
|
7
7
|
def fetch_uri(uri, target)
|
8
8
|
require 'open-uri'
|
9
9
|
if Pkg::Util::File.file_writable?(File.dirname(target))
|
10
|
-
File.open(target, 'w') { |f| f.puts(URI.
|
10
|
+
File.open(target, 'w') { |f| f.puts(URI.parse(uri).read) }
|
11
11
|
end
|
12
12
|
end
|
13
13
|
|
@@ -33,11 +33,9 @@ module Pkg::Util::Net
|
|
33
33
|
def check_host_ssh(hosts)
|
34
34
|
errs = []
|
35
35
|
Array(hosts).flatten.each do |host|
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
errs << host
|
40
|
-
end
|
36
|
+
remote_execute(host, 'exit', { extra_options: '-oBatchMode=yes' })
|
37
|
+
rescue StandardError
|
38
|
+
errs << host
|
41
39
|
end
|
42
40
|
return errs
|
43
41
|
end
|
@@ -51,12 +49,10 @@ module Pkg::Util::Net
|
|
51
49
|
def check_host_gpg(hosts, gpg)
|
52
50
|
errs = []
|
53
51
|
Array(hosts).flatten.each do |host|
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
errs << host
|
59
|
-
end
|
52
|
+
remote_execute(host, "gpg --list-secret-keys #{gpg} > /dev/null 2&>1",
|
53
|
+
{ extra_options: '-oBatchMode=yes' })
|
54
|
+
rescue StandardError
|
55
|
+
errs << host
|
60
56
|
end
|
61
57
|
return errs
|
62
58
|
end
|
data/lib/packaging/util/ship.rb
CHANGED
@@ -377,7 +377,7 @@ module Pkg::Util::Ship
|
|
377
377
|
FileUtils.cp(ezbake_manifest, File.join(local_directory, "#{Pkg::Config.ref}.ezbake.manifest"))
|
378
378
|
end
|
379
379
|
ezbake_yaml = File.join("ext", "ezbake.manifest.yaml")
|
380
|
-
if File.
|
380
|
+
if File.exist?(ezbake_yaml)
|
381
381
|
FileUtils.cp(ezbake_yaml, File.join(local_directory, "#{Pkg::Config.ref}.ezbake.manifest.yaml"))
|
382
382
|
end
|
383
383
|
|
@@ -478,7 +478,8 @@ module Pkg::Util::Ship
|
|
478
478
|
def ship_to_artifactory(local_directory = 'pkg')
|
479
479
|
Pkg::Util::File.fetch
|
480
480
|
unless Pkg::Config.project
|
481
|
-
fail
|
481
|
+
fail 'Project missing. Set it with the "project" key in build_defaults.yaml or ' \
|
482
|
+
'with the "PROJECT_OVERRIDE" environment variable.'
|
482
483
|
end
|
483
484
|
artifactory = Pkg::ManageArtifactory.new(Pkg::Config.project, Pkg::Config.ref)
|
484
485
|
|
@@ -492,14 +493,23 @@ module Pkg::Util::Ship
|
|
492
493
|
a <=> b
|
493
494
|
end
|
494
495
|
end
|
496
|
+
|
495
497
|
artifacts.each do |artifact|
|
496
|
-
|
497
|
-
|
498
|
-
elsif artifactory.package_exists_on_artifactory?(artifact)
|
499
|
-
warn "Attempt to upload '#{artifact}' failed. Package already exists!"
|
500
|
-
else
|
498
|
+
# Always ship .yaml and .jsons even if they already exist
|
499
|
+
if %w[.yaml .json].include? File.extname(artifact)
|
501
500
|
artifactory.deploy_package(artifact)
|
501
|
+
next
|
502
502
|
end
|
503
|
+
|
504
|
+
# Warn against anything that already exists
|
505
|
+
existing = artifactory.artifact_paths(artifact)
|
506
|
+
if existing.any?
|
507
|
+
warn "Uploading '#{artifact}' to Artifactory refused. " \
|
508
|
+
"Package already exists here: #{existing.join(', ')}"
|
509
|
+
next
|
510
|
+
end
|
511
|
+
|
512
|
+
artifactory.deploy_package(artifact)
|
503
513
|
end
|
504
514
|
end
|
505
515
|
end
|
data/lib/packaging/util/tool.rb
CHANGED
@@ -93,7 +93,7 @@ module Pkg::Util::Version
|
|
93
93
|
end
|
94
94
|
|
95
95
|
if new_version.include?('dirty')
|
96
|
-
new_version = new_version.sub(/\.?dirty/, '')
|
96
|
+
new_version = "#{new_version.sub(/\.?dirty/, '')}dirty"
|
97
97
|
end
|
98
98
|
|
99
99
|
new_version.split('-')
|
@@ -143,9 +143,11 @@ module Pkg::Util::Version
|
|
143
143
|
#
|
144
144
|
def versionbump(workdir = nil)
|
145
145
|
version = ENV['VERSION'] || Pkg::Config.version.to_s.strip
|
146
|
-
new_version =
|
146
|
+
new_version = "\"#{version}\""
|
147
147
|
|
148
|
+
# rubocop:disable Style/StringConcatenation
|
148
149
|
version_file = "#{workdir ? workdir + '/' : ''}#{Pkg::Config.version_file}"
|
150
|
+
# rubocop:enable Style/StringConcatenation
|
149
151
|
|
150
152
|
# Read the previous version file in...
|
151
153
|
contents = IO.read(version_file)
|
@@ -160,7 +162,7 @@ module Pkg::Util::Version
|
|
160
162
|
puts "Updating #{old_version} to #{new_version} in #{version_file}"
|
161
163
|
if contents =~ /@DEVELOPMENT_VERSION@/
|
162
164
|
contents.gsub!('@DEVELOPMENT_VERSION@', version)
|
163
|
-
elsif contents =~ /version\s*=\s*[
|
165
|
+
elsif contents =~ /version\s*=\s*['"]DEVELOPMENT['"]/
|
164
166
|
contents.gsub!(/version\s*=\s*['"]DEVELOPMENT['"]/, "version = '#{version}'")
|
165
167
|
elsif contents =~ /VERSION = #{old_version}/
|
166
168
|
contents.gsub!("VERSION = #{old_version}", "VERSION = #{new_version}")
|
@@ -179,8 +181,8 @@ module Pkg::Util::Version
|
|
179
181
|
#
|
180
182
|
# @param json_data [hash] json data hash containing the ref to check
|
181
183
|
def report_json_tags(json_data)
|
182
|
-
puts
|
183
|
-
puts
|
184
|
+
puts "component: #{File.basename(json_data['url'])}"
|
185
|
+
puts "ref: #{json_data['ref'].to_s}"
|
184
186
|
if Pkg::Util::Git.remote_tagged?(json_data['url'], json_data['ref'].to_s)
|
185
187
|
tagged = 'Tagged? [ Yes ]'
|
186
188
|
else
|