packaging 0.88.77 → 0.99.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 +5 -5
- data/README.md +128 -74
- data/lib/packaging/artifactory.rb +60 -433
- data/lib/packaging/config/params.rb +7 -28
- data/lib/packaging/config.rb +50 -150
- data/lib/packaging/deb/repo.rb +19 -20
- data/lib/packaging/gem.rb +83 -41
- data/lib/packaging/ips.rb +57 -0
- data/lib/packaging/msi.rb +89 -0
- data/lib/packaging/nuget.rb +1 -1
- data/lib/packaging/osx.rb +36 -0
- data/lib/packaging/paths.rb +87 -225
- data/lib/packaging/platforms.rb +416 -443
- data/lib/packaging/repo.rb +22 -122
- data/lib/packaging/retrieve.rb +7 -36
- data/lib/packaging/rpm/repo.rb +8 -5
- data/lib/packaging/tar.rb +0 -9
- data/lib/packaging/util/date.rb +0 -5
- data/lib/packaging/util/execution.rb +2 -2
- data/lib/packaging/util/git.rb +1 -1
- data/lib/packaging/util/gpg.rb +1 -5
- data/lib/packaging/util/net.rb +37 -79
- data/lib/packaging/util/rake_utils.rb +0 -1
- data/lib/packaging/util/ship.rb +13 -142
- data/lib/packaging/util/tool.rb +1 -1
- data/lib/packaging/util/version.rb +0 -8
- data/lib/packaging/util.rb +2 -2
- data/lib/packaging.rb +3 -3
- data/spec/fixtures/config/params.yaml +2 -0
- data/spec/lib/packaging/artifactory_spec.rb +16 -66
- data/spec/lib/packaging/config_spec.rb +29 -49
- data/spec/lib/packaging/deb/repo_spec.rb +7 -16
- data/spec/lib/packaging/paths_spec.rb +56 -321
- data/spec/lib/packaging/platforms_spec.rb +21 -46
- data/spec/lib/packaging/repo_spec.rb +40 -78
- data/spec/lib/packaging/retrieve_spec.rb +8 -47
- data/spec/lib/packaging/rpm/repo_spec.rb +4 -4
- data/spec/lib/packaging/tar_spec.rb +40 -34
- data/spec/lib/packaging/util/git_tag_spec.rb +1 -1
- data/spec/lib/packaging/util/gpg_spec.rb +1 -1
- data/spec/lib/packaging/util/net_spec.rb +15 -35
- data/spec/lib/packaging/util/ship_spec.rb +63 -145
- data/spec/spec_helper.rb +14 -0
- data/tasks/00_utils.rake +6 -4
- data/tasks/apple.rake +0 -2
- data/tasks/config.rake +0 -5
- data/tasks/education.rake +5 -5
- data/tasks/fetch.rake +14 -17
- data/tasks/gem.rake +121 -134
- data/tasks/jenkins.rake +7 -51
- data/tasks/nightly_repos.rake +69 -20
- data/tasks/pe_ship.rake +11 -16
- data/tasks/retrieve.rake +6 -13
- data/tasks/ship.rake +256 -196
- data/tasks/sign.rake +135 -63
- data/tasks/tar.rake +6 -0
- data/templates/packaging.xml.erb +7 -9
- data/templates/repo.xml.erb +3 -6
- metadata +27 -80
- data/lib/packaging/archive.rb +0 -126
- data/lib/packaging/artifactory/extensions.rb +0 -94
- data/lib/packaging/config/validations.rb +0 -13
- data/lib/packaging/metrics.rb +0 -15
- data/lib/packaging/sign/deb.rb +0 -9
- data/lib/packaging/sign/dmg.rb +0 -41
- data/lib/packaging/sign/ips.rb +0 -57
- data/lib/packaging/sign/msi.rb +0 -124
- data/lib/packaging/sign/rpm.rb +0 -115
- data/lib/packaging/sign.rb +0 -8
- data/spec/lib/packaging/gem_spec.rb +0 -86
- data/spec/lib/packaging/sign_spec.rb +0 -133
- data/tasks/archive.rake +0 -69
data/tasks/gem.rake
CHANGED
@@ -1,159 +1,146 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
1
|
+
if Pkg::Config.build_gem
|
2
|
+
require 'rubygems/package_task'
|
3
|
+
|
4
|
+
def glob_gem_files
|
5
|
+
gem_files = []
|
6
|
+
gem_excludes_file_list = []
|
7
|
+
gem_excludes_raw = Pkg::Config.gem_excludes.nil? ? [] : Pkg::Config.gem_excludes.split(' ')
|
8
|
+
gem_excludes_raw << 'ext/packaging'
|
9
|
+
gem_excludes_raw << 'pkg'
|
10
|
+
gem_excludes_raw.each do |exclude|
|
11
|
+
if File.directory?(exclude)
|
12
|
+
gem_excludes_file_list += FileList["#{exclude}/**/*"]
|
13
|
+
else
|
14
|
+
gem_excludes_file_list << exclude
|
15
|
+
end
|
14
16
|
end
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
17
|
+
files = FileList[Pkg::Config.gem_files.split(' ')]
|
18
|
+
files.each do |file|
|
19
|
+
if File.directory?(file)
|
20
|
+
gem_files += FileList["#{file}/**/*"]
|
21
|
+
else
|
22
|
+
gem_files << file
|
23
|
+
end
|
22
24
|
end
|
25
|
+
gem_files -= gem_excludes_file_list
|
23
26
|
end
|
24
|
-
gem_files -= gem_excludes_file_list
|
25
|
-
end
|
26
|
-
|
27
|
-
def add_gem_dependency(opts = {})
|
28
|
-
spec = opts[:spec]
|
29
|
-
version = opts[:version]
|
30
|
-
type = opts[:type].to_s
|
31
|
-
gem = opts[:gem].to_s
|
32
|
-
if opts[:version].nil? or opts[:version].empty?
|
33
|
-
spec.send("add_#{type}_dependency".to_sym, gem)
|
34
|
-
else
|
35
|
-
spec.send("add_#{type}_dependency".to_sym, gem, version)
|
36
|
-
end
|
37
|
-
spec
|
38
|
-
end
|
39
27
|
|
40
|
-
def
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
s.description = Pkg::Config.gem_description unless Pkg::Config.gem_description.nil?
|
52
|
-
s.files = glob_gem_files unless glob_gem_files.nil?
|
53
|
-
s.executables = Pkg::Config.gem_executables unless Pkg::Config.gem_executables.nil?
|
54
|
-
s.require_path = Pkg::Config.gem_require_path unless Pkg::Config.gem_require_path.nil?
|
55
|
-
s.required_ruby_version = Pkg::Config.gem_required_ruby_version unless Pkg::Config.gem_required_ruby_version.nil?
|
56
|
-
s.required_rubygems_version = Pkg::Config.gem_required_rubygems_version unless Pkg::Config.gem_required_rubygems_version.nil?
|
57
|
-
s.test_files = FileList[Pkg::Config.gem_test_files.split(' ')] unless Pkg::Config.gem_test_files.nil?
|
58
|
-
s.rubyforge_project = Pkg::Config.gem_forge_project unless Pkg::Config.gem_forge_project.nil?
|
59
|
-
Pkg::Config.gem_rdoc_options.each do |option|
|
60
|
-
s.rdoc_options << option
|
61
|
-
end unless Pkg::Config.gem_rdoc_options.nil?
|
28
|
+
def add_gem_dependency(opts = {})
|
29
|
+
spec = opts[:spec]
|
30
|
+
version = opts[:version]
|
31
|
+
type = opts[:type].to_s
|
32
|
+
gem = opts[:gem].to_s
|
33
|
+
if opts[:version].nil? or opts[:version].empty?
|
34
|
+
spec.send("add_#{type}_dependency".to_sym, gem)
|
35
|
+
else
|
36
|
+
spec.send("add_#{type}_dependency".to_sym, gem, version)
|
37
|
+
end
|
38
|
+
spec
|
62
39
|
end
|
63
40
|
|
64
|
-
|
65
|
-
spec =
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
41
|
+
def create_default_gem_spec
|
42
|
+
spec = Gem::Specification.new do |s|
|
43
|
+
s.name = Pkg::Config.project unless Pkg::Config.project.nil?
|
44
|
+
s.name = Pkg::Config.gem_name unless Pkg::Config.gem_name.nil?
|
45
|
+
s.version = Pkg::Config.gemversion unless Pkg::Config.gemversion.nil?
|
46
|
+
s.author = Pkg::Config.author unless Pkg::Config.author.nil?
|
47
|
+
s.email = Pkg::Config.email unless Pkg::Config.email.nil?
|
48
|
+
s.homepage = Pkg::Config.homepage unless Pkg::Config.homepage.nil?
|
49
|
+
s.summary = Pkg::Config.summary unless Pkg::Config.summary.nil?
|
50
|
+
s.summary = Pkg::Config.gem_summary unless Pkg::Config.gem_summary.nil?
|
51
|
+
s.description = Pkg::Config.description unless Pkg::Config.description.nil?
|
52
|
+
s.description = Pkg::Config.gem_description unless Pkg::Config.gem_description.nil?
|
53
|
+
s.files = glob_gem_files unless glob_gem_files.nil?
|
54
|
+
s.executables = Pkg::Config.gem_executables unless Pkg::Config.gem_executables.nil?
|
55
|
+
s.require_path = Pkg::Config.gem_require_path unless Pkg::Config.gem_require_path.nil?
|
56
|
+
s.required_ruby_version = Pkg::Config.gem_required_ruby_version unless Pkg::Config.gem_required_ruby_version.nil?
|
57
|
+
s.required_rubygems_version = Pkg::Config.gem_required_rubygems_version unless Pkg::Config.gem_required_rubygems_version.nil?
|
58
|
+
s.test_files = FileList[Pkg::Config.gem_test_files.split(' ')] unless Pkg::Config.gem_test_files.nil?
|
59
|
+
s.rubyforge_project = Pkg::Config.gem_forge_project unless Pkg::Config.gem_forge_project.nil?
|
60
|
+
Pkg::Config.gem_rdoc_options.each do |option|
|
61
|
+
s.rdoc_options << option
|
62
|
+
end unless Pkg::Config.gem_rdoc_options.nil?
|
63
|
+
end
|
77
64
|
|
78
|
-
|
79
|
-
|
65
|
+
Pkg::Config.gem_runtime_dependencies.each do |gem, version|
|
66
|
+
spec = add_gem_dependency(:spec => spec, :gem => gem, :version => version, :type => :runtime)
|
67
|
+
end unless Pkg::Config.gem_runtime_dependencies.nil?
|
80
68
|
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
Rake::Task[:gem].invoke
|
86
|
-
rm_rf File.join("pkg", gembuilddir)
|
87
|
-
mv Dir.glob("pkg/#{Pkg::Config.gem_name}-#{Pkg::Config.gemversion}*.gem"), File.join(Pkg::Config.project_root, "pkg")
|
88
|
-
end
|
69
|
+
Pkg::Config.gem_development_dependencies.each do |gem, version|
|
70
|
+
spec = add_gem_dependency(:spec => spec, :gem => gem, :version => version, :type => :development)
|
71
|
+
end unless Pkg::Config.gem_development_dependencies.nil?
|
72
|
+
spec
|
89
73
|
end
|
90
74
|
|
91
|
-
|
92
|
-
|
93
|
-
|
75
|
+
def create_gem(spec, gembuilddir)
|
76
|
+
gem_files = glob_gem_files + FileList[(Pkg::Config.gem_test_files || '').split(' ')]
|
77
|
+
workdir = File.join(Pkg::Util::File.mktemp)
|
94
78
|
|
95
|
-
|
96
|
-
|
97
|
-
create_gem(spec, "#{Pkg::Config.gem_name}-#{Pkg::Config.gemversion}")
|
98
|
-
end
|
99
|
-
|
100
|
-
def unknown_gems_platform?(platform)
|
101
|
-
return true if platform.os == "unknown"
|
102
|
-
false
|
103
|
-
end
|
79
|
+
bench = Benchmark.realtime do
|
80
|
+
Pkg::Util::File.install_files_into_dir(gem_files, workdir)
|
104
81
|
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
spec.platform = pf
|
113
|
-
dependency_hash.each do |type, gems|
|
114
|
-
t = case type
|
115
|
-
when "gem_runtime_dependencies"
|
116
|
-
"runtime"
|
117
|
-
when "gem_development_dependencies"
|
118
|
-
"development"
|
119
|
-
else
|
120
|
-
fail "Platform specific gem dependency type must be 'gem_runtime_dependencies' or 'gem_development_dependencies', not '#{type}'"
|
121
|
-
end
|
122
|
-
gems.each do |gem, version|
|
123
|
-
spec = add_gem_dependency(:spec => spec, :gem => gem, :version => version, :type => t)
|
82
|
+
cd workdir do
|
83
|
+
gem_task = Gem::PackageTask.new(spec)
|
84
|
+
gem_task.define
|
85
|
+
Rake::Task[:gem].reenable
|
86
|
+
Rake::Task[:gem].invoke
|
87
|
+
rm_rf File.join("pkg", gembuilddir)
|
88
|
+
mv Dir.glob("pkg/#{Pkg::Config.gem_name}-#{Pkg::Config.gemversion}*.gem"), File.join(Pkg::Config.project_root, "pkg")
|
124
89
|
end
|
125
90
|
end
|
126
|
-
|
91
|
+
|
92
|
+
rm_rf workdir
|
93
|
+
puts "Finished building in: #{bench}"
|
127
94
|
end
|
128
|
-
end
|
129
95
|
|
130
|
-
def
|
131
|
-
|
132
|
-
|
133
|
-
return
|
96
|
+
def create_default_gem
|
97
|
+
spec = create_default_gem_spec
|
98
|
+
create_gem(spec, "#{Pkg::Config.gem_name}-#{Pkg::Config.gemversion}")
|
134
99
|
end
|
135
100
|
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
create_platform_specific_gems
|
101
|
+
def unknown_gems_platform?(platform)
|
102
|
+
return true if platform.os == "unknown"
|
103
|
+
false
|
140
104
|
end
|
141
|
-
end
|
142
105
|
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
106
|
+
def create_platform_specific_gems
|
107
|
+
Pkg::Config.gem_platform_dependencies.each do |platform, dependency_hash|
|
108
|
+
spec = create_default_gem_spec
|
109
|
+
pf = Gem::Platform.new(platform)
|
110
|
+
fail "
|
111
|
+
Platform: '#{platform}' is not recognized by rubygems.
|
112
|
+
This is probably an erroneous 'gem_platform_dependencies' entry!" if unknown_gems_platform?(pf)
|
113
|
+
spec.platform = pf
|
114
|
+
dependency_hash.each do |type, gems|
|
115
|
+
t = case type
|
116
|
+
when "gem_runtime_dependencies"
|
117
|
+
"runtime"
|
118
|
+
when "gem_development_dependencies"
|
119
|
+
"development"
|
120
|
+
else
|
121
|
+
fail "Platform specific gem dependency type must be 'gem_runtime_dependencies' or 'gem_development_dependencies', not '#{type}'"
|
122
|
+
end
|
123
|
+
gems.each do |gem, version|
|
124
|
+
spec = add_gem_dependency(:spec => spec, :gem => gem, :version => version, :type => t)
|
125
|
+
end
|
126
|
+
end
|
127
|
+
create_gem(spec, "#{Pkg::Config.gem_name}-#{Pkg::Config.gemversion}-#{platform}")
|
128
|
+
end
|
147
129
|
end
|
148
130
|
|
149
|
-
|
150
|
-
|
151
|
-
|
131
|
+
namespace :package do
|
132
|
+
desc "Build a gem - All gems if platform specific"
|
133
|
+
task :gem => ["clean"] do
|
134
|
+
mkdir_p File.join(Pkg::Config.project_root, "pkg")
|
135
|
+
create_default_gem
|
136
|
+
if Pkg::Config.gem_platform_dependencies
|
137
|
+
create_platform_specific_gems
|
138
|
+
end
|
139
|
+
end
|
152
140
|
end
|
153
|
-
end
|
154
141
|
|
155
|
-
# An alias task to simplify our remote logic in jenkins.rake
|
156
|
-
namespace :pl do
|
157
|
-
|
158
|
-
|
142
|
+
# An alias task to simplify our remote logic in jenkins.rake
|
143
|
+
namespace :pl do
|
144
|
+
task :gem => "package:gem"
|
145
|
+
end
|
159
146
|
end
|
data/tasks/jenkins.rake
CHANGED
@@ -52,14 +52,14 @@
|
|
52
52
|
#
|
53
53
|
# pushd git_repo
|
54
54
|
#
|
55
|
-
# ###
|
56
|
-
#
|
55
|
+
# ### Clone the packaging repo
|
56
|
+
# rake package:bootstrap
|
57
57
|
#
|
58
58
|
# ### Perform the build
|
59
|
-
#
|
59
|
+
# rake pl:build_from_params PARAMS_FILE=$WORKSPACE/BUILD_PROPERTIES
|
60
60
|
#
|
61
61
|
# ### Send the results
|
62
|
-
#
|
62
|
+
# rake pl:jenkins:ship["artifacts"] PARAMS_FILE=$WORKSPACE/BUILD_PROPERTIES
|
63
63
|
#
|
64
64
|
# popd
|
65
65
|
# popd
|
@@ -75,7 +75,7 @@
|
|
75
75
|
# if [ -n "$DOWNSTREAM_JOB" ] ; then
|
76
76
|
# pushd project
|
77
77
|
# pushd git_repo
|
78
|
-
#
|
78
|
+
# rake pl:jenkins:post["$DOWNSTREAM_JOB"] PARAMS_FILE=$WORKSPACE/BUILD_PROPERTIES
|
79
79
|
# popd
|
80
80
|
# popd
|
81
81
|
# fi
|
@@ -257,33 +257,7 @@ namespace :pl do
|
|
257
257
|
ship_debs
|
258
258
|
ship_dmg
|
259
259
|
ship_swix
|
260
|
-
ship_tar
|
261
260
|
ship_msi
|
262
|
-
ship_gem
|
263
|
-
)
|
264
|
-
tasks.map { |t| "pl:#{t}" }.each do |t|
|
265
|
-
puts "Running #{t} . . ."
|
266
|
-
Rake::Task[t].invoke
|
267
|
-
end
|
268
|
-
# mark the build as successfully shipped
|
269
|
-
Rake::Task["pl:jenkins:ship"].invoke("shipped")
|
270
|
-
# add the release to release-metrics
|
271
|
-
begin
|
272
|
-
Rake::Task["pl:update_release_metrics"].invoke
|
273
|
-
rescue => e
|
274
|
-
fail "Error updating release-metrics:\n#{e}\nYou will need to add this release manually."
|
275
|
-
end
|
276
|
-
end
|
277
|
-
|
278
|
-
task :stage_nightlies => "pl:fetch" do
|
279
|
-
tasks = %w(
|
280
|
-
jenkins:retrieve
|
281
|
-
jenkins:sign_all
|
282
|
-
ship_nightly_rpms
|
283
|
-
ship_nightly_debs
|
284
|
-
ship_nightly_dmg
|
285
|
-
ship_nightly_swix
|
286
|
-
ship_nightly_msi
|
287
261
|
)
|
288
262
|
tasks.map { |t| "pl:#{t}" }.each do |t|
|
289
263
|
puts "Running #{t} . . ."
|
@@ -292,8 +266,8 @@ namespace :pl do
|
|
292
266
|
end
|
293
267
|
|
294
268
|
task :ship_nightlies => "pl:fetch" do
|
295
|
-
Rake::Task['pl:jenkins:
|
296
|
-
Rake::Task['pl:remote:
|
269
|
+
Rake::Task['pl:jenkins:uber_ship_lite'].invoke
|
270
|
+
Rake::Task['pl:remote:update_foss_repos'].invoke
|
297
271
|
Rake::Task['pl:remote:deploy_nightlies_to_s3'].invoke
|
298
272
|
end
|
299
273
|
|
@@ -304,24 +278,6 @@ namespace :pl do
|
|
304
278
|
Rake::Task['pl:remote:deploy_to_rsync_server'].invoke
|
305
279
|
end
|
306
280
|
|
307
|
-
task :stage_release_packages => "pl:fetch" do
|
308
|
-
Rake::Task['pl:jenkins:uber_ship_lite'].invoke
|
309
|
-
# Deb packages only appear in the freight directory until repo updates.
|
310
|
-
# We must run that before creating symlinks so we can link from packages
|
311
|
-
# in the apt repository.
|
312
|
-
Rake::Task['pl:remote:update_apt_repo'].invoke
|
313
|
-
Pkg::Util::Ship.update_release_package_symlinks('pkg')
|
314
|
-
end
|
315
|
-
|
316
|
-
task :stage_nightly_release_packages => "pl:fetch" do
|
317
|
-
Rake::Task['pl:jenkins:stage_nightlies'].invoke
|
318
|
-
# Deb packages only appear in the freight directory until repo updates.
|
319
|
-
# We must run that before creating symlinks so we can link from packages
|
320
|
-
# in the apt repository.
|
321
|
-
Rake::Task['pl:remote:update_nightlies_apt_repo'].invoke
|
322
|
-
Pkg::Util::Ship.update_release_package_symlinks('pkg', true)
|
323
|
-
end
|
324
|
-
|
325
281
|
desc "Retrieve packages built by jenkins, sign, and ship all!"
|
326
282
|
task :uber_ship => "pl:fetch" do
|
327
283
|
uber_tasks = %w(
|
data/tasks/nightly_repos.rake
CHANGED
@@ -18,18 +18,13 @@ namespace :pl do
|
|
18
18
|
Pkg::Util::File.empty_dir?("repos") and fail "There were no repos found in repos/. Maybe something in the pipeline failed?"
|
19
19
|
signing_bundle = ENV['SIGNING_BUNDLE']
|
20
20
|
|
21
|
-
remote_repo = Pkg::Util::Net.
|
21
|
+
remote_repo = Pkg::Util::Net.remote_bootstrap(signing_server, 'HEAD', nil, signing_bundle)
|
22
22
|
build_params = Pkg::Util::Net.remote_buildparams(signing_server, Pkg::Config)
|
23
23
|
Pkg::Util::Net.rsync_to('repos', signing_server, remote_repo)
|
24
|
-
|
25
|
-
cd #{remote_repo} ;
|
26
|
-
#{Pkg::Util::Net.remote_bundle_install_command}
|
27
|
-
bundle exec rake pl:jenkins:sign_repos GPG_KEY=#{Pkg::Util::Gpg.key} PARAMS_FILE=#{build_params}
|
28
|
-
DOC
|
29
|
-
Pkg::Util::Net.remote_execute(signing_server, rake_command)
|
24
|
+
Pkg::Util::Net.remote_ssh_cmd(signing_server, "cd #{remote_repo} ; rake pl:jenkins:sign_repos GPG_KEY=#{Pkg::Util::Gpg.key} PARAMS_FILE=#{build_params}")
|
30
25
|
Pkg::Util::Net.rsync_from("#{remote_repo}/repos/", signing_server, target)
|
31
|
-
Pkg::Util::Net.
|
32
|
-
Pkg::Util::Net.
|
26
|
+
Pkg::Util::Net.remote_ssh_cmd(signing_server, "rm -rf #{remote_repo}")
|
27
|
+
Pkg::Util::Net.remote_ssh_cmd(signing_server, "rm #{build_params}")
|
33
28
|
puts "Signed packages staged in '#{target}' directory"
|
34
29
|
end
|
35
30
|
|
@@ -38,9 +33,9 @@ DOC
|
|
38
33
|
Pkg::Rpm::Repo.create_local_repos('repos')
|
39
34
|
Pkg::Rpm::Repo.sign_repos('repos')
|
40
35
|
Pkg::Deb::Repo.sign_repos('repos', 'Apt repository for signed builds')
|
41
|
-
Pkg::
|
42
|
-
Pkg::
|
43
|
-
Pkg::
|
36
|
+
Pkg::OSX.sign('repos') unless Dir['repos/apple/**/*.dmg'].empty?
|
37
|
+
Pkg::IPS.sign('repos') unless Dir['repos/solaris/11/**/*.p5p'].empty?
|
38
|
+
Pkg::MSI.sign('repos') unless Dir['repos/windows/**/*.msi'].empty?
|
44
39
|
end
|
45
40
|
|
46
41
|
task :ship_signed_repos, [:target_prefix] => "pl:fetch" do |t, args|
|
@@ -48,7 +43,7 @@ DOC
|
|
48
43
|
target_dir = "#{Pkg::Config.jenkins_repo_path}/#{Pkg::Config.project}/#{Pkg::Config.ref}/#{target_prefix}_repos"
|
49
44
|
Pkg::Util::Execution.retry_on_fail(:times => 3) do
|
50
45
|
# Ship the now signed repos to the distribution server
|
51
|
-
Pkg::Util::Net.
|
46
|
+
Pkg::Util::Net.remote_ssh_cmd(Pkg::Config.distribution_server, "mkdir -p #{target_dir}")
|
52
47
|
Pkg::Util::Net.rsync_to("#{target_prefix}_repos/", Pkg::Config.distribution_server, target_dir)
|
53
48
|
end
|
54
49
|
end
|
@@ -68,6 +63,60 @@ DOC
|
|
68
63
|
Pkg::Repo.create_all_repo_archives(name_of_archive, versioning)
|
69
64
|
end
|
70
65
|
|
66
|
+
# This is pretty similar to the 'pack_signed_repo' task. The difference here is that instead
|
67
|
+
# of creating a tarball for each repo passed, it adds each repo to a single archive, creating
|
68
|
+
# one 'all' tarball with all of the repos. This is useful for cutomers who have a PE master with
|
69
|
+
# no internet access. They can unpack the puppet-agent-all tarball into the location that
|
70
|
+
# pe_repo expects and use simplified agent install without needing internet access, or having to
|
71
|
+
# manually download each agent that they need to feed to pe_repo.
|
72
|
+
# This task should be invoked after prepare_signed_repos, so that there are repos to pack up.
|
73
|
+
task :pack_all_signed_repos, [:path_to_repo, :name_of_archive, :versioning] => ["pl:fetch"] do |t, args|
|
74
|
+
# path_to_repo should be relative to ./pkg
|
75
|
+
name_of_archive = args.name_of_archive or fail ":name_of_archive is a required argument for #{t}"
|
76
|
+
versioning = args.versioning or fail ":versioning is a required argument for #{t}"
|
77
|
+
tar = Pkg::Util::Tool.check_tool('tar')
|
78
|
+
|
79
|
+
Dir.chdir("pkg") do
|
80
|
+
if versioning == 'ref'
|
81
|
+
local_target = File.join(Pkg::Config.project, Pkg::Config.ref, "repos")
|
82
|
+
elsif versioning == 'version'
|
83
|
+
local_target = File.join(Pkg::Config.project, Pkg::Util::Version.dot_version, "repos")
|
84
|
+
end
|
85
|
+
|
86
|
+
Dir.chdir(local_target) do
|
87
|
+
if !Pkg::Util::File.exist?("#{name_of_archive}.tar.gz")
|
88
|
+
warn "Skipping #{name_of_archive} because it (#{name_of_archive}.tar.gz) has no files"
|
89
|
+
else
|
90
|
+
if File.exist?("#{Pkg::Config.project}-all.tar")
|
91
|
+
tar_cmd = "--update"
|
92
|
+
else
|
93
|
+
tar_cmd = "--create"
|
94
|
+
end
|
95
|
+
Pkg::Util::Execution.ex("#{tar} --owner=0 --group=0 #{tar_cmd} --file #{Pkg::Config.project}-all.tar #{name_of_archive}.tar.gz")
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
# tar does not support adding or updating files in a compressed archive, so
|
102
|
+
# we have a task to compress the "all" tarball from the 'pack_all_signed_repos'
|
103
|
+
# task
|
104
|
+
task :compress_the_all_tarball, [:versioning] => ["pl:fetch"] do |t, args|
|
105
|
+
versioning = args.versioning or fail ":versioning is a required argument for #{t}"
|
106
|
+
gzip = Pkg::Util::Tool.check_tool('gzip')
|
107
|
+
Dir.chdir("pkg") do
|
108
|
+
if versioning == 'ref'
|
109
|
+
local_target = File.join(Pkg::Config.project, Pkg::Config.ref)
|
110
|
+
elsif versioning == 'version'
|
111
|
+
local_target = File.join(Pkg::Config.project, Pkg::Util::Version.dot_version)
|
112
|
+
end
|
113
|
+
Dir.chdir(local_target) do
|
114
|
+
Pkg::Util::Execution.ex("#{gzip} --fast #{File.join("repos", "#{Pkg::Config.project}-all.tar")}")
|
115
|
+
end
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
|
71
120
|
task :prepare_signed_repos, [:target_host, :target_prefix, :versioning] => ["clean", "pl:fetch"] do |t, args|
|
72
121
|
target_host = args.target_host or fail ":target_host is a required argument to #{t}"
|
73
122
|
target_prefix = args.target_prefix or fail ":target_prefix is a required argument for #{t}"
|
@@ -147,7 +196,7 @@ DOC
|
|
147
196
|
|
148
197
|
if args.foss_only && Pkg::Config.foss_platforms && !Pkg::Config.foss_platforms.empty?
|
149
198
|
Pkg::Config.foss_platforms.each do |platform|
|
150
|
-
include_paths << Pkg::Paths.repo_path(platform, legacy: true
|
199
|
+
include_paths << Pkg::Paths.repo_path(platform, legacy: true)
|
151
200
|
if Pkg::Paths.repo_config_path(platform)
|
152
201
|
include_paths << Pkg::Paths.repo_config_path(platform)
|
153
202
|
end
|
@@ -244,11 +293,11 @@ DOC
|
|
244
293
|
local_pa_latest = "#{pa_source}-latest"
|
245
294
|
local_pe_latest = "#{pe_target}-latest"
|
246
295
|
|
247
|
-
Pkg::Util::Net.
|
248
|
-
Pkg::Util::Net.
|
249
|
-
Pkg::Util::Net.
|
250
|
-
Pkg::Util::Net.
|
251
|
-
Pkg::Util::Net.
|
296
|
+
Pkg::Util::Net.remote_ssh_cmd(target_host, "mkdir -p '#{pe_target}'")
|
297
|
+
Pkg::Util::Net.remote_ssh_cmd(target_host, "mkdir -p '#{local_pe_latest}'")
|
298
|
+
Pkg::Util::Net.remote_ssh_cmd(target_host, "cp -r #{local_pa_latest}/* #{local_pe_latest}")
|
299
|
+
Pkg::Util::Net.remote_ssh_cmd(target_host, "sed -i 's|/#{File.basename(local_pa_latest)}|/#{pe_version}/#{File.basename(local_pa_latest)}|' #{local_pe_latest}/repo_configs/*/*")
|
300
|
+
Pkg::Util::Net.remote_ssh_cmd(target_host, "ln -sf '#{local_pa}' '#{local_pe}'")
|
252
301
|
end
|
253
302
|
|
254
303
|
task :nightly_repos => ["pl:fetch"] do
|
@@ -279,7 +328,7 @@ DOC
|
|
279
328
|
|
280
329
|
latest_filename = File.join(latest_filepath, "LATEST")
|
281
330
|
File.open(latest_filename, 'w') { |file| file.write(version) }
|
282
|
-
Pkg::Util::Net.s3sync_to(
|
331
|
+
Pkg::Util::Net.s3sync_to(latest_filepath, target_bucket, Pkg::Config.project, ["--acl-public", "--follow-symlinks"])
|
283
332
|
FileUtils.rm_rf latest_filepath
|
284
333
|
end
|
285
334
|
end
|
data/tasks/pe_ship.rake
CHANGED
@@ -14,9 +14,9 @@ if Pkg::Config.build_pe
|
|
14
14
|
end
|
15
15
|
if Pkg::Config.team == 'release'
|
16
16
|
|
17
|
-
# If this is not a feature branch
|
18
|
-
#
|
19
|
-
unless Pkg::Config.pe_feature_branch
|
17
|
+
# If this is not a feature branch, we need to link the shipped packages into the feature repos,
|
18
|
+
# then update their metadata as well.
|
19
|
+
unless Pkg::Config.pe_feature_branch
|
20
20
|
puts "Linking RPMs to feature repo"
|
21
21
|
Pkg::Util::RakeUtils.invoke_task("pe:remote:link_shipped_rpms_to_feature_repo")
|
22
22
|
Pkg::Util::RakeUtils.invoke_task("pe:remote:update_yum_repo")
|
@@ -65,7 +65,7 @@ if Pkg::Config.build_pe
|
|
65
65
|
puts "Shipping PE debs to apt repo 'incoming' dir on #{Pkg::Config.apt_host}"
|
66
66
|
Pkg::Util::Execution.retry_on_fail(:times => 3) do
|
67
67
|
Dir["pkg/pe/deb/#{dist}/*.deb"].each do |deb|
|
68
|
-
Pkg::Util::Net.
|
68
|
+
Pkg::Util::Net.remote_ssh_cmd(Pkg::Config.apt_host, "mkdir -p '#{target_path}/#{dist}'")
|
69
69
|
Pkg::Util::Net.rsync_to(deb, Pkg::Config.apt_host, "#{target_path}/#{dist}/#{File.basename(deb)}")
|
70
70
|
end
|
71
71
|
end
|
@@ -126,9 +126,8 @@ if Pkg::Config.build_pe
|
|
126
126
|
files += Dir["pkg/pe/deb/#{dist}/*"].select { |f| f !~ /^.*\.deb$/ }.map { |f| "#{base_path}/#{dist}-source/#{File.basename(f)}" }
|
127
127
|
end
|
128
128
|
end
|
129
|
-
# If this is not a feature branch
|
130
|
-
|
131
|
-
unless Pkg::Config.pe_feature_branch || Pkg::Config.pe_release_branch
|
129
|
+
# If this is not a feature branch, we need to link the shipped packages into the feature repos
|
130
|
+
unless Pkg::Config.pe_feature_branch
|
132
131
|
puts "Linking DEBs to feature repo"
|
133
132
|
Pkg::Util::RakeUtils.invoke_task("pe:remote:link_shipped_debs_to_feature_repo")
|
134
133
|
end
|
@@ -149,7 +148,7 @@ if Pkg::Config.build_pe
|
|
149
148
|
command += %(done; )
|
150
149
|
command += %(sync)
|
151
150
|
|
152
|
-
Pkg::Util::Net.
|
151
|
+
Pkg::Util::Net.remote_ssh_cmd(Pkg::Config.yum_host, command)
|
153
152
|
end
|
154
153
|
|
155
154
|
desc "Remotely add shipped packages to apt repo on #{Pkg::Config.apt_host}"
|
@@ -171,11 +170,7 @@ if Pkg::Config.build_pe
|
|
171
170
|
aptly publish repo -gpg-key=\"8BBEB79B\" #{Pkg::Config::pe_version}-#{dist} #{Pkg::Config::pe_version}
|
172
171
|
fi
|
173
172
|
eos
|
174
|
-
stdout, stderr = Pkg::Util::Net.
|
175
|
-
Pkg::Config.apt_host,
|
176
|
-
cmd,
|
177
|
-
{ capture_output: true }
|
178
|
-
)
|
173
|
+
stdout, stderr = Pkg::Util::Net.remote_ssh_cmd(Pkg::Config.apt_host, cmd, true)
|
179
174
|
|
180
175
|
output = stdout.to_s + stderr.to_s
|
181
176
|
|
@@ -189,7 +184,7 @@ if Pkg::Config.build_pe
|
|
189
184
|
puts
|
190
185
|
|
191
186
|
puts "Cleaning up apt repo 'incoming' dir on #{Pkg::Config.apt_host}"
|
192
|
-
Pkg::Util::Net.
|
187
|
+
Pkg::Util::Net.remote_ssh_cmd(Pkg::Config.apt_host, "rm -r #{incoming_dir}")
|
193
188
|
|
194
189
|
end
|
195
190
|
|
@@ -205,7 +200,7 @@ if Pkg::Config.build_pe
|
|
205
200
|
command += %(done; )
|
206
201
|
command += %(sync)
|
207
202
|
|
208
|
-
Pkg::Util::Net.
|
203
|
+
Pkg::Util::Net.remote_ssh_cmd(Pkg::Config.yum_host, command)
|
209
204
|
end
|
210
205
|
|
211
206
|
desc "Remotely link shipped deb packages into feature repo on #{Pkg::Config.apt_host}"
|
@@ -219,7 +214,7 @@ if Pkg::Config.build_pe
|
|
219
214
|
command += %(done; )
|
220
215
|
command += %(sync)
|
221
216
|
|
222
|
-
Pkg::Util::Net.
|
217
|
+
Pkg::Util::Net.remote_ssh_cmd(Pkg::Config.apt_host, command)
|
223
218
|
end
|
224
219
|
end
|
225
220
|
end
|
data/tasks/retrieve.rake
CHANGED
@@ -14,20 +14,16 @@ namespace :pl do
|
|
14
14
|
namespace :jenkins do
|
15
15
|
desc "Retrieve packages from the distribution server\. Check out commit to retrieve"
|
16
16
|
task :retrieve, [:remote_target, :local_target] => 'pl:fetch' do |t, args|
|
17
|
-
unless Pkg::Config.project
|
18
|
-
fail "You must set the 'project' in build_defaults.yaml or with the 'PROJECT_OVERRIDE' environment variable."
|
19
|
-
end
|
20
17
|
remote_target = args.remote_target || "artifacts"
|
21
18
|
local_target = args.local_target || "pkg"
|
22
19
|
mkdir_p local_target
|
23
|
-
build_url = "http://#{Pkg::Config.builds_server}/#{Pkg::Config.project}/#{Pkg::Config.ref}
|
24
|
-
build_path = "#{Pkg::Config.jenkins_repo_path}/#{Pkg::Config.project}/#{Pkg::Config.ref}
|
20
|
+
build_url = "http://#{Pkg::Config.builds_server}/#{Pkg::Config.project}/#{Pkg::Config.ref}"
|
21
|
+
build_path = "#{Pkg::Config.jenkins_repo_path}/#{Pkg::Config.project}/#{Pkg::Config.ref}"
|
25
22
|
if Pkg::Config.foss_only
|
26
23
|
Pkg::Retrieve.foss_only_retrieve(build_url, local_target)
|
27
24
|
else
|
28
|
-
Pkg::Retrieve.retrieve_all(build_url, build_path, local_target)
|
25
|
+
Pkg::Retrieve.retrieve_all(build_url, build_path, remote_target, local_target)
|
29
26
|
end
|
30
|
-
fail "Uh oh, looks like we didn't find anything in #{local_target} when attempting to retrieve from #{build_url}!" if Dir["#{local_target}/*"].empty?
|
31
27
|
puts "Packages staged in #{local_target}"
|
32
28
|
end
|
33
29
|
end
|
@@ -38,14 +34,11 @@ if Pkg::Config.build_pe
|
|
38
34
|
namespace :jenkins do
|
39
35
|
desc "Retrieve packages from the distribution server\. Check out commit to retrieve"
|
40
36
|
task :retrieve, [:remote_target, :local_target] => 'pl:fetch' do |t, args|
|
41
|
-
unless Pkg::Config.project
|
42
|
-
fail "You must set the 'project' in build_defaults.yaml or with the 'PROJECT_OVERRIDE' environment variable."
|
43
|
-
end
|
44
37
|
remote_target = args.remote_target || "artifacts"
|
45
38
|
local_target = args.local_target || "pkg"
|
46
|
-
build_url = "http://#{Pkg::Config.builds_server}/#{Pkg::Config.project}/#{Pkg::Config.ref}
|
47
|
-
build_path = "#{Pkg::Config.jenkins_repo_path}/#{Pkg::Config.project}/#{Pkg::Config.ref}
|
48
|
-
Pkg::Retrieve.retrieve_all(build_url, build_path, local_target)
|
39
|
+
build_url = "http://#{Pkg::Config.builds_server}/#{Pkg::Config.project}/#{Pkg::Config.ref}"
|
40
|
+
build_path = "#{Pkg::Config.jenkins_repo_path}/#{Pkg::Config.project}/#{Pkg::Config.ref}"
|
41
|
+
Pkg::Retrieve.retrieve_all(build_url, build_path, remote_target, local_target)
|
49
42
|
end
|
50
43
|
end
|
51
44
|
end
|