checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
---
2
2
SHA256:
3
- metadata.gz: 462c33ee387ad86103e9ac1edead54aa1a6c017328c92a3ccba336484f89458c
4
- data.tar.gz: '09c84bce3ea8c21637fe60ad730d2e07604796721f1f5cb366dab0a16ae8eca2'
3
+ metadata.gz: c9b1ac8c003ac90a5214eed7c8ba0452b2d264b093a1e33918951821e77abc1c
4
+ data.tar.gz: dffd6a141ca0c206e56a3a5f9d92f3d5fd43db33df13955485afb5598d020575
5
5
SHA512:
6
- metadata.gz: 3f47f740aade3d02bea8a007f1b727271a203d47d298ff144b207cfad8ae58cba66c3d4ebc758bb695666d18208b5f18220b8e9886357a35e0f41257d7d1fdb2
7
- data.tar.gz: 113d0f5b9227fe43cdfaf68986e0850c768268937f7969fd390370c257ea963ceffcb67d128d21673a6b9c69ec62f30b94bd4efd7a888aa113e467a2c10f5c54
6
+ metadata.gz: ad5e4b3b0f541647b482692c8bca84ab17772a9875c569793f9dd2ec0aeeac6912ec7cc93ac49d417defc3a8c4e863d0975e91aa9b968d33cfdacadcdeada80c
7
+ data.tar.gz: 7c4c851417fb6fec73fd833a6cd753f29847cc9a097d5a972fadae0482a76a5073e7073405307af2099db23ffb6458b6b7fd758015cb36c924f4aedc39371cfc
data/lib/packaging/artifactory.rb CHANGED
@@ -432,28 +432,14 @@ module Pkg
432
432
def ship_pe_tarballs(local_tarball_directory, target_repo, ship_paths)
433
433
check_authorization
434
434
ship_paths.each do |path|
435
- unset_cleanup_skip_on_artifacts(target_repo, path)
436
435
Dir.foreach(local_tarball_directory) do |pe_tarball|
437
436
next if pe_tarball == '.' || pe_tarball == ".."
438
437
begin
439
438
puts "Uploading #{pe_tarball} to #{target_repo}/#{path}#{pe_tarball}"
440
439
artifact = Artifactory::Resource::Artifact.new(
441
440
local_path: "#{local_tarball_directory}/#{pe_tarball}")
442
- uploaded_artifact = artifact.upload(target_repo, "#{path}#{pe_tarball}")
441
+ artifact.upload(target_repo, "#{path}#{pe_tarball}")
443
- # The Artifactory gem property setter only works when '/api/storage' is used in
444
- # the 'uri' field.
445
- # Strangely, the above Artifactory::Resource::Artifact.new gives us the raw URI.
446
- # Therefore we are forced to do some path surgery, inserting
447
- # '/api/storage' before "/#{target_repo}" to make the property setting work.
448
- storage_artifact = uploaded_artifact
449
- unless storage_artifact.uri.include?("/api/storage")
450
- storage_artifact.uri = storage_artifact.uri.sub(
451
- "/#{target_repo}",
452
- "/api/storage/#{target_repo}")
453
- end
454
- storage_artifact.properties(ARTIFACTORY_CLEANUP_SKIP_PROPERTY => true)
455
442
rescue Errno::EPIPE
456
- ## [eric.griswold] maybe this should be fatal?
457
443
STDERR.puts "Warning: Could not upload #{pe_tarball} to #{target_repo}/#{path}. Skipping."
458
444
next
459
445
end
@@ -478,29 +464,43 @@ module Pkg
478
464
end
479
465
end
480
466
481
- # Clear the ARTIFACTORY_CLEANUP_SKIP_PROPERTY on all artifacts in
482
- # a specified directory in a given Artifactory repo that match
483
- # /<directory>/*.tar. Use this before uploading newer tarballs to maintain
484
- # 'cleanup.skip' on the latest tarballs only.
467
+ # Start by clearing the ARTIFACTORY_CLEANUP_SKIP_PROPERTY on all artifacts in a
468
+ # single repo/directory location. This allows all artifacts in the directory to be cleaned.
469
+ # Once cleared, set ARTIFACTORY_CLEANUP_SKIP_PROPERTY on those matching pe_build_version,
470
+ # presumably the latest. This prevents those artifacts from being deleted.
485
471
#
486
472
# @param repo [String] Artifactory repository that contains the specified directory
487
473
# @param directory [String] Artifactory directory in repo containing the artifacts from which to
488
474
# set the 'cleanup.skip' property setting to false
489
- def unset_cleanup_skip_on_artifacts(repo, directory)
490
- artifacts_with_cleanup_skip = Artifactory::Resource::Artifact.property_search(
491
- ARTIFACTORY_CLEANUP_SKIP_PROPERTY => true,
492
- "repos" => repo
475
+ # @param pe_build_version [String] Set 'cleanup.skip' property on artifacts that
476
+ # contain this string in their file inside the directory.
477
+ def prevent_artifact_cleanup(repo, directory, pe_build_version)
478
+ # Clean up any trailing slashes on directory, just in case
479
+ directory.sub!(/(\/)+#x2F;, '')
480
+
481
+ all_artifacts_pattern = "#{directory}/*"
482
+ latest_artifacts_pattern = "#{directory}/*#{pe_build_version}*"
483
+
484
+ all_artifacts = Artifactory::Resource::Artifact.pattern_search(
485
+ repo: repo,
486
+ pattern: all_artifacts_pattern
487
+ )
488
+ latest_artifacts = Artifactory::Resource::Artifact.pattern_search(
489
+ repo: repo,
490
+ pattern: latest_artifacts_pattern
493
491
)
494
492
495
- # For the upcoming directory check, make sure we know where our trailing slashes are.
496
- directory_no_trailing_slashes = directory.sub(/(\/)+#x2F;, '')
497
-
493
+ # Clear cleanup.skip on all artifacts in directory
494
+ puts "Clearing #{ARTIFACTORY_CLEANUP_SKIP_PROPERTY} in #{repo}/#{all_artifacts_pattern}"
495
+ all_artifacts.each do |artifact|
498
- # For all tarball artifacts in #{directory} that have the Artifactory property
499
- # 'cleanup.skip' set to true, set it to 'false'
500
- artifacts_with_cleanup_skip.each do |artifact|
501
- next unless artifact.uri.include?("/#{directory_no_trailing_slashes}/")
502
496
artifact.properties(ARTIFACTORY_CLEANUP_SKIP_PROPERTY => false)
503
497
end
498
+
499
+ # Set cleanup.skip on all artifacts in directory matching *pe_build_version*
500
+ puts "Setting #{ARTIFACTORY_CLEANUP_SKIP_PROPERTY} in #{repo}/#{latest_artifacts_pattern}"
501
+ latest_artifacts.each do |artifact|
502
+ artifact.properties(ARTIFACTORY_CLEANUP_SKIP_PROPERTY => true)
503
+ end
504
504
end
505
505
506
506
# Download an artifact based on name, repo, and path to artifact
@@ -584,7 +584,7 @@ module Pkg
584
584
copied_artifact_search = Artifactory::Resource::Artifact.pattern_search(repo: 'debian_enterprise__local', pattern: "#{target_path}/*/#{info["filename"]}")
585
585
fail "Error: what the hell, could not find just-copied package #{info["filename"]} under debian_enterprise__local/#{target_path}" if copied_artifact_search.nil?
586
586
copied_artifact = copied_artifact_search.first
587
- properties = { 'deb.component' => Pkg::Paths.two_digit_pe_version_from_path(target_path) }
587
+ properties = { 'deb.component' => Pkg::Paths.debian_component_from_path(target_path) }
588
588
copied_artifact.properties(properties)
589
589
end
590
590
end
data/lib/packaging/paths.rb CHANGED
@@ -303,9 +303,10 @@ module Pkg::Paths
303
303
end
304
304
end
305
305
306
- def two_digit_pe_version_from_path(path)
307
- matches = path.match(/\d+\.\d+/)
308
- fail "Error: Could not determine PE version from path #{path}" if matches.nil?
306
+ def debian_component_from_path(path)
307
+ matches = path.match(/(\d+\.\d+)\/(\w+)/)
308
+ fail "Error: Could not determine Debian Component from path #{path}" if matches.nil?
309
+ return matches[1] if matches[2] == 'repos'
309
310
return matches[0]
310
311
end
311
312
end
data/tasks/ship.rake CHANGED
@@ -322,14 +322,12 @@ namespace :pl do
322
322
323
323
desc "Ship built gems to public Downloads server (#{Pkg::Config.gem_host})"
324
324
task :ship_gem_to_downloads => 'pl:fetch' do
325
- unless Pkg::Config.gem_host
325
+ if Pkg::Config.gem_host && Pkg::Config.gem_path
326
+ Pkg::Util::Execution.retry_on_fail(times: 3) do
327
+ Pkg::Util::Ship.ship_gem('pkg', Pkg::Config.gem_path, platform_independent: true)
328
+ end
329
+ else
326
330
warn 'Value `Pkg::Config.gem_host` not defined; skipping shipping to public Download server'
327
- exit
328
- end
329
- fail 'Value `Pkg::Config.gem_path` not defined; skipping shipping to public Download server' unless Pkg::Config.gem_path
330
-
331
- Pkg::Util::Execution.retry_on_fail(times: 3) do
332
- Pkg::Util::Ship.ship_gem('pkg', Pkg::Config.gem_path, platform_independent: true)
333
331
end
334
332
end
335
333
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
--- !ruby/object:Gem::Specification
2
2
name: packaging
3
3
version: !ruby/object:Gem::Version
4
- version: 0.99.47
4
+ version: 0.99.48
5
5
platform: ruby
6
6
authors:
7
7
- Puppet Labs
8
8
autorequire:
9
9
bindir: bin
10
10
cert_chain: []
11
- date: 2019-10-22 00:00:00.000000000 Z
11
+ date: 2019-11-12 00:00:00.000000000 Z
12
12
dependencies:
13
13
- !ruby/object:Gem::Dependency
14
14
name: rspec
@@ -244,28 +244,28 @@ signing_key:
244
244
specification_version: 4
245
245
summary: Puppet Labs' packaging automation
246
246
test_files:
247
+ - spec/lib/packaging_spec.rb
247
248
- spec/lib/packaging/retrieve_spec.rb
248
- - spec/lib/packaging/paths_spec.rb
249
249
- spec/lib/packaging/tar_spec.rb
250
+ - spec/lib/packaging/gem_spec.rb
250
251
- spec/lib/packaging/deb/repo_spec.rb
251
- - spec/lib/packaging/rpm/repo_spec.rb
252
- - spec/lib/packaging/artifactory_spec.rb
253
- - spec/lib/packaging/repo_spec.rb
254
252
- spec/lib/packaging/deb_spec.rb
253
+ - spec/lib/packaging/rpm/repo_spec.rb
255
254
- spec/lib/packaging/sign_spec.rb
256
- - spec/lib/packaging/gem_spec.rb
257
- - spec/lib/packaging/util/rake_utils_spec.rb
255
+ - spec/lib/packaging/config_spec.rb
256
+ - spec/lib/packaging/platforms_spec.rb
258
- - spec/lib/packaging/util/git_spec.rb
259
257
- spec/lib/packaging/util/os_spec.rb
258
+ - spec/lib/packaging/util/gpg_spec.rb
259
+ - spec/lib/packaging/util/net_spec.rb
260
260
- spec/lib/packaging/util/misc_spec.rb
261
- - spec/lib/packaging/util/version_spec.rb
261
+ - spec/lib/packaging/util/git_tag_spec.rb
262
+ - spec/lib/packaging/util/jenkins_spec.rb
262
263
- spec/lib/packaging/util/file_spec.rb
264
+ - spec/lib/packaging/util/git_spec.rb
265
+ - spec/lib/packaging/util/version_spec.rb
263
266
- spec/lib/packaging/util/execution_spec.rb
264
- - spec/lib/packaging/util/gpg_spec.rb
267
+ - spec/lib/packaging/util/rake_utils_spec.rb
265
- - spec/lib/packaging/util/jenkins_spec.rb
266
268
- spec/lib/packaging/util/ship_spec.rb
267
- - spec/lib/packaging/util/git_tag_spec.rb
268
- - spec/lib/packaging/util/net_spec.rb
269
- - spec/lib/packaging/platforms_spec.rb
269
+ - spec/lib/packaging/repo_spec.rb
270
+ - spec/lib/packaging/artifactory_spec.rb
271
+ - spec/lib/packaging/paths_spec.rb
270
- - spec/lib/packaging/config_spec.rb
271
- - spec/lib/packaging_spec.rb