packaging 0.88.77 → 0.99.0

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