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.
Files changed (72) hide show
  1. checksums.yaml +5 -5
  2. data/README.md +128 -74
  3. data/lib/packaging/artifactory.rb +60 -433
  4. data/lib/packaging/config/params.rb +7 -28
  5. data/lib/packaging/config.rb +50 -150
  6. data/lib/packaging/deb/repo.rb +19 -20
  7. data/lib/packaging/gem.rb +83 -41
  8. data/lib/packaging/ips.rb +57 -0
  9. data/lib/packaging/msi.rb +89 -0
  10. data/lib/packaging/nuget.rb +1 -1
  11. data/lib/packaging/osx.rb +36 -0
  12. data/lib/packaging/paths.rb +87 -225
  13. data/lib/packaging/platforms.rb +416 -443
  14. data/lib/packaging/repo.rb +22 -122
  15. data/lib/packaging/retrieve.rb +7 -36
  16. data/lib/packaging/rpm/repo.rb +8 -5
  17. data/lib/packaging/tar.rb +0 -9
  18. data/lib/packaging/util/date.rb +0 -5
  19. data/lib/packaging/util/execution.rb +2 -2
  20. data/lib/packaging/util/git.rb +1 -1
  21. data/lib/packaging/util/gpg.rb +1 -5
  22. data/lib/packaging/util/net.rb +37 -79
  23. data/lib/packaging/util/rake_utils.rb +0 -1
  24. data/lib/packaging/util/ship.rb +13 -142
  25. data/lib/packaging/util/tool.rb +1 -1
  26. data/lib/packaging/util/version.rb +0 -8
  27. data/lib/packaging/util.rb +2 -2
  28. data/lib/packaging.rb +3 -3
  29. data/spec/fixtures/config/params.yaml +2 -0
  30. data/spec/lib/packaging/artifactory_spec.rb +16 -66
  31. data/spec/lib/packaging/config_spec.rb +29 -49
  32. data/spec/lib/packaging/deb/repo_spec.rb +7 -16
  33. data/spec/lib/packaging/paths_spec.rb +56 -321
  34. data/spec/lib/packaging/platforms_spec.rb +21 -46
  35. data/spec/lib/packaging/repo_spec.rb +40 -78
  36. data/spec/lib/packaging/retrieve_spec.rb +8 -47
  37. data/spec/lib/packaging/rpm/repo_spec.rb +4 -4
  38. data/spec/lib/packaging/tar_spec.rb +40 -34
  39. data/spec/lib/packaging/util/git_tag_spec.rb +1 -1
  40. data/spec/lib/packaging/util/gpg_spec.rb +1 -1
  41. data/spec/lib/packaging/util/net_spec.rb +15 -35
  42. data/spec/lib/packaging/util/ship_spec.rb +63 -145
  43. data/spec/spec_helper.rb +14 -0
  44. data/tasks/00_utils.rake +6 -4
  45. data/tasks/apple.rake +0 -2
  46. data/tasks/config.rake +0 -5
  47. data/tasks/education.rake +5 -5
  48. data/tasks/fetch.rake +14 -17
  49. data/tasks/gem.rake +121 -134
  50. data/tasks/jenkins.rake +7 -51
  51. data/tasks/nightly_repos.rake +69 -20
  52. data/tasks/pe_ship.rake +11 -16
  53. data/tasks/retrieve.rake +6 -13
  54. data/tasks/ship.rake +256 -196
  55. data/tasks/sign.rake +135 -63
  56. data/tasks/tar.rake +6 -0
  57. data/templates/packaging.xml.erb +7 -9
  58. data/templates/repo.xml.erb +3 -6
  59. metadata +27 -80
  60. data/lib/packaging/archive.rb +0 -126
  61. data/lib/packaging/artifactory/extensions.rb +0 -94
  62. data/lib/packaging/config/validations.rb +0 -13
  63. data/lib/packaging/metrics.rb +0 -15
  64. data/lib/packaging/sign/deb.rb +0 -9
  65. data/lib/packaging/sign/dmg.rb +0 -41
  66. data/lib/packaging/sign/ips.rb +0 -57
  67. data/lib/packaging/sign/msi.rb +0 -124
  68. data/lib/packaging/sign/rpm.rb +0 -115
  69. data/lib/packaging/sign.rb +0 -8
  70. data/spec/lib/packaging/gem_spec.rb +0 -86
  71. data/spec/lib/packaging/sign_spec.rb +0 -133
  72. data/tasks/archive.rake +0 -69
