packaging 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 (114) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +17 -0
  3. data/README-Solaris.md +117 -0
  4. data/README.md +1031 -0
  5. data/lib/packaging.rb +32 -0
  6. data/lib/packaging/artifactory.rb +278 -0
  7. data/lib/packaging/config.rb +392 -0
  8. data/lib/packaging/config/params.rb +366 -0
  9. data/lib/packaging/deb.rb +28 -0
  10. data/lib/packaging/deb/repo.rb +263 -0
  11. data/lib/packaging/gem.rb +112 -0
  12. data/lib/packaging/ips.rb +57 -0
  13. data/lib/packaging/msi.rb +89 -0
  14. data/lib/packaging/nuget.rb +39 -0
  15. data/lib/packaging/osx.rb +36 -0
  16. data/lib/packaging/paths.rb +238 -0
  17. data/lib/packaging/platforms.rb +480 -0
  18. data/lib/packaging/repo.rb +55 -0
  19. data/lib/packaging/retrieve.rb +46 -0
  20. data/lib/packaging/rpm.rb +5 -0
  21. data/lib/packaging/rpm/repo.rb +257 -0
  22. data/lib/packaging/tar.rb +154 -0
  23. data/lib/packaging/util.rb +146 -0
  24. data/lib/packaging/util/date.rb +15 -0
  25. data/lib/packaging/util/execution.rb +85 -0
  26. data/lib/packaging/util/file.rb +125 -0
  27. data/lib/packaging/util/git.rb +174 -0
  28. data/lib/packaging/util/git_tags.rb +73 -0
  29. data/lib/packaging/util/gpg.rb +62 -0
  30. data/lib/packaging/util/jenkins.rb +95 -0
  31. data/lib/packaging/util/misc.rb +69 -0
  32. data/lib/packaging/util/net.rb +368 -0
  33. data/lib/packaging/util/os.rb +17 -0
  34. data/lib/packaging/util/platform.rb +40 -0
  35. data/lib/packaging/util/rake_utils.rb +111 -0
  36. data/lib/packaging/util/serialization.rb +19 -0
  37. data/lib/packaging/util/ship.rb +171 -0
  38. data/lib/packaging/util/tool.rb +41 -0
  39. data/lib/packaging/util/version.rb +326 -0
  40. data/spec/fixtures/config/ext/build_defaults.yaml +2 -0
  41. data/spec/fixtures/config/ext/project_data.yaml +2 -0
  42. data/spec/fixtures/config/params.yaml +2 -0
  43. data/spec/fixtures/configs/components/test_file.json +1 -0
  44. data/spec/fixtures/configs/components/test_file_2.json +0 -0
  45. data/spec/fixtures/configs/components/test_file_not_tagged.json +1 -0
  46. data/spec/fixtures/configs/components/test_file_wrong_ext.txt +0 -0
  47. data/spec/fixtures/configs/components/test_file_wrong_ext.wrong +0 -0
  48. data/spec/fixtures/util/pre_tasks.yaml +4 -0
  49. data/spec/lib/packaging/artifactory_spec.rb +171 -0
  50. data/spec/lib/packaging/config_spec.rb +556 -0
  51. data/spec/lib/packaging/deb/repo_spec.rb +148 -0
  52. data/spec/lib/packaging/deb_spec.rb +52 -0
  53. data/spec/lib/packaging/paths_spec.rb +153 -0
  54. data/spec/lib/packaging/platforms_spec.rb +153 -0
  55. data/spec/lib/packaging/repo_spec.rb +97 -0
  56. data/spec/lib/packaging/retrieve_spec.rb +61 -0
  57. data/spec/lib/packaging/rpm/repo_spec.rb +133 -0
  58. data/spec/lib/packaging/tar_spec.rb +122 -0
  59. data/spec/lib/packaging/util/execution_spec.rb +56 -0
  60. data/spec/lib/packaging/util/file_spec.rb +139 -0
  61. data/spec/lib/packaging/util/git_spec.rb +160 -0
  62. data/spec/lib/packaging/util/git_tag_spec.rb +36 -0
  63. data/spec/lib/packaging/util/gpg_spec.rb +64 -0
  64. data/spec/lib/packaging/util/jenkins_spec.rb +112 -0
  65. data/spec/lib/packaging/util/misc_spec.rb +31 -0
  66. data/spec/lib/packaging/util/net_spec.rb +239 -0
  67. data/spec/lib/packaging/util/os_spec.rb +31 -0
  68. data/spec/lib/packaging/util/rake_utils_spec.rb +70 -0
  69. data/spec/lib/packaging/util/ship_spec.rb +117 -0
  70. data/spec/lib/packaging/util/version_spec.rb +123 -0
  71. data/spec/lib/packaging_spec.rb +19 -0
  72. data/spec/spec_helper.rb +36 -0
  73. data/static_artifacts/PackageInfo.plist +3 -0
  74. data/tasks/00_utils.rake +216 -0
  75. data/tasks/30_metrics.rake +33 -0
  76. data/tasks/apple.rake +266 -0
  77. data/tasks/build.rake +12 -0
  78. data/tasks/clean.rake +5 -0
  79. data/tasks/config.rake +30 -0
  80. data/tasks/deb.rake +129 -0
  81. data/tasks/deb_repos.rake +28 -0
  82. data/tasks/deprecated.rake +130 -0
  83. data/tasks/doc.rake +20 -0
  84. data/tasks/education.rake +57 -0
  85. data/tasks/fetch.rake +57 -0
  86. data/tasks/gem.rake +146 -0
  87. data/tasks/jenkins.rake +494 -0
  88. data/tasks/jenkins_dynamic.rake +202 -0
  89. data/tasks/load_extras.rake +21 -0
  90. data/tasks/mock.rake +348 -0
  91. data/tasks/nightly_repos.rake +335 -0
  92. data/tasks/pe_deb.rake +12 -0
  93. data/tasks/pe_rpm.rake +13 -0
  94. data/tasks/pe_ship.rake +221 -0
  95. data/tasks/pe_sign.rake +13 -0
  96. data/tasks/pe_tar.rake +5 -0
  97. data/tasks/retrieve.rake +45 -0
  98. data/tasks/rpm.rake +66 -0
  99. data/tasks/rpm_repos.rake +29 -0
  100. data/tasks/ship.rake +752 -0
  101. data/tasks/sign.rake +226 -0
  102. data/tasks/tag.rake +8 -0
  103. data/tasks/tar.rake +34 -0
  104. data/tasks/update.rake +16 -0
  105. data/tasks/vanagon.rake +35 -0
  106. data/tasks/vendor_gems.rake +117 -0
  107. data/tasks/version.rake +33 -0
  108. data/tasks/z_data_dump.rake +65 -0
  109. data/templates/README +1 -0
  110. data/templates/downstream.xml.erb +47 -0
  111. data/templates/msi.xml.erb +197 -0
  112. data/templates/packaging.xml.erb +344 -0
  113. data/templates/repo.xml.erb +114 -0
  114. metadata +234 -0
