packaging 0.99.30 → 0.99.31

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7cfddfe342677b102df76026925a4f2d6c63d3ab462f11c663f370a66a54bcc0
4
- data.tar.gz: 7b4b4bf61cd61f5b131ece5020bf6cb99ef6551118ddaeec5884036718c41078
3
+ metadata.gz: 46032268fefeac3b8976ae2cdd44b27bab028dd4154d6dae1b99c62832510e8c
4
+ data.tar.gz: 56f74df3abe80d40e39caeb2db1c2a4ba025e22ba2e90876191f29cb82a43f33
5
5
  SHA512:
6
- metadata.gz: 779471e6fc2b8b379ac5a1e30c8f0d4002406b2ef267c8ff3fdd7384a97d61e29a9616b77b03851fd65ece2c95007a079b933eeeb0465d89e82260ca4cfb959d
7
- data.tar.gz: 83d313b8e9342138e946e0d652c3b88880a7f16c7d2eda18f54bfb3cd793102201cd787be0f39eb0981757dd79bd63707f41b6ce36733d831f80f511c526dc9d
6
+ metadata.gz: da7b1a51187cf880d42109e753c9166b5f5147f2f01faf59c880b334ad9abaaacf8ee663a92674b852d2e70133079e649955a925b188df88c256969f49aca972
7
+ data.tar.gz: 108cfe68681a7c93f1e1b53f6a2a1b620ee5ec5930598c1ab5a01d332ed5460fad9b79fdfb98b082686dbeea3b0442712835783bc6d82384398676084c041536
data/lib/packaging.rb CHANGED
@@ -18,6 +18,7 @@ module Pkg
18
18
  require 'packaging/artifactory'
19
19
  require 'packaging/retrieve'
20
20
  require 'packaging/sign'
21
+ require 'packaging/archive'
21
22
 
22
23
  # Load configuration defaults
23
24
  Pkg::Config.load_defaults
