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.
- checksums.yaml +7 -0
- data/LICENSE +17 -0
- data/README-Solaris.md +117 -0
- data/README.md +1031 -0
- data/lib/packaging.rb +32 -0
- data/lib/packaging/artifactory.rb +278 -0
- data/lib/packaging/config.rb +392 -0
- data/lib/packaging/config/params.rb +366 -0
- data/lib/packaging/deb.rb +28 -0
- data/lib/packaging/deb/repo.rb +263 -0
- data/lib/packaging/gem.rb +112 -0
- data/lib/packaging/ips.rb +57 -0
- data/lib/packaging/msi.rb +89 -0
- data/lib/packaging/nuget.rb +39 -0
- data/lib/packaging/osx.rb +36 -0
- data/lib/packaging/paths.rb +238 -0
- data/lib/packaging/platforms.rb +480 -0
- data/lib/packaging/repo.rb +55 -0
- data/lib/packaging/retrieve.rb +46 -0
- data/lib/packaging/rpm.rb +5 -0
- data/lib/packaging/rpm/repo.rb +257 -0
- data/lib/packaging/tar.rb +154 -0
- data/lib/packaging/util.rb +146 -0
- data/lib/packaging/util/date.rb +15 -0
- data/lib/packaging/util/execution.rb +85 -0
- data/lib/packaging/util/file.rb +125 -0
- data/lib/packaging/util/git.rb +174 -0
- data/lib/packaging/util/git_tags.rb +73 -0
- data/lib/packaging/util/gpg.rb +62 -0
- data/lib/packaging/util/jenkins.rb +95 -0
- data/lib/packaging/util/misc.rb +69 -0
- data/lib/packaging/util/net.rb +368 -0
- data/lib/packaging/util/os.rb +17 -0
- data/lib/packaging/util/platform.rb +40 -0
- data/lib/packaging/util/rake_utils.rb +111 -0
- data/lib/packaging/util/serialization.rb +19 -0
- data/lib/packaging/util/ship.rb +171 -0
- data/lib/packaging/util/tool.rb +41 -0
- data/lib/packaging/util/version.rb +326 -0
- data/spec/fixtures/config/ext/build_defaults.yaml +2 -0
- data/spec/fixtures/config/ext/project_data.yaml +2 -0
- data/spec/fixtures/config/params.yaml +2 -0
- data/spec/fixtures/configs/components/test_file.json +1 -0
- data/spec/fixtures/configs/components/test_file_2.json +0 -0
- data/spec/fixtures/configs/components/test_file_not_tagged.json +1 -0
- data/spec/fixtures/configs/components/test_file_wrong_ext.txt +0 -0
- data/spec/fixtures/configs/components/test_file_wrong_ext.wrong +0 -0
- data/spec/fixtures/util/pre_tasks.yaml +4 -0
- data/spec/lib/packaging/artifactory_spec.rb +171 -0
- data/spec/lib/packaging/config_spec.rb +556 -0
- data/spec/lib/packaging/deb/repo_spec.rb +148 -0
- data/spec/lib/packaging/deb_spec.rb +52 -0
- data/spec/lib/packaging/paths_spec.rb +153 -0
- data/spec/lib/packaging/platforms_spec.rb +153 -0
- data/spec/lib/packaging/repo_spec.rb +97 -0
- data/spec/lib/packaging/retrieve_spec.rb +61 -0
- data/spec/lib/packaging/rpm/repo_spec.rb +133 -0
- data/spec/lib/packaging/tar_spec.rb +122 -0
- data/spec/lib/packaging/util/execution_spec.rb +56 -0
- data/spec/lib/packaging/util/file_spec.rb +139 -0
- data/spec/lib/packaging/util/git_spec.rb +160 -0
- data/spec/lib/packaging/util/git_tag_spec.rb +36 -0
- data/spec/lib/packaging/util/gpg_spec.rb +64 -0
- data/spec/lib/packaging/util/jenkins_spec.rb +112 -0
- data/spec/lib/packaging/util/misc_spec.rb +31 -0
- data/spec/lib/packaging/util/net_spec.rb +239 -0
- data/spec/lib/packaging/util/os_spec.rb +31 -0
- data/spec/lib/packaging/util/rake_utils_spec.rb +70 -0
- data/spec/lib/packaging/util/ship_spec.rb +117 -0
- data/spec/lib/packaging/util/version_spec.rb +123 -0
- data/spec/lib/packaging_spec.rb +19 -0
- data/spec/spec_helper.rb +36 -0
- data/static_artifacts/PackageInfo.plist +3 -0
- data/tasks/00_utils.rake +216 -0
- data/tasks/30_metrics.rake +33 -0
- data/tasks/apple.rake +266 -0
- data/tasks/build.rake +12 -0
- data/tasks/clean.rake +5 -0
- data/tasks/config.rake +30 -0
- data/tasks/deb.rake +129 -0
- data/tasks/deb_repos.rake +28 -0
- data/tasks/deprecated.rake +130 -0
- data/tasks/doc.rake +20 -0
- data/tasks/education.rake +57 -0
- data/tasks/fetch.rake +57 -0
- data/tasks/gem.rake +146 -0
- data/tasks/jenkins.rake +494 -0
- data/tasks/jenkins_dynamic.rake +202 -0
- data/tasks/load_extras.rake +21 -0
- data/tasks/mock.rake +348 -0
- data/tasks/nightly_repos.rake +335 -0
- data/tasks/pe_deb.rake +12 -0
- data/tasks/pe_rpm.rake +13 -0
- data/tasks/pe_ship.rake +221 -0
- data/tasks/pe_sign.rake +13 -0
- data/tasks/pe_tar.rake +5 -0
- data/tasks/retrieve.rake +45 -0
- data/tasks/rpm.rake +66 -0
- data/tasks/rpm_repos.rake +29 -0
- data/tasks/ship.rake +752 -0
- data/tasks/sign.rake +226 -0
- data/tasks/tag.rake +8 -0
- data/tasks/tar.rake +34 -0
- data/tasks/update.rake +16 -0
- data/tasks/vanagon.rake +35 -0
- data/tasks/vendor_gems.rake +117 -0
- data/tasks/version.rake +33 -0
- data/tasks/z_data_dump.rake +65 -0
- data/templates/README +1 -0
- data/templates/downstream.xml.erb +47 -0
- data/templates/msi.xml.erb +197 -0
- data/templates/packaging.xml.erb +344 -0
- data/templates/repo.xml.erb +114 -0
- metadata +234 -0
data/tasks/build.rake
ADDED
@@ -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
|
data/tasks/clean.rake
ADDED
data/tasks/config.rake
ADDED
@@ -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
|
data/tasks/deb.rake
ADDED
@@ -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
|
data/tasks/doc.rake
ADDED
@@ -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
|
data/tasks/fetch.rake
ADDED
@@ -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
|