@@ -0,0 +1,12 @@
1
+ # Perform a build exclusively from a build params file. Requires that the build
2
+ # params file include a setting for task, which is an array of the arguments
3
+ # given to rake originally, including, first, the task name. The params file is
4
+ # always loaded when passed, so these variables are accessible immediately.
5
+ namespace :pl do
6
+ desc "Build from a build params file"
7
+ task :build_from_params do
8
+ Pkg::Util.check_var('PARAMS_FILE', ENV['PARAMS_FILE'])
9
+ Pkg::Util::Git.checkout(Pkg::Config.ref)
10
+ Rake::Task[Pkg::Config.task[:task]].invoke(Pkg::Config.task[:args])
11
+ end
12
+ end
@@ -0,0 +1,5 @@
1
+ desc "Clean all built packages, eg rm -rf pkg"
2
+ task :clean do
3
+ rm_rf 'pkg'
4
+ end
5
+
@@ -0,0 +1,30 @@
1
+ namespace :config do
2
+ desc "print Pkg::Config values for this repo"
3
+ task :print => 'pl:fetch' do
4
+ Pkg::Util.filter_configs.each do |key, value|
5
+ puts "#{key}: #{value}"
6
+ end
7
+ end
8
+
9
+ task :print_hosts => 'pl:fetch' do
10
+ Pkg::Util.filter_configs('host').each do |key, value|
11
+ puts "#{key}: #{value}"
12
+ end
13
+ end
14
+
15
+ desc "print environment variables that can override build-data and build_defaults"
16
+ task :environment_variables do
17
+ Pkg::Params::ENV_VARS.each do |values|
18
+ type = case values[:type]
19
+ when :array
20
+ "expects one or more space, comma, or semicolon delimited value; treated as an array"
21
+ when :bool
22
+ "expects a boolean value"
23
+ end
24
+
25
+ msg = "#{values[:var]}: #{values[:envvar]}"
26
+ msg += " (#{type})" if type
27
+ puts msg
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,129 @@
1
+ require 'pathname'
2
+
3
+ def pdebuild(args)
4
+ results_dir = args[:work_dir]
5
+ cow = args[:cow]
6
+ Pkg::Deb.set_cow_envs(cow)
7
+ update_cow(cow)
8
+ sh "pdebuild --configfile #{Pkg::Config.pbuild_conf} \
9
+ --buildresult #{results_dir} \
10
+ --pbuilder cowbuilder -- \
11
+ --basepath /var/cache/pbuilder/#{cow}/"
12
+ $?.success? or fail "Failed to build deb with #{cow}!"
13
+ end
14
+
15
+ def update_cow(cow)
16
+ ENV['PATH'] = "/usr/sbin:#{ENV['PATH']}"
17
+ Pkg::Deb.set_cow_envs(cow)
18
+ Pkg::Util::Execution.retry_on_fail(:times => 3) do
19
+ sh "sudo -E /usr/sbin/cowbuilder --update --override-config --configfile #{Pkg::Config.pbuild_conf} --basepath /var/cache/pbuilder/#{cow} --distribution #{ENV['DIST']} --architecture #{ENV['ARCH']}"
20
+ end
21
+ end
22
+
23
+ def debuild(args)
24
+ results_dir = args[:work_dir]
25
+ begin
26
+ sh "debuild --no-lintian -uc -us"
27
+ rescue => e
28
+ fail "Something went wrong. Hopefully the backscroll or #{results_dir}/#{Pkg::Config.project}_#{Pkg::Config.debversion}.build file has a clue.\n#{e}"
29
+ end
30
+ end
31
+
32
+ task :prep_deb_tars, :work_dir do |t, args|
33
+ work_dir = args.work_dir
34
+ FileUtils.cp "pkg/#{Pkg::Config.project}-#{Pkg::Config.version}.tar.gz", work_dir, { :preserve => true }
35
+ cd work_dir do
36
+ sh "tar zxf #{Pkg::Config.project}-#{Pkg::Config.version}.tar.gz"
37
+ mv "#{Pkg::Config.project}-#{Pkg::Config.version}", "#{Pkg::Config.project}-#{Pkg::Config.debversion}"
38
+ mv "#{Pkg::Config.project}-#{Pkg::Config.version}.tar.gz", "#{Pkg::Config.project}_#{Pkg::Config.origversion}.orig.tar.gz"
39
+ end
40
+
41
+
42
+ # This assumes that work_dir is absolute, which I hope is a safe assumption.
43
+ #
44
+ # Also, it turns out that invoking 'find' on a directory that doesn't exist
45
+ # will fail in nasty ways, so we only do this if the target exists...
46
+ if Pathname('ext/debian').directory?
47
+ pkg_dir = "#{work_dir}/#{Pkg::Config.project}-#{Pkg::Config.debversion}"
48
+ cd 'ext' do
49
+ Pathname('debian').find do |file|
50
+ case
51
+ when file.to_s =~ /~$/, file.to_s =~ /^#/
52
+ next
53
+ when file.directory?
54
+ mkdir_p "#{pkg_dir}/#{file}"
55
+ when file.extname == '.erb'
56
+ Pkg::Util::File.erb_file(file, "#{pkg_dir}/#{file.sub(/\.[^\.]*$/, '')}", false, :binding => Pkg::Config.get_binding)
57
+ else
58
+ cp file, "#{pkg_dir}/#{file}"
59
+ end
60
+ end
61
+ end
62
+ end
63
+ end
64
+
65
+ task :build_deb, :deb_command, :cow do |t, args|
66
+ subrepo = Pkg::Config.apt_repo_name
67
+ bench = Benchmark.realtime do
68
+ deb_build = args.deb_command
69
+ cow = args.cow
70
+ work_dir = Pkg::Util::File.mktemp
71
+ subdir = 'pe/' if Pkg::Config.build_pe
72
+ codename = /base-(.*)-(.*)\.cow/.match(cow)[1] unless cow.nil?
73
+ dest_dir = File.join(Pkg::Config.project_root, "pkg", "#{subdir}deb", codename.to_s, subrepo.to_s)
74
+ Pkg::Util::Tool.check_tool(deb_build)
75
+ mkdir_p dest_dir
76
+ deb_args = { :work_dir => work_dir, :cow => cow }
77
+ Rake::Task[:prep_deb_tars].reenable
78
+ Rake::Task[:prep_deb_tars].invoke(work_dir)
79
+ cd "#{work_dir}/#{Pkg::Config.project}-#{Pkg::Config.debversion}" do
80
+ if !File.directory?('debian') and File.directory?('ext/debian')
81
+ mv 'ext/debian', 'debian'
82
+ end
83
+
84
+ # So this is terrible. It is a hacky hacky bandaid for until this can be
85
+ # totally refactored into a library with templates drawn entirely from
86
+ # the tarball. The following two lines are needed because the deb.rake
87
+ # logic currently re-templates all of the templates in ext/debian for use
88
+ # in packaging. Then, before the package is built, if the debian
89
+ # directory doesn't exist (this is really only the case for puppetdb),
90
+ # the ext/debian directory from the tarball is moved into place. This
91
+ # breaks ezbake because ezbake maps templates to differently named files
92
+ # in the tarball templating, but those newly generated templates are
93
+ # completely ignored without the following two lines that unconditionally
94
+ # copy anything in ext/debian into the debian directory.
95
+ mkdir_p 'debian'
96
+ FileUtils.cp_r(Dir.glob("ext/debian/*"), 'debian', { :preserve => true })
97
+ send(deb_build, deb_args)
98
+ cp FileList["#{work_dir}/*.deb", "#{work_dir}/*.dsc", "#{work_dir}/*.changes", "#{work_dir}/*.debian.tar.gz", "#{work_dir}/*.orig.tar.gz", "${work_dir}/*.diff.gz"], dest_dir
99
+ rm_rf "#{work_dir}/#{Pkg::Config.project}-#{Pkg::Config.debversion}"
100
+ rm_rf work_dir
101
+ end
102
+ end
103
+ puts "Finished building in: #{bench}"
104
+ end
105
+
106
+ namespace :package do
107
+ desc "Create a deb from this repo, using debuild (all builddeps must be installed)"
108
+ task :deb => :tar do
109
+ Rake::Task[:build_deb].invoke('debuild')
110
+ end
111
+ end
112
+
113
+ namespace :pl do
114
+ desc "Create a deb from this repo using the default cow #{Pkg::Config.default_cow}."
115
+ task :deb => "package:tar" do
116
+ Pkg::Util.check_var('PE_VER', Pkg::Config.pe_version) if Pkg::Config.build_pe
117
+ Rake::Task[:build_deb].invoke('pdebuild', Pkg::Config.default_cow)
118
+ end
119
+
120
+ desc "Create debs from this git repository using all cows specified in build_defaults yaml"
121
+ task :deb_all do
122
+ Pkg::Util.check_var('PE_VER', Pkg::Config.pe_version) if Pkg::Config.build_pe
123
+ Pkg::Config.cows.split(' ').each do |cow|
124
+ Rake::Task["package:tar"].invoke
125
+ Rake::Task[:build_deb].reenable
126
+ Rake::Task[:build_deb].invoke('pdebuild', cow)
127
+ end
128
+ end
129
+ end
@@ -0,0 +1,28 @@
1
+ ##
2
+ # Create a debian repository under the standard pkg/ directory layout that the
3
+ # packaging repo creates. The standard layout is pkg/deb/$distribution/files.
4
+ # The repository is created in the 'repos' directory under the jenkins build
5
+ # directories on the distribution server, e.g.
6
+ # /opt/jenkins-builds/$project/$sha/repos. Because we're creating deb
7
+ # repositories on the fly, we have to generate the configuration files as well.
8
+ # We assume every directory under the `deb` directory is named for a
9
+ # distribution, and we use this in creating our configurations.
10
+ #
11
+ namespace :pl do
12
+ namespace :jenkins do
13
+ desc "Create apt repositories of build DEB packages for this SHA on the distributions erver"
14
+ task :deb_repos => "pl:fetch" do
15
+ Pkg::Deb::Repo.create_repos
16
+ end
17
+
18
+ desc "Create apt repository configs for package repos for this sha/tag on the distribution server"
19
+ task :generate_deb_repo_configs => "pl:fetch" do
20
+ Pkg::Deb::Repo.generate_repo_configs
21
+ end
22
+
23
+ desc "Retrieve debian apt repository configs for this sha"
24
+ task :deb_repo_configs => "pl:fetch" do
25
+ Pkg::Deb::Repo::retrieve_repo_configs
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,130 @@
1
+ # Emit useful messages for tasks that have been moved or removed.
2
+
3
+
4
+ deprecation_message_winston = "The ticket generation tasks have moved. These now live in Winston: https://github.com/puppetlabs/winston"
5
+
6
+ namespace :pl do
7
+ desc "The ticket generation tasks have moved. These now live in Winston: https://github.com/puppetlabs/winston"
8
+ task :new_server_platform_tickets do
9
+ warn deprecation_message_winston
10
+ end
11
+
12
+ desc "The ticket generation tasks have moved. These now live in Winston: https://github.com/puppetlabs/winston"
13
+ task :platform_addition do
14
+ warn deprecation_message_winston
15
+ end
16
+
17
+ desc "The ticket generation tasks have moved. These now live in Winston: https://github.com/puppetlabs/winston"
18
+ task :agent_tickets do
19
+ warn deprecation_message_winston
20
+ end
21
+
22
+ desc "The ticket generation tasks have moved. These now live in Winston: https://github.com/puppetlabs/winston"
23
+ task :platform_removal do
24
+ warn deprecation_message_winston
25
+ end
26
+
27
+ desc "The ticket generation tasks have moved. These now live in Winston: https://github.com/puppetlabs/winston"
28
+ task :puppet_agent_release_tickets do
29
+ warn deprecation_message_winston
30
+ end
31
+
32
+ desc "The ticket generation tasks have moved. These now live in Winston: https://github.com/puppetlabs/winston"
33
+ task :tickets do
34
+ warn deprecation_message_winston
35
+ end
36
+ end
37
+
38
+ if Pkg::Config.build_ips
39
+ ips_dep_warning = "The IPS build tasks have been removed from puppetlabs/packaging. Please port all Solaris projects to vanagon (https://github.com/puppetlabs/vanagon)"
40
+ namespace :package do
41
+ namespace :ips do
42
+ desc ips_dep_warning
43
+ task :clean do
44
+ warn ips_dep_warning
45
+ end
46
+
47
+ desc ips_dep_warning
48
+ task :clean_pkgs do
49
+ warn ips_dep_warning
50
+ end
51
+
52
+ desc ips_dep_warning
53
+ task :prepare do
54
+ warn ips_dep_warning
55
+ end
56
+
57
+ desc ips_dep_warning
58
+ task :prototmpl do
59
+ warn ips_dep_warning
60
+ end
61
+
62
+ desc ips_dep_warning
63
+ task :protogen do
64
+ warn ips_dep_warning
65
+ end
66
+
67
+ desc ips_dep_warning
68
+ task :protodeps do
69
+ warn ips_dep_warning
70
+ end
71
+
72
+ desc ips_dep_warning
73
+ task :protomogrify do
74
+ warn ips_dep_warning
75
+ end
76
+
77
+ desc ips_dep_warning
78
+ task :protomogrify do
79
+ warn ips_dep_warning
80
+ end
81
+
82
+ desc ips_dep_warning
83
+ task :lint do
84
+ warn ips_dep_warning
85
+ end
86
+
87
+ desc ips_dep_warning
88
+ task :package do
89
+ warn ips_dep_warning
90
+ end
91
+
92
+ desc ips_dep_warning
93
+ task :createrepo do
94
+ warn ips_dep_warning
95
+ end
96
+
97
+ desc ips_dep_warning
98
+ task :send do
99
+ warn ips_dep_warning
100
+ end
101
+
102
+ desc ips_dep_warning
103
+ task :receive do
104
+ warn ips_dep_warning
105
+ end
106
+
107
+ desc ips_dep_warning
108
+ task :dry_install do
109
+ warn ips_dep_warning
110
+ end
111
+
112
+ desc ips_dep_warning
113
+ task :p5p do
114
+ warn ips_dep_warning
115
+ end
116
+
117
+ desc ips_dep_warning
118
+ task :ips do
119
+ warn ips_dep_warning
120
+ end
121
+ end
122
+ end
123
+
124
+ namespace :pl do
125
+ desc ips_dep_warning
126
+ task :ips do
127
+ warn ips_dep_warning
128
+ end
129
+ end
130
+ end
@@ -0,0 +1,20 @@
1
+ # Most projects set rdoc options in the context of gem building. However, mcollective
2
+ # generates its own rdoc package. We can reuse the Pkg::Config.gem_rdoc_options here
3
+
4
+ if Pkg::Config.build_doc
5
+ begin
6
+ require 'rdoc/task'
7
+ rescue LoadError
8
+ require 'rake/rdoctask'
9
+ end
10
+
11
+ namespace :package do
12
+ RDoc::Task.new(:doc) do |rdoc|
13
+ rdoc.rdoc_dir = 'doc'
14
+ rdoc.title = "#{Pkg::Config.project} version #{Pkg::Config.version}"
15
+ Pkg::Config.gem_rdoc_options.each do |option|
16
+ rdoc.options << option
17
+ end unless Pkg::Config.gem_rdoc_options.nil?
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,57 @@
1
+ namespace :pl do
2
+ namespace :jenkins do
3
+ task :deploy_learning_vm, [:vm, :md5, :target_bucket, :target_directory] => "pl:fetch" do |t, args|
4
+
5
+ vm = args.vm or fail ":vm is a required argument for #{t}"
6
+ md5 = args.md5 or fail ":md5 is a required argument for #{t}"
7
+ target_bucket = args.target_bucket or fail ":target_bucket is a required argument for #{t}"
8
+ target_directory = args.target_directory or fail ":target_directory is a required argument for #{t}"
9
+
10
+ Pkg::Util::Net.s3sync_to(vm, target_bucket, target_directory, ["--acl-public"])
11
+ Pkg::Util::Net.s3sync_to(md5, target_bucket, target_directory, ["--acl-public"])
12
+
13
+ puts "'#{vm}' and '#{md5}' have been shipped via s3 to '#{target_bucket}/#{target_directory}'"
14
+ end
15
+
16
+ task :deploy_training_vm, [:vm, :md5, :target_host, :target_directory] => "pl:fetch" do |t, args|
17
+
18
+ vm = args.vm or fail ":vm is a required argument for #{t}"
19
+ md5 = args.md5 or fail ":md5 is a required argument for #{t}"
20
+ target_host = args.target_host or fail ":target_host is a required argument for #{t}"
21
+ target_directory = args.target_directory or fail ":target_directory is a required argument for #{t}"
22
+
23
+ # Determine VM we are trying to ship and set our link_target accordingly
24
+ case vm
25
+ when /training/
26
+ link_target = ["puppet-training.ova", "puppet-student.ova", "puppet-training.box", "puppet-student.box"]
27
+ # We want the -*- in this regex so we don't pick up the links
28
+ archive_cmd = "mv #{target_directory}/puppet-*-training* #{target_directory}/archive"
29
+ when /master/
30
+ link_target = ["puppet-master.ova", "puppet-master.box"]
31
+ # We want the -*- in this regex so we don't pick up the links
32
+ archive_cmd = "mv #{target_directory}/puppet-*-master* #{target_directory}/archive"
33
+ else
34
+ fail "We do not know the type of VM you are trying to ship. Cannot update symlinks"
35
+ end
36
+
37
+ # If the archive directory exists, move old VMs to it
38
+ Pkg::Util::Net.remote_ssh_cmd(target_host, "if [ -d #{target_directory}/archive ]; then #{archive_cmd}; fi")
39
+
40
+ # Ship VM and md5 to host
41
+ Pkg::Util::Net.rsync_to(vm, target_host, target_directory)
42
+ Pkg::Util::Net.rsync_to(md5, target_host, target_directory)
43
+
44
+ # Update symlink to point to the VM we just shipped
45
+ link_target.each do |link|
46
+ link_path = File.join(target_directory, link)
47
+ link_md5_path = "#{link_path}.md5"
48
+ Pkg::Util::Net.remote_ssh_cmd(target_host, "if [[ -L '#{link_path}' ]] && [[ ! -e '#{link_path}' ]] ; then echo '#{link_path} is a broken link, deleting' ; unlink '#{link_path}' ; fi")
49
+ Pkg::Util::Net.remote_ssh_cmd(target_host, "if [[ -L '#{link_md5_path}' ]] && [[ ! -e '#{link_md5_path}' ]] ; then echo '#{link_md5_path} is a broken link, deleting' ; unlink '#{link_md5_path}' ; fi")
50
+ Pkg::Util::Net.remote_ssh_cmd(target_host, "cd #{target_directory} ; ln -sf #{File.basename(vm)} #{link}")
51
+ Pkg::Util::Net.remote_ssh_cmd(target_host, "cd #{target_directory} ; ln -sf #{File.basename(md5)} #{link}.md5")
52
+ end
53
+
54
+ puts "'#{vm}' and '#{md5}' have been shipped via rsync to '#{target_host}/#{target_directory}'"
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,57 @@
1
+ # Each team has a build-defaults file that specifies local infrastructure targets
2
+ # for things like builders, target locations for build artifacts, etc Since much
3
+ # of these don't change, one file can be maintained for the team. Each project
4
+ # also has a data file for information specific to it. If the project builds
5
+ # both PE and not PE, it has two files, one for PE, and the other for FOSS
6
+ #
7
+ data_repo = Pkg::Config.build_data_repo
8
+
9
+ if Pkg::Config.dev_build
10
+ puts "NOTICE: This is a dev build!"
11
+ project_data_branch = "#{Pkg::Config.project}-dev"
12
+ else
13
+ project_data_branch = Pkg::Config.project
14
+ end
15
+ team_data_branch = Pkg::Config.team
16
+
17
+ if Pkg::Config.build_pe
18
+ project_data_branch = 'pe-' + project_data_branch unless project_data_branch =~ /^pe-/
19
+ team_data_branch = 'pe-' + team_data_branch unless team_data_branch =~ /^pe-/
20
+ end
21
+
22
+ # The pl:fetch task pulls down two files from the build-data repo that contain additional
23
+ # data specific to Puppet Labs release infrastructure intended to augment/override any
24
+ # defaults specified in the source project repo, e.g. in ext/build_defaults.yaml
25
+ #
26
+ # It uses curl to download the files, and places them in a temporary
27
+ # directory, e.g. /tmp/somedirectory/{project,team}/Pkg::Config.builder_data_file
28
+ namespace :pl do
29
+ desc "retrieve build-data configurations to override/extend local build_defaults"
30
+ task :fetch do
31
+ # Remove .packaging directory from old-style extras loading
32
+ rm_rf "#{ENV['HOME']}/.packaging" if File.directory?("#{ENV['HOME']}/.packaging")
33
+ # Touch the .packaging file which is allows packaging to present remote tasks
34
+ touch "#{ENV['HOME']}/.packaging"
35
+
36
+ begin
37
+ temp_build_data_dir = Pkg::Util::File.mktemp
38
+ %x(git clone #{data_repo} #{temp_build_data_dir})
39
+ if $?.success?
40
+ Dir.chdir(temp_build_data_dir) do
41
+ [team_data_branch, project_data_branch].each do |branch|
42
+ %x(git checkout #{branch})
43
+ if $?.success?
44
+ Pkg::Util::RakeUtils.invoke_task("pl:load_extras", temp_build_data_dir)
45
+ else
46
+ warn "Unable to load build_defaults from branch '#{branch}' in '#{data_repo}'. Skipping."
47
+ end
48
+ end
49
+ end
50
+ else
51
+ fail "There was an error attempting to fetch the build-data repo. Maybe you do not have the correct permissions?"
52
+ end
53
+ ensure
54
+ rm_rf temp_build_data_dir
55
+ end
56
+ end
57
+ end