packaging 0.101.0 → 0.105.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/lib/packaging/config.rb +12 -8
- data/lib/packaging/platforms.rb +5 -47
- data/lib/packaging/repo.rb +14 -11
- data/lib/packaging/util/apt_staging_server.rb +8 -0
- data/lib/packaging/util/build_metadata.rb +17 -0
- data/lib/packaging/util/distribution_server.rb +42 -0
- data/lib/packaging/util/ezbake.rb +26 -0
- data/lib/packaging/util/file.rb +79 -0
- data/lib/packaging/util/net.rb +3 -4
- data/lib/packaging/util/repo.rb +18 -0
- data/lib/packaging/util/ship.rb +283 -78
- data/lib/packaging/util/sign.rb +47 -0
- data/lib/packaging/util/windows.rb +38 -0
- data/lib/packaging/util.rb +7 -0
- data/spec/lib/packaging/config_spec.rb +3 -3
- data/spec/lib/packaging/deb/repo_spec.rb +1 -1
- data/spec/lib/packaging/paths_spec.rb +2 -3
- data/spec/lib/packaging/platforms_spec.rb +5 -5
- data/spec/lib/packaging/sign_spec.rb +0 -12
- data/spec/lib/packaging/util/ship_spec.rb +0 -2
- data/tasks/deb_repos.rake +1 -0
- data/tasks/fetch.rake +1 -0
- data/tasks/jenkins.rake +1 -1
- data/tasks/load_extras.rake +1 -0
- data/tasks/rpm_repos.rake +1 -0
- data/tasks/ship.rake +171 -142
- data/tasks/sign.rake +1 -1
- metadata +62 -27
@@ -15,13 +15,6 @@ Header V4 RSA/SHA256 Signature, key ID ef8d349f: NOKEY
|
|
15
15
|
Header SHA1 digest: OK (3cb7e9861e8bc09783a1b6c8d88243a3c16daa81)
|
16
16
|
V4 RSA/SHA256 Signature, key ID ef8d349f: NOKEY
|
17
17
|
MD5 digest: OK (d5f06ba2a9053de532326d0659ec0d11)
|
18
|
-
DOC
|
19
|
-
}
|
20
|
-
let(:el5_signed_response) { <<-DOC
|
21
|
-
Header V3 RSA/SHA1 signature: NOKEY, key ID ef8d349f
|
22
|
-
Header SHA1 digest: OK (12ea7bd578097a3aecc5deb8ada6aca6147d68e3)
|
23
|
-
V3 RSA/SHA1 signature: NOKEY, key ID ef8d349f
|
24
|
-
MD5 digest: OK (27353c6153068a3c9902fcb4ad5b8b92)
|
25
18
|
DOC
|
26
19
|
}
|
27
20
|
let(:sles12_signed_response) { <<-DOC
|
@@ -40,10 +33,6 @@ DOC
|
|
40
33
|
allow(Pkg::Sign::Rpm).to receive(:`).and_return(el7_signed_response)
|
41
34
|
expect(Pkg::Sign::Rpm.has_sig?(rpm)).to be true
|
42
35
|
end
|
43
|
-
it 'returns true if rpm has been signed (el5)' do
|
44
|
-
allow(Pkg::Sign::Rpm).to receive(:`).and_return(el5_signed_response)
|
45
|
-
expect(Pkg::Sign::Rpm.has_sig?(rpm)).to be true
|
46
|
-
end
|
47
36
|
it 'returns true if rpm has been signed (sles12)' do
|
48
37
|
allow(Pkg::Sign::Rpm).to receive(:`).and_return(sles12_signed_response)
|
49
38
|
expect(Pkg::Sign::Rpm.has_sig?(rpm)).to be true
|
@@ -68,7 +57,6 @@ DOC
|
|
68
57
|
"#{rpm_directory}/aix/7.1/PC1/ppc/puppet-agent-5.5.3-1.aix7.1.ppc.rpm",
|
69
58
|
] }
|
70
59
|
let(:v3_rpms) { [
|
71
|
-
"#{rpm_directory}/el/5/PC1/i386/puppet-agent-5.5.3-1.el5.i386.rpm",
|
72
60
|
"#{rpm_directory}/sles/11/PC1/x86_64/puppet-agent-5.5.3-1.sles11.x86_64.rpm",
|
73
61
|
] }
|
74
62
|
let(:v4_rpms) { [
|
@@ -51,7 +51,6 @@ describe '#Pkg::Util::Ship' do
|
|
51
51
|
pkg/sles/12/puppet6/ppc64le/puppet-agent-6.19.0-1.sles12.ppc64le.rpm
|
52
52
|
pkg/sles/12/puppet6/x86_64/puppet-agent-6.19.0-1.sles12.x86_64.rpm
|
53
53
|
pkg/sles/15/puppet6/x86_64/puppet-agent-6.19.0-1.sles15.x86_64.rpm
|
54
|
-
pkg/apple/10.14/puppet6/x86_64/puppet-agent-6.19.0-1.osx10.14.dmg
|
55
54
|
pkg/apple/10.15/puppet6/x86_64/puppet-agent-6.19.0-1.osx10.15.dmg
|
56
55
|
pkg/fedora/32/puppet6/x86_64/puppet-agent-6.19.0-1.fc32.x86_64.rpm
|
57
56
|
pkg/windows/puppet-agent-6.19.0-x64.msi
|
@@ -71,7 +70,6 @@ describe '#Pkg::Util::Ship' do
|
|
71
70
|
pkg/puppet6/sles/12/ppc64le/puppet-agent-6.19.0-1.sles12.ppc64le.rpm
|
72
71
|
pkg/puppet6/sles/12/x86_64/puppet-agent-6.19.0-1.sles12.x86_64.rpm
|
73
72
|
pkg/puppet6/sles/15/x86_64/puppet-agent-6.19.0-1.sles15.x86_64.rpm
|
74
|
-
pkg/mac/puppet6/10.14/x86_64/puppet-agent-6.19.0-1.osx10.14.dmg
|
75
73
|
pkg/mac/puppet6/10.15/x86_64/puppet-agent-6.19.0-1.osx10.15.dmg
|
76
74
|
pkg/puppet6/fedora/32/x86_64/puppet-agent-6.19.0-1.fc32.x86_64.rpm
|
77
75
|
pkg/windows/puppet6/puppet-agent-6.19.0-x64.msi
|
data/tasks/deb_repos.rake
CHANGED
@@ -10,6 +10,7 @@
|
|
10
10
|
#
|
11
11
|
namespace :pl do
|
12
12
|
namespace :jenkins do
|
13
|
+
# The equivalent to invoking this task is calling Pkg::Util::Repo.deb_repos
|
13
14
|
desc "Create apt repositories of build DEB packages for this SHA on the distributions erver"
|
14
15
|
task :deb_repos => "pl:fetch" do
|
15
16
|
Pkg::Deb::Repo.create_repos
|
data/tasks/fetch.rake
CHANGED
@@ -26,6 +26,7 @@ end
|
|
26
26
|
# It uses curl to download the files, and places them in a temporary
|
27
27
|
# directory, e.g. /tmp/somedirectory/{project,team}/Pkg::Config.builder_data_file
|
28
28
|
namespace :pl do
|
29
|
+
# The equivalent to invoking this task is calling Pkg::Util::File.fetch
|
29
30
|
desc "retrieve build-data configurations to override/extend local build_defaults"
|
30
31
|
task :fetch do
|
31
32
|
# Remove .packaging directory from old-style extras loading
|
data/tasks/jenkins.rake
CHANGED
data/tasks/load_extras.rake
CHANGED
@@ -6,6 +6,7 @@
|
|
6
6
|
# generic tasks with data not generally useful outside the
|
7
7
|
# PL Release team
|
8
8
|
namespace :pl do
|
9
|
+
# The equivalent to invoking this task is calling Pkg::Util::File.load_extras(temp_directory)
|
9
10
|
task :load_extras, :tempdir do |t, args|
|
10
11
|
unless ENV['PARAMS_FILE'] && ENV['PARAMS_FILE'] != ''
|
11
12
|
tempdir = args.tempdir
|
data/tasks/rpm_repos.rake
CHANGED
@@ -11,6 +11,7 @@
|
|
11
11
|
#
|
12
12
|
namespace :pl do
|
13
13
|
namespace :jenkins do
|
14
|
+
# The equivalent to invoking this task is calling Pkg::Util::Repo.rpm_repos
|
14
15
|
desc "Create yum repositories of built RPM packages for this SHA on the distribution server"
|
15
16
|
task :rpm_repos => "pl:fetch" do
|
16
17
|
Pkg::Rpm::Repo.create_remote_repos
|
data/tasks/ship.rake
CHANGED
@@ -1,44 +1,77 @@
|
|
1
1
|
namespace :pl do
|
2
2
|
namespace :remote do
|
3
|
-
#
|
4
|
-
#
|
5
|
-
#
|
6
|
-
#
|
3
|
+
# Repo updates are the ways we convince the various repos to regenerate any repo-based
|
4
|
+
# metadata.
|
5
|
+
#
|
6
|
+
# It is broken up into various pieces and types to try to avoid too much redundant
|
7
|
+
# behavior.
|
7
8
|
|
8
9
|
desc "Update '#{Pkg::Config.repo_name}' yum repository on '#{Pkg::Config.yum_staging_server}'"
|
9
10
|
task update_yum_repo: 'pl:fetch' do
|
10
11
|
command = Pkg::Config.yum_repo_command || 'rake -f /opt/repository/Rakefile mk_repo'
|
11
12
|
$stdout.puts "Really run remote repo update on '#{Pkg::Config.yum_staging_server}'? [y,n]"
|
12
|
-
|
13
|
-
|
14
|
-
|
13
|
+
next unless Pkg::Util.ask_yes_or_no
|
14
|
+
|
15
|
+
Pkg::Repo.update_repo(
|
16
|
+
Pkg::Config.yum_staging_server,
|
17
|
+
command,
|
18
|
+
{
|
19
|
+
repo_name: Pkg::Paths.yum_repo_name,
|
20
|
+
repo_path: Pkg::Config.yum_repo_path,
|
21
|
+
repo_host: Pkg::Config.yum_staging_server
|
22
|
+
}
|
23
|
+
)
|
15
24
|
end
|
16
25
|
|
17
26
|
desc "Update all final yum repositories on '#{Pkg::Config.yum_staging_server}'"
|
18
27
|
task update_all_final_yum_repos: 'pl:fetch' do
|
19
28
|
command = Pkg::Config.yum_repo_command || 'rake -f /opt/repository/Rakefile mk_repo'
|
20
29
|
$stdout.puts "Really run remote repo update on '#{Pkg::Config.yum_staging_server}'? [y,n]"
|
21
|
-
|
22
|
-
|
23
|
-
|
30
|
+
next unless Pkg::Util.ask_yes_or_no
|
31
|
+
|
32
|
+
Pkg::Repo.update_repo(
|
33
|
+
Pkg::Config.yum_staging_server,
|
34
|
+
command,
|
35
|
+
{
|
36
|
+
repo_name: '',
|
37
|
+
repo_path: Pkg::Config.yum_repo_path,
|
38
|
+
repo_host: Pkg::Config.yum_staging_server
|
39
|
+
}
|
40
|
+
)
|
24
41
|
end
|
25
42
|
|
26
43
|
desc "Update '#{Pkg::Config.nonfinal_repo_name}' nightly yum repository on '#{Pkg::Config.yum_staging_server}'"
|
27
44
|
task update_nightlies_yum_repo: 'pl:fetch' do
|
28
45
|
command = Pkg::Config.yum_repo_command || 'rake -f /opt/repository-nightlies/Rakefile mk_repo'
|
29
46
|
$stdout.puts "Really run remote repo update on '#{Pkg::Config.yum_staging_server}'? [y,n]"
|
30
|
-
|
31
|
-
|
32
|
-
|
47
|
+
next unless Pkg::Util.ask_yes_or_no
|
48
|
+
|
49
|
+
Pkg::Repo.update_repo(
|
50
|
+
Pkg::Config.yum_staging_server,
|
51
|
+
command,
|
52
|
+
{
|
53
|
+
repo_name: Pkg::Config.nonfinal_repo_name,
|
54
|
+
repo_path: Pkg::Config.nonfinal_yum_repo_path,
|
55
|
+
repo_host: Pkg::Config.yum_staging_server
|
56
|
+
}
|
57
|
+
)
|
33
58
|
end
|
34
59
|
|
35
60
|
desc "Update all nightly yum repositories on '#{Pkg::Config.yum_staging_server}'"
|
36
61
|
task update_all_nightlies_yum_repos: 'pl:fetch' do
|
37
62
|
command = Pkg::Config.yum_repo_command || 'rake -f /opt/repository-nightlies/Rakefile mk_repo'
|
38
63
|
$stdout.puts "Really run remote repo update on '#{Pkg::Config.yum_staging_server}'? [y,n]"
|
39
|
-
|
40
|
-
|
41
|
-
|
64
|
+
next unless Pkg::Util.ask_yes_or_no
|
65
|
+
|
66
|
+
Pkg::Repo.update_repo(
|
67
|
+
Pkg::Config.yum_staging_server,
|
68
|
+
command,
|
69
|
+
{
|
70
|
+
repo_name: '',
|
71
|
+
repo_path: Pkg::Config.nonfinal_yum_repo_path,
|
72
|
+
repo_host: Pkg::Config.yum_staging_server
|
73
|
+
}
|
74
|
+
)
|
42
75
|
end
|
43
76
|
|
44
77
|
task freight: :update_apt_repo
|
@@ -46,17 +79,35 @@ namespace :pl do
|
|
46
79
|
desc "Update remote apt repository on '#{Pkg::Config.apt_signing_server}'"
|
47
80
|
task update_apt_repo: 'pl:fetch' do
|
48
81
|
$stdout.puts "Really run remote repo update on '#{Pkg::Config.apt_signing_server}'? [y,n]"
|
49
|
-
|
50
|
-
|
51
|
-
|
82
|
+
next unless Pkg::Util.ask_yes_or_no
|
83
|
+
|
84
|
+
Pkg::Repo.update_repo(
|
85
|
+
Pkg::Config.apt_signing_server,
|
86
|
+
Pkg::Config.apt_repo_command,
|
87
|
+
{
|
88
|
+
repo_name: Pkg::Paths.apt_repo_name,
|
89
|
+
repo_path: Pkg::Config.apt_repo_path,
|
90
|
+
repo_host: Pkg::Config.apt_host,
|
91
|
+
repo_url: Pkg::Config.apt_repo_url
|
92
|
+
}
|
93
|
+
)
|
52
94
|
end
|
53
95
|
|
54
96
|
desc "Update nightlies apt repository on '#{Pkg::Config.apt_signing_server}'"
|
55
97
|
task update_nightlies_apt_repo: 'pl:fetch' do
|
56
98
|
$stdout.puts "Really run remote repo update on '#{Pkg::Config.apt_signing_server}'? [y,n]"
|
57
|
-
|
58
|
-
|
59
|
-
|
99
|
+
next unless Pkg::Util.ask_yes_or_no
|
100
|
+
|
101
|
+
Pkg::Repo.update_repo(
|
102
|
+
Pkg::Config.apt_signing_server,
|
103
|
+
Pkg::Config.nonfinal_apt_repo_command,
|
104
|
+
{
|
105
|
+
repo_name: Pkg::Config.nonfinal_repo_name,
|
106
|
+
repo_path: Pkg::Config.nonfinal_apt_repo_path,
|
107
|
+
repo_host: Pkg::Config.apt_host,
|
108
|
+
repo_url: Pkg::Config.apt_repo_url
|
109
|
+
}
|
110
|
+
)
|
60
111
|
end
|
61
112
|
|
62
113
|
desc "Update apt and yum repos"
|
@@ -74,32 +125,31 @@ namespace :pl do
|
|
74
125
|
desc "Update remote ips repository on #{Pkg::Config.ips_host}"
|
75
126
|
task :update_ips_repo => 'pl:fetch' do
|
76
127
|
if Dir['pkg/ips/pkgs/**/*'].empty? && Dir['pkg/solaris/11/**/*'].empty?
|
77
|
-
$stdout.puts "
|
78
|
-
|
128
|
+
$stdout.puts "Error: there aren't any p5p packages in pkg/ips/pkgs or pkg/solaris/11."
|
129
|
+
next
|
130
|
+
end
|
79
131
|
|
80
|
-
|
81
|
-
|
82
|
-
else
|
83
|
-
source_dir = 'pkg/solaris/11/'
|
84
|
-
end
|
132
|
+
source_dir = 'pkg/solaris/11/'
|
133
|
+
source_dir = 'pkg/ips/pkgs/' unless Dir['pkg/ips/pkgs/**/*'].empty?
|
85
134
|
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
135
|
+
tmpdir, _ = Pkg::Util::Net.remote_execute(
|
136
|
+
Pkg::Config.ips_host,
|
137
|
+
'mktemp -d -p /var/tmp',
|
138
|
+
{ capture_output: true }
|
139
|
+
)
|
140
|
+
tmpdir.chomp!
|
92
141
|
|
93
|
-
|
142
|
+
Pkg::Util::Net.rsync_to(source_dir, Pkg::Config.ips_host, tmpdir)
|
94
143
|
|
95
|
-
|
96
|
-
|
144
|
+
remote_cmd = %(for pkg in #{tmpdir}/*.p5p; do
|
145
|
+
sudo pkgrecv -s $pkg -d #{Pkg::Config.ips_path} '*';
|
97
146
|
done)
|
98
147
|
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
148
|
+
Pkg::Util::Net.remote_execute(Pkg::Config.ips_host, remote_cmd)
|
149
|
+
Pkg::Util::Net.remote_execute(Pkg::Config.ips_host,
|
150
|
+
"sudo pkgrepo refresh -s #{Pkg::Config.ips_path}")
|
151
|
+
Pkg::Util::Net.remote_execute(Pkg::Config.ips_host,
|
152
|
+
"sudo /usr/sbin/svcadm restart svc:/application/pkg/server:#{Pkg::Config.ips_repo || 'default'}")
|
103
153
|
end
|
104
154
|
|
105
155
|
desc "Move dmg repos from #{Pkg::Config.dmg_staging_server} to #{Pkg::Config.dmg_host}"
|
@@ -235,6 +285,7 @@ namespace :pl do
|
|
235
285
|
|
236
286
|
desc "Sync signed apt repos from #{Pkg::Config.apt_signing_server} to Google Cloud Platform"
|
237
287
|
task :sync_apt_repo_to_gcp => 'pl:fetch' do
|
288
|
+
ssh = Pkg::Util::Tool.check_tool('ssh')
|
238
289
|
target_site = 'apt.repos.puppetlabs.com'
|
239
290
|
sync_command_puppet_6 = "#{GCP_REPO_SYNC} apt.repos.puppet.com puppet6"
|
240
291
|
sync_command_puppet_7 = "#{GCP_REPO_SYNC} apt.repos.puppet.com puppet7"
|
@@ -243,8 +294,11 @@ namespace :pl do
|
|
243
294
|
puts
|
244
295
|
|
245
296
|
Pkg::Util::Execution.retry_on_fail(times: 3) do
|
246
|
-
|
247
|
-
|
297
|
+
%x(#{ssh} #{Pkg::Config.apt_signing_server} '/bin/bash -l -c "#{sync_command_puppet_6}"')
|
298
|
+
end
|
299
|
+
|
300
|
+
Pkg::Util::Execution.retry_on_fail(times: 3) do
|
301
|
+
%x(#{ssh} #{Pkg::Config.apt_signing_server} '/bin/bash -l -c "#{sync_command_puppet_7}"')
|
248
302
|
end
|
249
303
|
end
|
250
304
|
# Keep 'deploy' for backward compatibility
|
@@ -292,6 +346,13 @@ namespace :pl do
|
|
292
346
|
end
|
293
347
|
end
|
294
348
|
|
349
|
+
##
|
350
|
+
## Here's where we start 'shipping' (old terminology) or 'staging' (current terminology)
|
351
|
+
## by copying local 'pkg' directories to the staging server.
|
352
|
+
##
|
353
|
+
## Note, that for debs, we conflate 'staging server' with 'signing server' because we
|
354
|
+
## must stage in th place where we sign.
|
355
|
+
##
|
295
356
|
desc "Ship mocked rpms to #{Pkg::Config.yum_staging_server}"
|
296
357
|
task ship_rpms: 'pl:fetch' do
|
297
358
|
Pkg::Util::Ship.ship_rpms('pkg', Pkg::Config.yum_repo_path)
|
@@ -302,6 +363,7 @@ namespace :pl do
|
|
302
363
|
Pkg::Util::Ship.ship_rpms('pkg', Pkg::Config.nonfinal_yum_repo_path, nonfinal: true)
|
303
364
|
end
|
304
365
|
|
366
|
+
## This is the old-style deb shipping
|
305
367
|
desc "Ship cow-built debs to #{Pkg::Config.apt_signing_server}"
|
306
368
|
task ship_debs: 'pl:fetch' do
|
307
369
|
Pkg::Util::Ship.ship_debs('pkg', Pkg::Config.apt_repo_staging_path, chattr: false)
|
@@ -309,7 +371,20 @@ namespace :pl do
|
|
309
371
|
|
310
372
|
desc "Ship nightly debs to #{Pkg::Config.apt_signing_server}"
|
311
373
|
task ship_nightly_debs: 'pl:fetch' do
|
312
|
-
Pkg::Util::Ship.ship_debs(
|
374
|
+
Pkg::Util::Ship.ship_debs(
|
375
|
+
'pkg', Pkg::Config.nonfinal_apt_repo_staging_path, chattr: false, nonfinal: true)
|
376
|
+
end
|
377
|
+
|
378
|
+
## This is the new-style apt stager
|
379
|
+
desc "Stage debs to #{Pkg::Config.apt_signing_server}"
|
380
|
+
task stage_stable_debs: 'pl:fetch' do
|
381
|
+
Pkg::Util::AptStagingServer.send_packages('pkg', 'stable')
|
382
|
+
end
|
383
|
+
task stage_debs: :stage_stable_debs
|
384
|
+
|
385
|
+
desc "Stage nightly debs to #{Pkg::Config.apt_signing_server}"
|
386
|
+
task stage_nightly_debs: 'pl:fetch' do
|
387
|
+
Pkg::Util::AptStagingServer.send_packages('pkg', 'nightly')
|
313
388
|
end
|
314
389
|
|
315
390
|
desc 'Ship built gem to rubygems.org, internal Gem mirror, and public file server'
|
@@ -325,12 +400,13 @@ namespace :pl do
|
|
325
400
|
puts 'This will ship to an internal gem mirror, a public file server, and rubygems.org'
|
326
401
|
puts "Do you want to start shipping the rubygem '#{gem_file}'?"
|
327
402
|
next unless Pkg::Util.ask_yes_or_no
|
403
|
+
|
328
404
|
Rake::Task['pl:ship_gem_to_rubygems'].execute(file: gem_file)
|
329
405
|
end
|
330
406
|
|
331
407
|
Rake::Task['pl:ship_gem_to_downloads'].invoke
|
332
408
|
else
|
333
|
-
|
409
|
+
warn 'Not shipping development gem using odd_even strategy for the sake of your users.'
|
334
410
|
end
|
335
411
|
end
|
336
412
|
end
|
@@ -342,6 +418,7 @@ namespace :pl do
|
|
342
418
|
if Pkg::Config.build_gem
|
343
419
|
fail 'Value `Pkg::Config.gem_host` not defined, skipping nightly ship' unless Pkg::Config.gem_host
|
344
420
|
fail 'Value `Pkg::Config.nonfinal_gem_path` not defined, skipping nightly ship' unless Pkg::Config.nonfinal_gem_path
|
421
|
+
|
345
422
|
FileList['pkg/*.gem'].each do |gem_file|
|
346
423
|
Pkg::Gem.ship_to_internal_mirror(gem_file)
|
347
424
|
end
|
@@ -451,22 +528,25 @@ namespace :pl do
|
|
451
528
|
|
452
529
|
desc 'UBER ship: ship all the things in pkg'
|
453
530
|
task uber_ship: 'pl:fetch' do
|
454
|
-
|
455
|
-
Rake::Task['pl:ship_rpms'].invoke
|
456
|
-
Rake::Task['pl:ship_debs'].invoke
|
457
|
-
Rake::Task['pl:ship_dmg'].invoke
|
458
|
-
Rake::Task['pl:ship_swix'].invoke
|
459
|
-
Rake::Task['pl:ship_nuget'].invoke
|
460
|
-
Rake::Task['pl:ship_tar'].invoke
|
461
|
-
Rake::Task['pl:ship_svr4'].invoke
|
462
|
-
Rake::Task['pl:ship_p5p'].invoke
|
463
|
-
Rake::Task['pl:ship_msi'].invoke
|
464
|
-
add_shipped_metrics(pe_version: ENV['PE_VER'], is_rc: !Pkg::Util::Version.final?) if Pkg::Config.benchmark
|
465
|
-
post_shipped_metrics if Pkg::Config.benchmark
|
466
|
-
else
|
531
|
+
unless Pkg::Util.confirm_ship(FileList['pkg/**/*'])
|
467
532
|
puts 'Ship canceled'
|
468
533
|
exit
|
469
534
|
end
|
535
|
+
|
536
|
+
Rake::Task['pl:ship_rpms'].invoke
|
537
|
+
Rake::Task['pl:ship_debs'].invoke
|
538
|
+
Rake::Task['pl:ship_dmg'].invoke
|
539
|
+
Rake::Task['pl:ship_swix'].invoke
|
540
|
+
Rake::Task['pl:ship_nuget'].invoke
|
541
|
+
Rake::Task['pl:ship_tar'].invoke
|
542
|
+
Rake::Task['pl:ship_svr4'].invoke
|
543
|
+
Rake::Task['pl:ship_p5p'].invoke
|
544
|
+
Rake::Task['pl:ship_msi'].invoke
|
545
|
+
|
546
|
+
if Pkg::Config.benchmark
|
547
|
+
add_shipped_metrics(pe_version: ENV['PE_VER'], is_rc: !Pkg::Util::Version.final?)
|
548
|
+
post_shipped_metrics
|
549
|
+
end
|
470
550
|
end
|
471
551
|
|
472
552
|
desc 'Create the rolling repo links'
|
@@ -530,7 +610,7 @@ namespace :pl do
|
|
530
610
|
{ extra_options: '-oBatchMode=yes' }
|
531
611
|
)
|
532
612
|
end
|
533
|
-
rescue
|
613
|
+
rescue StandardError
|
534
614
|
errs << "Unlocking the OSX keychain failed! Check the password in your .bashrc on #{Pkg::Config.osx_signing_server}"
|
535
615
|
end
|
536
616
|
|
@@ -565,70 +645,62 @@ namespace :pl do
|
|
565
645
|
# server path. That way we can separate out built artifacts from
|
566
646
|
# signed/actually shipped artifacts e.g. $path/shipped/ or $path/artifacts.
|
567
647
|
namespace :jenkins do
|
648
|
+
# The equivalent to invoking this task is calling Pkg::Util::Ship.ship_to_artifactory(local_directory, target)
|
568
649
|
desc 'ship pkg directory contents to artifactory'
|
569
650
|
task :ship_to_artifactory, :local_dir do |_t, args|
|
570
651
|
Pkg::Util::RakeUtils.invoke_task('pl:fetch')
|
571
652
|
unless Pkg::Config.project
|
572
|
-
fail "
|
653
|
+
fail "Error: 'project' must be set in build_defaults.yaml or " \
|
654
|
+
"in the 'PROJECT_OVERRIDE' environment variable."
|
573
655
|
end
|
656
|
+
|
574
657
|
artifactory = Pkg::ManageArtifactory.new(Pkg::Config.project, Pkg::Config.ref)
|
575
658
|
|
576
659
|
local_dir = args.local_dir || 'pkg'
|
577
|
-
|
578
|
-
|
579
|
-
if
|
580
|
-
1
|
581
|
-
elsif File.extname(b) =~ /(md5|sha\d+)/ && File.extname(a) !~ /(md5|sha\d+)/
|
582
|
-
-1
|
583
|
-
else
|
584
|
-
a <=> b
|
585
|
-
end
|
586
|
-
end
|
587
|
-
artifacts.each do |artifact|
|
588
|
-
if File.extname(artifact) == ".yaml" || File.extname(artifact) == ".json"
|
589
|
-
artifactory.deploy_package(artifact)
|
590
|
-
elsif artifactory.package_exists_on_artifactory?(artifact)
|
591
|
-
warn "Attempt to upload '#{artifact}' failed. Package already exists!"
|
592
|
-
else
|
660
|
+
Dir.glob("#{local_dir}/**/*").reject { |e| File.directory? e }.each do |artifact|
|
661
|
+
# Always deploy yamls and jsons
|
662
|
+
if artifact.end_with?('.yaml', '.json')
|
593
663
|
artifactory.deploy_package(artifact)
|
664
|
+
next
|
594
665
|
end
|
666
|
+
|
667
|
+
# Don't deploy if the package already exists
|
668
|
+
if artifactory.package_exists_on_artifactory?(artifact)
|
669
|
+
warn "Attempt to upload '#{artifact}' failed. Package already exists."
|
670
|
+
next
|
671
|
+
end
|
672
|
+
|
673
|
+
artifactory.deploy_package(artifact)
|
595
674
|
end
|
596
675
|
end
|
597
676
|
|
598
|
-
|
677
|
+
# The equivalent to invoking this task is calling Pkg::Util::Ship.ship(local_directory, target)
|
678
|
+
desc 'Ship "pkg" directory contents to distribution server'
|
599
679
|
task :ship, :target, :local_dir do |_t, args|
|
600
680
|
Pkg::Util::RakeUtils.invoke_task('pl:fetch')
|
601
681
|
unless Pkg::Config.project
|
602
|
-
fail "
|
682
|
+
fail "Error: 'project' must be set in build_defaults.yaml or " \
|
683
|
+
"in the 'PROJECT_OVERRIDE' environment variable."
|
603
684
|
end
|
685
|
+
|
604
686
|
target = args.target || 'artifacts'
|
605
687
|
local_dir = args.local_dir || 'pkg'
|
606
|
-
project_basedir =
|
607
|
-
|
688
|
+
project_basedir = File.join(
|
689
|
+
Pkg::Config.jenkins_repo_path, Pkg::Config.project, Pkg::Config.ref
|
690
|
+
)
|
691
|
+
artifact_dir = File.join(project_basedir, target)
|
608
692
|
|
609
693
|
# For EZBake builds, we also want to include the ezbake.manifest file to
|
610
694
|
# get a snapshot of this build and all dependencies. We eventually will
|
611
695
|
# create a yaml version of this file, but until that point we want to
|
612
696
|
# make the original ezbake.manifest available
|
613
|
-
|
614
|
-
ezbake_manifest = File.join('ext', 'ezbake.manifest')
|
615
|
-
if File.exist?(ezbake_manifest)
|
616
|
-
cp(ezbake_manifest, File.join(local_dir, "#{Pkg::Config.ref}.ezbake.manifest"))
|
617
|
-
end
|
618
|
-
ezbake_yaml = File.join("ext", "ezbake.manifest.yaml")
|
619
|
-
if File.exists?(ezbake_yaml)
|
620
|
-
cp(ezbake_yaml, File.join(local_dir, "#{Pkg::Config.ref}.ezbake.manifest.yaml"))
|
621
|
-
end
|
697
|
+
Pkg::Util::EZbake.add_manifest(local_dir)
|
622
698
|
|
623
699
|
# Inside build_metadata*.json files there is additional metadata containing
|
624
700
|
# information such as git ref and dependencies that are needed at build
|
625
701
|
# time. If these files exist, copy them downstream.
|
626
702
|
# Typically these files are named 'ext/build_metadata.<project>.<platform>.json'
|
627
|
-
|
628
|
-
build_metadata_json_files.each do |source_file|
|
629
|
-
target_file = File.join(local_dir, "#{Pkg::Config.ref}.#{File.basename(source_file)}")
|
630
|
-
cp(source_file, target_file)
|
631
|
-
end
|
703
|
+
Pkg::Util::BuildMetadata.add_misc_json_files(local_dir)
|
632
704
|
|
633
705
|
# Sadly, the packaging repo cannot yet act on its own, without living
|
634
706
|
# inside of a packaging-repo compatible project. This means in order to
|
@@ -664,54 +736,11 @@ namespace :pl do
|
|
664
736
|
# and if the source package exists before linking. Searching for the
|
665
737
|
# packages has been restricted specifically to just the pkg/windows dir
|
666
738
|
# on purpose, as this is where we currently have all windows packages
|
667
|
-
# building to.
|
668
|
-
|
669
|
-
# -Sean P. M. 08/12/16
|
670
|
-
|
671
|
-
{
|
672
|
-
'windows' => ['x86', 'x64'],
|
673
|
-
'windowsfips' => ['x64']
|
674
|
-
}.each_pair do |platform, archs|
|
675
|
-
packages = Dir["#{local_dir}/#{platform}/*"]
|
676
|
-
|
677
|
-
archs.each do |arch|
|
678
|
-
package_version = Pkg::Util::Git.describe.tr('-', '.')
|
679
|
-
package_filename = File.join(local_dir, platform, "#{Pkg::Config.project}-#{package_version}-#{arch}.msi")
|
680
|
-
link_filename = File.join(local_dir, platform, "#{Pkg::Config.project}-#{arch}.msi")
|
681
|
-
|
682
|
-
next unless !packages.include?(link_filename) && packages.include?(package_filename)
|
683
|
-
# Dear future code spelunkers:
|
684
|
-
# Using symlinks instead of hard links causes failures when we try
|
685
|
-
# to set these files to be immutable. Also be wary of whether the
|
686
|
-
# linking utility you're using expects the source path to be relative
|
687
|
-
# to the link target or pwd.
|
688
|
-
#
|
689
|
-
FileUtils.ln(package_filename, link_filename)
|
690
|
-
end
|
691
|
-
end
|
692
|
-
|
693
|
-
Pkg::Util::Execution.retry_on_fail(times: 3) do
|
694
|
-
Pkg::Util::Net.remote_execute(Pkg::Config.distribution_server, "mkdir --mode=775 -p #{project_basedir}")
|
695
|
-
Pkg::Util::Net.remote_execute(Pkg::Config.distribution_server, "mkdir -p #{artifact_dir}")
|
696
|
-
Pkg::Util::Net.rsync_to("#{local_dir}/", Pkg::Config.distribution_server, "#{artifact_dir}/", extra_flags: ['--ignore-existing', '--exclude repo_configs'])
|
697
|
-
end
|
698
|
-
|
699
|
-
# In order to get a snapshot of what this build looked like at the time
|
700
|
-
# of shipping, we also generate and ship the params file
|
701
|
-
#
|
702
|
-
Pkg::Config.config_to_yaml(local_dir)
|
703
|
-
Pkg::Util::Execution.retry_on_fail(:times => 3) do
|
704
|
-
Pkg::Util::Net.rsync_to("#{local_dir}/#{Pkg::Config.ref}.yaml", Pkg::Config.distribution_server, "#{artifact_dir}/", extra_flags: ["--exclude repo_configs"])
|
705
|
-
end
|
706
|
-
|
707
|
-
# If we just shipped a tagged version, we want to make it immutable
|
708
|
-
files = Dir.glob("#{local_dir}/**/*").select { |f| File.file?(f) and !f.include? "#{Pkg::Config.ref}.yaml" }.map do |file|
|
709
|
-
"#{artifact_dir}/#{file.sub(/^#{local_dir}\//, '')}"
|
710
|
-
end
|
739
|
+
# building to.
|
740
|
+
Pkg::Util::Windows.add_msi_links(local_dir)
|
711
741
|
|
712
|
-
|
713
|
-
Pkg::Util::
|
714
|
-
Pkg::Util::Net.remote_set_immutable(Pkg::Config.distribution_server, files)
|
742
|
+
# Send packages to the distribution server.
|
743
|
+
Pkg::Util::DistributionServer.send_packages(local_dir, artifact_dir)
|
715
744
|
end
|
716
745
|
|
717
746
|
desc 'Ship generated repository configs to the distribution server'
|
data/tasks/sign.rake
CHANGED
@@ -107,8 +107,8 @@ namespace :pl do
|
|
107
107
|
##
|
108
108
|
# This crazy piece of work establishes a remote repo on the signing
|
109
109
|
# server, ships our packages out to it, signs them, and brings them back.
|
110
|
-
#
|
111
110
|
namespace :jenkins do
|
111
|
+
# The equivalent to invoking this task is calling Pkg::Util::Sign.sign_all(root_directory)
|
112
112
|
desc "Sign all locally staged packages on #{Pkg::Config.signing_server}"
|
113
113
|
task :sign_all, :root_dir do |_t, args|
|
114
114
|
Pkg::Util::RakeUtils.invoke_task('pl:fetch')
|