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