packaging 0.99.30 → 0.99.31

Sign up to get free protection for your applications and to get access to all the features.
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