@@ -0,0 +1,144 @@
1
+ module Pkg::Archive
2
+ module_function
3
+
4
+ # Array of base paths for foss artifacts on weth
5
+ def base_paths
6
+ [Pkg::Config.yum_repo_path, Pkg::Config.apt_repo_staging_path, Pkg::Config.apt_repo_path, '/opt/downloads'].compact.freeze
7
+ end
8
+
9
+ # Array of paths for temporarily staging artifacts before syncing to release-archives on s3
10
+ def archive_paths
11
+ [Pkg::Config.yum_archive_path, Pkg::Config.apt_archive_path, Pkg::Config.freight_archive_path, Pkg::Config.downloads_archive_path].compact.freeze
12
+ end
13
+
14
+ # Move yum directories from repo path to archive staging path
15
+ def stage_yum_archives(directory)
16
+ # /opt/repository/yum/#{directory}
17
+ full_directory = File.join(Pkg::Config.yum_repo_path, directory)
18
+ archive_path = File.join(Pkg::Config.yum_archive_path, directory)
19
+ command = <<-CMD
20
+ if [ ! -d #{full_directory} ]; then
21
+ if [ -d #{archive_path} ]; then
22
+ echo "Directory #{full_directory} has already been staged, skipping . . ."
23
+ exit 0
24
+ else
25
+ echo "ERROR: Couldn't find directory #{full_directory}, exiting . . ."
26
+ exit 1
27
+ fi
28
+ fi
29
+ find #{full_directory} -type l -delete
30
+ sudo chattr -i -R #{full_directory}
31
+ sudo mkdir --parents #{File.dirname(archive_path)}
32
+ sudo chown root:release -R #{Pkg::Config.yum_archive_path}
33
+ sudo chmod g+w -R #{Pkg::Config.yum_archive_path}
34
+ mv #{full_directory} #{archive_path}
35
+ CMD
36
+ Pkg::Util::Net.remote_ssh_cmd(Pkg::Config.staging_server, command)
37
+ end
38
+
39
+ # Move apt directories from repo path (and repo staging path aka freight path) to archive staging paths
40
+ def stage_apt_archives(directory)
41
+ # /opt/tools/freight/apt/$codename/#{directory}
42
+ # /opt/repository/apt/pool/$codename/#{directory}
43
+ pool_directory = File.join(Pkg::Config.apt_repo_path, 'pool')
44
+ command = <<-CMD
45
+ for full_directory in $(find #{pool_directory} -type d -name #{directory}); do
46
+ find $full_directory -type l -delete
47
+ sudo chattr -i -R $full_directory
48
+ subdirectory=${full_directory##{Pkg::Config.apt_repo_path}/}
49
+ codename=$(echo $subdirectory | cut -d'/' -f 2)
50
+ sudo mkdir --parents #{Pkg::Config.apt_archive_path}/$subdirectory
51
+ sudo chown root:release -R #{Pkg::Config.apt_archive_path}/$subdirectory
52
+ sudo chmod g+w -R #{Pkg::Config.apt_archive_path}/$subdirectory
53
+ mv $full_directory #{Pkg::Config.apt_archive_path}/$(dirname $subdirectory)
54
+ sudo mkdir --parents #{Pkg::Config.freight_archive_path}/$codename
55
+ sudo chown root:release -R #{Pkg::Config.freight_archive_path}/$codename
56
+ sudo chmod g+w -R #{Pkg::Config.freight_archive_path}/$codename
57
+ if [ #{directory} = 'main' ]; then
58
+ freight_directory=#{Pkg::Config.apt_repo_staging_path}/$codename
59
+ if [ ! -d $freight_directory ]; then
60
+ echo "ERROR: Couldn't find freight directory $freight_directory, exiting . . ."
61
+ exit 1
62
+ fi
63
+ for file in $(find $freight_directory -maxdepth 1 -type f); do
64
+ mv $file #{Pkg::Config.freight_archive_path}/$codename
65
+ done
66
+ else
67
+ freight_directory=#{Pkg::Config.apt_repo_staging_path}/$codename/#{directory}
68
+ if [ ! -d $freight_directory ]; then
69
+ if [ -d #{Pkg::Config.freight_archive_path}/$codename/#{directory} ]; then
70
+ echo "Directory $freight_directory has already been staged, skipping . . ."
71
+ exit 0
72
+ else
73
+ echo "ERROR: Couldn't find freight directory $freight_directory, exiting . . ."
74
+ exit 1
75
+ fi
76
+ fi
77
+ mv $freight_directory #{Pkg::Config.freight_archive_path}/$codename/#{directory}
78
+ fi
79
+ done
80
+ CMD
81
+ Pkg::Util::Net.remote_ssh_cmd(Pkg::Config.staging_server, command)
82
+ end
83
+
84
+ # Move downloads directories to archive staging path
85
+ def stage_downloads_archives(directory)
86
+ # /opt/downloads/#{directory}
87
+ full_directory = File.join('/', 'opt', 'downloads', directory)
88
+ archive_path = File.join(Pkg::Config.downloads_archive_path, directory)
89
+ command = <<-CMD
90
+ if [ ! -d #{full_directory} ]; then
91
+ if [ -d #{archive_path} ]; then
92
+ echo "Directory #{full_directory} has already been staged, skipping . . ."
93
+ exit 0
94
+ else
95
+ echo "ERROR: Couldn't find directory #{full_directory}, exiting . . ."
96
+ exit 1
97
+ fi
98
+ fi
99
+ find #{full_directory} -type l -delete
100
+ sudo chattr -i -R #{full_directory}
101
+ sudo mkdir --parents #{File.dirname(archive_path)}
102
+ sudo chown root:release -R #{Pkg::Config.downloads_archive_path}
103
+ sudo chmod g+w -R #{Pkg::Config.downloads_archive_path}
104
+ mv #{full_directory} #{archive_path}
105
+ CMD
106
+ Pkg::Util::Net.remote_ssh_cmd(Pkg::Config.staging_server, command)
107
+ end
108
+
109
+ # Delete empty directories from repo paths on weth
110
+ def remove_empty_directories
111
+ base_paths.each do |path|
112
+ command = <<-CMD
113
+ for directory in $(find #{path} -type d); do
114
+ if [ ! -d $directory ]; then
115
+ echo "Can't find directory $directory, it was probably already deleted, skipping . . ."
116
+ continue
117
+ fi
118
+ files=$(find $directory -type f)
119
+ if [ -z "$files" ]; then
120
+ echo "No files in directory $directory, deleting . . ."
121
+ sudo rm -rf $directory
122
+ fi
123
+ done
124
+ CMD
125
+ Pkg::Util::Net.remote_ssh_cmd(Pkg::Config.staging_server, command)
126
+ end
127
+ end
128
+
129
+ # Delete broken symlinks from repo paths on weth
130
+ def remove_dead_symlinks
131
+ base_paths.each do |path|
132
+ command = "find #{path} -xtype l -delete"
133
+ Pkg::Util::Net.remote_ssh_cmd(Pkg::Config.staging_server, command)
134
+ end
135
+ end
136
+
137
+ # Delete artifacts from archive staging paths (after they've been synced to s3)
138
+ def delete_staged_archives
139
+ archive_paths.each do |archive_path|
140
+ command = "sudo rm -rf #{File.join(archive_path, '*')}"
141
+ Pkg::Util::Net.remote_ssh_cmd(Pkg::Config.staging_server, command)
142
+ end
143
+ end
144
+ end
@@ -5,6 +5,7 @@ require "packaging/platforms"
5
5
  module Pkg::Params
6
6
  BUILD_PARAMS = [:allow_dirty_tree,
7
7
  :answer_override,
8
+ :apt_archive_path,
8
9
  :apt_host,
9
10
  :apt_releases,
10
11
  :apt_repo_command,
@@ -45,11 +46,13 @@ module Pkg::Params
45
46
  :dmg_host,
46
47
  :dmg_path,
47
48
  :dmg_staging_server,
49
+ :downloads_archive_path,
48
50
  :email,
49
51
  :files,
50
52
  :final_mocks,
51
53
  :foss_only,
52
54
  :foss_platforms,
55
+ :freight_archive_path,
53
56
  :freight_conf,
54
57
  :gem_default_executables,
55
58
  :gem_dependencies,
@@ -179,6 +182,7 @@ module Pkg::Params
179
182
  :version,
180
183
  :version_file,
181
184
  :version_strategy,
185
+ :yum_archive_path,
182
186
  :yum_host,
183
187
  :yum_repo_command,
184
188
  :yum_repo_name,
@@ -195,6 +199,7 @@ module Pkg::Params
195
199
  ENV_VARS = [
196
200
  { :var => :allow_dirty_tree, :envvar => :ALLOW_DIRTY_TREE, :type => :bool },
197
201
  { :var => :answer_override, :envvar => :ANSWER_OVERRIDE },
202
+ { :var => :apt_archive_path, :envvar => :APT_ARCHIVE_PATH },
198
203
  { :var => :apt_host, :envvar => :APT_HOST },
199
204
  { :var => :apt_releases, :envvar => :APT_RELEASES, :type => :array },
200
205
  { :var => :apt_repo_path, :envvar => :APT_REPO },
@@ -218,9 +223,11 @@ module Pkg::Params
218
223
  { :var => :dmg_host, :envvar => :DMG_HOST },
219
224
  { :var => :dmg_path, :envvar => :DMG_PATH },
220
225
  { :var => :dmg_staging_server, :envvar => :DMG_STAGING_SERVER },
226
+ { :var => :downloads_archive_path, :envvar => :DOWNLOADS_ARCHIVE_PATH },
221
227
  { :var => :final_mocks, :envvar => :MOCK },
222
228
  { :var => :foss_only, :envvar => :FOSS_ONLY, :type => :bool },
223
229
  { :var => :foss_platforms, :envvar => :FOSS_PLATFORMS, :type => :array },
230
+ { :var => :freight_archive_path, :envvar => :FREIGHT_ARCHIVE_PATH },
224
231
  { :var => :gem_host, :envvar => :GEM_HOST },
225
232
  { :var => :gpg_key, :envvar => :GPG_KEY },
226
233
  { :var => :gpg_name, :envvar => :GPG_NAME },
@@ -289,6 +296,7 @@ module Pkg::Params
289
296
  { :var => :team, :envvar => :TEAM },
290
297
  { :var => :update_version_file, :envvar => :NEW_STYLE_PACKAGE },
291
298
  { :var => :vanagon_project, :envvar => :VANAGON_PROJECT, :type => :bool },
299
+ { :var => :yum_archive_path, :envvar => :YUM_ARCHIVE_PATH },
292
300
  { :var => :yum_host, :envvar => :YUM_HOST },
293
301
  { :var => :yum_repo_path, :envvar => :YUM_REPO },
294
302
  { :var => :yum_staging_server, :envvar => :YUM_STAGING_SERVER },
@@ -67,6 +67,7 @@ module Pkg::Util::RakeUtils
67
67
  '00_utils.rake',
68
68
  '30_metrics.rake',
69
69
  'apple.rake',
70
+ 'archive.rake',
70
71
  'build.rake',
71
72
  'clean.rake',
72
73
  'deb.rake',
@@ -1 +1 @@
1
- spec/fixtures/config/ext/../params.yaml
1
+ ../params.yaml
@@ -1 +1 @@
1
- spec/fixtures/config/ext/../params.yaml
1
+ ../params.yaml
@@ -4,7 +4,8 @@ require 'yaml'
4
4
 
5
5
  describe "Pkg::Config" do
6
6
 
7
- Build_Params = [:apt_host,
7
+ Build_Params = [:apt_archive_path,
8
+ :apt_host,
8
9
  :apt_releases,
9
10
  :apt_repo_path,
10
11
  :apt_repo_url,
@@ -34,9 +35,11 @@ describe "Pkg::Config" do
34
35
  :default_mock,
35
36
  :description,
36
37
  :dmg_path,
38
+ :downloads_archive_path,
37
39
  :email,
38
40
  :files,
39
41
  :final_mocks,
42
+ :freight_archive_path,
40
43
  :freight_conf,
41
44
  :gem_default_executables,
42
45
  :gem_dependencies,
@@ -128,6 +131,7 @@ describe "Pkg::Config" do
128
131
  :version,
129
132
  :version_file,
130
133
  :version_strategy,
134
+ :yum_archive_path,
131
135
  :yum_host,
132
136
  :yum_repo_path,
133
137
  :yum_repo_name,
@@ -0,0 +1,37 @@
1
+ namespace :pl do
2
+ namespace :remote do
3
+
4
+ desc "Move packages from repo paths to archive staging paths"
5
+ task :stage_archives, [:yum_directories, :apt_directories, :downloads_directories] => 'pl:fetch' do |_t, args|
6
+ yum_directories = args.yum_directories ? args.yum_directories.split(' ') : []
7
+ apt_directories = args.apt_directories ? args.apt_directories.split(' ') : []
8
+ downloads_directories = args.downloads_directories ? args.downloads_directories.split(' ') : []
9
+
10
+ yum_directories.each do |directory|
11
+ Pkg::Archive.stage_yum_archives(directory)
12
+ end
13
+ apt_directories.each do |directory|
14
+ Pkg::Archive.stage_apt_archives(directory)
15
+ end
16
+ downloads_directories.each do |directory|
17
+ Pkg::Archive.stage_downloads_archives(directory)
18
+ end
19
+ end
20
+
21
+ desc "Sync archived packages to s3"
22
+ task :deploy_staged_archives_to_s3 => 'pl:fetch' do
23
+ command = 'sudo /usr/local/bin/s3_repo_sync.sh release-archives.puppet.com'
24
+ Pkg::Util::Execution.retry_on_fail(:times => 3) do
25
+ Pkg::Util::Net.remote_ssh_cmd(Pkg::Config.staging_server, command)
26
+ end
27
+ end
28
+
29
+ desc "Delete packages in archive staging directory"
30
+ task :archive_cleanup => 'pl:fetch' do
31
+ Pkg::Archive.remove_empty_directories
32
+ Pkg::Archive.remove_dead_symlinks
33
+ Pkg::Archive.delete_staged_archives
34
+ end
35
+ end
36
+ end
37
+
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.30
4
+ version: 0.99.31
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-04-25 00:00:00.000000000 Z
11
+ date: 2019-05-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec
@@ -91,6 +91,7 @@ files:
91
91
  - README-Solaris.md
92
92
  - README.md
93
93
  - lib/packaging.rb
94
+ - lib/packaging/archive.rb
94
95
  - lib/packaging/artifactory.rb
95
96
  - lib/packaging/config.rb
96
97
  - lib/packaging/config/params.rb
@@ -167,6 +168,7 @@ files:
167
168
  - tasks/00_utils.rake
168
169
  - tasks/30_metrics.rake
169
170
  - tasks/apple.rake
171
+ - tasks/archive.rake
170
172
  - tasks/build.rake
171
173
  - tasks/clean.rake
172
174
  - tasks/config.rake
@@ -223,8 +225,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
223
225
  - !ruby/object:Gem::Version
224
226
  version: '0'
225
227
  requirements: []
226
- rubyforge_project:
227
- rubygems_version: 2.7.6
228
+ rubygems_version: 3.0.3
228
229
  signing_key:
229
230
  specification_version: 4
230
231
  summary: Puppet Labs' packaging automation