data/tasks/gem.rake CHANGED
@@ -1,159 +1,146 @@
1
- require 'rubygems/package_task'
2
-
3
- def glob_gem_files
4
- gem_files = []
5
- gem_excludes_file_list = []
6
- gem_excludes_raw = Pkg::Config.gem_excludes.nil? ? [] : Pkg::Config.gem_excludes.split(' ')
7
- gem_excludes_raw << 'ext/packaging'
8
- gem_excludes_raw << 'pkg'
9
- gem_excludes_raw.each do |exclude|
10
- if File.directory?(exclude)
11
- gem_excludes_file_list += FileList["#{exclude}/**/*"]
12
- else
13
- gem_excludes_file_list << exclude
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
- end
16
- files = FileList[Pkg::Config.gem_files.split(' ')]
17
- files.each do |file|
18
- if File.directory?(file)
19
- gem_files += FileList["#{file}/**/*"]
20
- else
21
- gem_files << file
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 create_default_gem_spec
41
- spec = Gem::Specification.new do |s|
42
- s.name = Pkg::Config.project unless Pkg::Config.project.nil?
43
- s.name = Pkg::Config.gem_name unless Pkg::Config.gem_name.nil?
44
- s.version = Pkg::Config.gemversion unless Pkg::Config.gemversion.nil?
45
- s.author = Pkg::Config.author unless Pkg::Config.author.nil?
46
- s.email = Pkg::Config.email unless Pkg::Config.email.nil?
47
- s.homepage = Pkg::Config.homepage unless Pkg::Config.homepage.nil?
48
- s.summary = Pkg::Config.summary unless Pkg::Config.summary.nil?
49
- s.summary = Pkg::Config.gem_summary unless Pkg::Config.gem_summary.nil?
50
- s.description = Pkg::Config.description unless Pkg::Config.description.nil?
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
- Pkg::Config.gem_runtime_dependencies.each do |gem, version|
65
- spec = add_gem_dependency(:spec => spec, :gem => gem, :version => version, :type => :runtime)
66
- end unless Pkg::Config.gem_runtime_dependencies.nil?
67
-
68
- Pkg::Config.gem_development_dependencies.each do |gem, version|
69
- spec = add_gem_dependency(:spec => spec, :gem => gem, :version => version, :type => :development)
70
- end unless Pkg::Config.gem_development_dependencies.nil?
71
- spec
72
- end
73
-
74
- def create_gem(spec, gembuilddir)
75
- gem_files = glob_gem_files + FileList[(Pkg::Config.gem_test_files || '').split(' ')]
76
- workdir = File.join(Pkg::Util::File.mktemp)
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
- bench = Benchmark.realtime do
79
- Pkg::Util::File.install_files_into_dir(gem_files, workdir)
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
- cd workdir do
82
- gem_task = Gem::PackageTask.new(spec)
83
- gem_task.define
84
- Rake::Task[:gem].reenable
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
- rm_rf workdir
92
- puts "Finished building in: #{bench}"
93
- end
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
- def create_default_gem
96
- spec = create_default_gem_spec
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
- def create_platform_specific_gems
106
- Pkg::Config.gem_platform_dependencies.each do |platform, dependency_hash|
107
- spec = create_default_gem_spec
108
- pf = Gem::Platform.new(platform)
109
- fail "
110
- Platform: '#{platform}' is not recognized by rubygems.
111
- This is probably an erroneous 'gem_platform_dependencies' entry!" if unknown_gems_platform?(pf)
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
- create_gem(spec, "#{Pkg::Config.gem_name}-#{Pkg::Config.gemversion}-#{platform}")
91
+
92
+ rm_rf workdir
93
+ puts "Finished building in: #{bench}"
127
94
  end
128
- end
129
95
 
130
- def package_gem
131
- unless Pkg::Config.build_gem
132
- puts "The #{Pkg::Config.project} project does not build any gems! Passing through ..."
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
- mkdir_p File.join(Pkg::Config.project_root, "pkg")
137
- create_default_gem
138
- if Pkg::Config.gem_platform_dependencies
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
- namespace :package do
144
- desc "Build a gem - All gems if platform specific"
145
- task :gem => ["clean"] do
146
- package_gem
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
- task :nightly_gem => ["clean"] do
150
- Pkg::Config.gemversion = Pkg::Util::Version.extended_dot_version
151
- package_gem
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
- task :gem => "package:gem"
158
- task :nightly_gem => "package:nightly_gem"
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
- # ### Install the packaging gem via Bundler
56
- # bundle install
55
+ # ### Clone the packaging repo
56
+ # rake package:bootstrap
57
57
  #
58
58
  # ### Perform the build
59
- # bundle exec rake pl:build_from_params PARAMS_FILE=$WORKSPACE/BUILD_PROPERTIES
59
+ # rake pl:build_from_params PARAMS_FILE=$WORKSPACE/BUILD_PROPERTIES
60
60
  #
61
61
  # ### Send the results
62
- # bundle exec rake pl:jenkins:ship["artifacts"] PARAMS_FILE=$WORKSPACE/BUILD_PROPERTIES
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
- # bundle exec rake pl:jenkins:post["$DOWNSTREAM_JOB"] PARAMS_FILE=$WORKSPACE/BUILD_PROPERTIES
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:stage_nightlies'].invoke
296
- Rake::Task['pl:remote:update_nightly_repos'].invoke
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(
@@ -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.remote_unpack_git_bundle(signing_server, 'HEAD', nil, signing_bundle)
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
- rake_command = <<-DOC
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.remote_execute(signing_server, "rm -rf #{remote_repo}")
32
- Pkg::Util::Net.remote_execute(signing_server, "rm #{build_params}")
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::Sign::Dmg.sign('repos') unless Dir['repos/apple/**/*.dmg'].empty?
42
- Pkg::Sign::Ips.sign('repos') unless Dir['repos/solaris/11/**/*.p5p'].empty?
43
- Pkg::Sign::Msi.sign('repos') unless Dir['repos/windows/**/*.msi'].empty?
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.remote_execute(Pkg::Config.distribution_server, "mkdir -p #{target_dir}")
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, nonfinal: 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.remote_execute(target_host, "mkdir -p '#{pe_target}'")
248
- Pkg::Util::Net.remote_execute(target_host, "mkdir -p '#{local_pe_latest}'")
249
- Pkg::Util::Net.remote_execute(target_host, "cp -r #{local_pa_latest}/* #{local_pe_latest}")
250
- Pkg::Util::Net.remote_execute(target_host, "sed -i 's|/#{File.basename(local_pa_latest)}|/#{pe_version}/#{File.basename(local_pa_latest)}|' #{local_pe_latest}/repo_configs/*/*")
251
- Pkg::Util::Net.remote_execute(target_host, "ln -sf '#{local_pa}' '#{local_pe}'")
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(latest_filename, target_bucket, Pkg::Config.project, ["--acl-public", "--follow-symlinks"])
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 or release branch, we need to link the
18
- # shipped packages into the feature repos and update their metadata.
19
- unless Pkg::Config.pe_feature_branch || Pkg::Config.pe_release_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.remote_execute(Pkg::Config.apt_host, "mkdir -p '#{target_path}/#{dist}'")
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 or release branch, we need to link the
130
- # shipped packages into the feature repos
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.remote_execute(Pkg::Config.yum_host, command)
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.remote_execute(
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.remote_execute(Pkg::Config.apt_host, "rm -r #{incoming_dir}")
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.remote_execute(Pkg::Config.yum_host, command)
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.remote_execute(Pkg::Config.apt_host, command)
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}/#{remote_target}"
24
- build_path = "#{Pkg::Config.jenkins_repo_path}/#{Pkg::Config.project}/#{Pkg::Config.ref}/#{remote_target}"
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}/#{remote_target}"
47
- build_path = "#{Pkg::Config.jenkins_repo_path}/#{Pkg::Config.project}/#{Pkg::Config.ref}/#{remote_target}"
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