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/sign.rake
ADDED
@@ -0,0 +1,226 @@
|
|
1
|
+
def sign_rpm(rpm, sign_flags = nil)
|
2
|
+
|
3
|
+
# To enable support for wrappers around rpm and thus support for gpg-agent
|
4
|
+
# rpm signing, we have to be able to tell the packaging repo what binary to
|
5
|
+
# use as the rpm signing tool.
|
6
|
+
#
|
7
|
+
rpm_cmd = ENV['RPM'] || Pkg::Util::Tool.find_tool('rpm')
|
8
|
+
|
9
|
+
# If we're using the gpg agent for rpm signing, we don't want to specify the
|
10
|
+
# input for the passphrase, which is what '--passphrase-fd 3' does. However,
|
11
|
+
# if we're not using the gpg agent, this is required, and is part of the
|
12
|
+
# defaults on modern rpm. The fun part of gpg-agent signing of rpms is
|
13
|
+
# specifying that the gpg check command always return true
|
14
|
+
#
|
15
|
+
if Pkg::Util.boolean_value(ENV['RPM_GPG_AGENT'])
|
16
|
+
gpg_check_cmd = "--define '%__gpg_check_password_cmd /bin/true'"
|
17
|
+
else
|
18
|
+
input_flag = "--passphrase-fd 3"
|
19
|
+
end
|
20
|
+
|
21
|
+
# Try this up to 5 times, to allow for incorrect passwords
|
22
|
+
Pkg::Util::Execution.retry_on_fail(:times => 5) do
|
23
|
+
# This definition of %__gpg_sign_cmd is the default on modern rpm. We
|
24
|
+
# accept extra flags to override certain signing behavior for older
|
25
|
+
# versions of rpm, e.g. specifying V3 signatures instead of V4.
|
26
|
+
#
|
27
|
+
sh "#{rpm_cmd} #{gpg_check_cmd} --define '%_gpg_name #{Pkg::Util::Gpg.key}' --define '%__gpg_sign_cmd %{__gpg} gpg #{sign_flags} #{input_flag} --batch --no-verbose --no-armor --no-secmem-warning -u %{_gpg_name} -sbo %{__signature_filename} %{__plaintext_filename}' --addsign #{rpm}"
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
|
32
|
+
def sign_legacy_rpm(rpm)
|
33
|
+
sign_rpm(rpm, "--force-v3-sigs --digest-algo=sha1")
|
34
|
+
end
|
35
|
+
|
36
|
+
def rpm_has_sig(rpm)
|
37
|
+
%x(rpm -Kv #{rpm} | grep "#{Pkg::Util::Gpg.key.downcase}" &> /dev/null)
|
38
|
+
$?.success?
|
39
|
+
end
|
40
|
+
|
41
|
+
def sign_deb_changes(file)
|
42
|
+
# Lazy lazy lazy lazy lazy
|
43
|
+
sign_program = "-p'gpg --use-agent --no-tty'" if ENV['RPM_GPG_AGENT']
|
44
|
+
sh "debsign #{sign_program} --re-sign -k#{Pkg::Config.gpg_key} #{file}"
|
45
|
+
end
|
46
|
+
|
47
|
+
namespace :pl do
|
48
|
+
desc "Sign the tarball, defaults to PL key, pass GPG_KEY to override or edit build_defaults"
|
49
|
+
task :sign_tar do
|
50
|
+
unless Pkg::Config.vanagon_project
|
51
|
+
File.exist?("pkg/#{Pkg::Config.project}-#{Pkg::Config.version}.tar.gz") or fail "No tarball exists. Try rake package:tar?"
|
52
|
+
Pkg::Util::Gpg.load_keychain if Pkg::Util::Tool.find_tool('keychain')
|
53
|
+
Pkg::Util::Gpg.sign_file "pkg/#{Pkg::Config.project}-#{Pkg::Config.version}.tar.gz"
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
desc "Sign the Arista EOS swix packages, defaults to PL key, pass GPG_KEY to override or edit build_defaults"
|
58
|
+
task :sign_swix do
|
59
|
+
packages = Dir["pkg/**/*.swix"]
|
60
|
+
unless packages.empty?
|
61
|
+
Pkg::Util::Gpg.load_keychain if Pkg::Util::Tool.find_tool('keychain')
|
62
|
+
packages.each do |swix_package|
|
63
|
+
Pkg::Util::Gpg.sign_file swix_package
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
desc "Detach sign any solaris svr4 packages"
|
69
|
+
task :sign_svr4 do
|
70
|
+
unless Dir["pkg/**/*.pkg.gz"].empty?
|
71
|
+
Pkg::Util::Gpg.load_keychain if Pkg::Util::Tool.find_tool('keychain')
|
72
|
+
Dir["pkg/**/*.pkg.gz"].each do |pkg|
|
73
|
+
Pkg::Util::Gpg.sign_file pkg
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
desc "Sign mocked rpms, Defaults to PL Key, pass GPG_KEY to override"
|
79
|
+
task :sign_rpms, :root_dir do |t, args|
|
80
|
+
rpm_dir = args.root_dir || "pkg"
|
81
|
+
|
82
|
+
all_rpms = Dir["#{rpm_dir}/**/*.rpm"]
|
83
|
+
|
84
|
+
v3_rpms = []
|
85
|
+
v4_rpms = []
|
86
|
+
all_rpms.each do |rpm|
|
87
|
+
platform_tag = Pkg::Paths.tag_from_artifact_path(rpm)
|
88
|
+
platform, version, _ = Pkg::Platforms.parse_platform_tag(platform_tag)
|
89
|
+
|
90
|
+
# We don't sign AIX rpms
|
91
|
+
next if platform_tag.include?('aix')
|
92
|
+
|
93
|
+
sig_type = Pkg::Platforms.signature_format_for_platform_version(platform, version)
|
94
|
+
case sig_type
|
95
|
+
when 'v3'
|
96
|
+
v3_rpms << rpm
|
97
|
+
when 'v4'
|
98
|
+
v4_rpms << rpm
|
99
|
+
else
|
100
|
+
fail "Cannot find signature type for package '#{rpm}'"
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
unless v3_rpms.empty?
|
105
|
+
puts "Signing old rpms..."
|
106
|
+
sign_legacy_rpm(v3_rpms.join(' '))
|
107
|
+
end
|
108
|
+
|
109
|
+
unless v4_rpms.empty?
|
110
|
+
puts "Signing modern rpms..."
|
111
|
+
sign_rpm(v4_rpms.join(' '))
|
112
|
+
end
|
113
|
+
|
114
|
+
# Now we hardlink them back in
|
115
|
+
Dir["#{rpm_dir}/**/*.noarch.rpm"].each do |rpm|
|
116
|
+
platform_tag = Pkg::Paths.tag_from_artifact_path(rpm)
|
117
|
+
platform, version, _ = Pkg::Platforms.parse_platform_tag(platform_tag)
|
118
|
+
supported_arches = Pkg::Platforms.arches_for_platform_version(platform, version)
|
119
|
+
cd File.dirname(rpm) do
|
120
|
+
noarch_rpm = File.basename(rpm)
|
121
|
+
supported_arches.each do |arch|
|
122
|
+
arch_dir = File.join('..', arch)
|
123
|
+
FileUtils.mkdir_p(arch_dir)
|
124
|
+
unless File.exist?(File.join(arch_dir, noarch_rpm))
|
125
|
+
FileUtils.ln(noarch_rpm, arch_dir, :force => true, :verbose => true)
|
126
|
+
end
|
127
|
+
end
|
128
|
+
end
|
129
|
+
end
|
130
|
+
end
|
131
|
+
|
132
|
+
desc "Sign ips package, uses PL certificates by default, update privatekey_pem, certificate_pem, and ips_inter_cert in build_defaults.yaml to override."
|
133
|
+
task :sign_ips do
|
134
|
+
Pkg::IPS.sign unless Dir['pkg/**/*.p5p'].empty?
|
135
|
+
end
|
136
|
+
|
137
|
+
if Pkg::Config.build_gem
|
138
|
+
desc "Sign built gems, defaults to PL key, pass GPG_KEY to override or edit build_defaults"
|
139
|
+
task :sign_gem do
|
140
|
+
FileList["pkg/#{Pkg::Config.gem_name}-#{Pkg::Config.gemversion}*.gem"].each do |gem|
|
141
|
+
puts "signing gem #{gem}"
|
142
|
+
Pkg::Util::Gpg.sign_file(gem)
|
143
|
+
end
|
144
|
+
end
|
145
|
+
end
|
146
|
+
|
147
|
+
desc "Check if all rpms are signed"
|
148
|
+
task :check_rpm_sigs do
|
149
|
+
signed = TRUE
|
150
|
+
rpms = Dir["pkg/**/*.rpm"]
|
151
|
+
print 'Checking rpm signatures'
|
152
|
+
rpms.each do |rpm|
|
153
|
+
if rpm_has_sig rpm
|
154
|
+
print '.'
|
155
|
+
else
|
156
|
+
puts "#{rpm} is unsigned."
|
157
|
+
signed = FALSE
|
158
|
+
end
|
159
|
+
end
|
160
|
+
fail unless signed
|
161
|
+
puts "All rpms signed"
|
162
|
+
end
|
163
|
+
|
164
|
+
desc "Sign generated debian changes files. Defaults to PL Key, pass GPG_KEY to override"
|
165
|
+
task :sign_deb_changes do
|
166
|
+
begin
|
167
|
+
change_files = Dir["pkg/**/*.changes"]
|
168
|
+
unless change_files.empty?
|
169
|
+
Pkg::Util::Gpg.load_keychain if Pkg::Util::Tool.find_tool('keychain')
|
170
|
+
sign_deb_changes("pkg/**/*.changes")
|
171
|
+
end
|
172
|
+
ensure
|
173
|
+
Pkg::Util::Gpg.kill_keychain
|
174
|
+
end
|
175
|
+
end
|
176
|
+
|
177
|
+
desc "Sign OSX packages"
|
178
|
+
task :sign_osx => "pl:fetch" do
|
179
|
+
Pkg::OSX.sign unless Dir['pkg/**/*.dmg'].empty?
|
180
|
+
end
|
181
|
+
|
182
|
+
desc "Sign MSI packages"
|
183
|
+
task :sign_msi => "pl:fetch" do
|
184
|
+
Pkg::MSI.sign unless Dir['pkg/**/*.msi'].empty?
|
185
|
+
end
|
186
|
+
|
187
|
+
##
|
188
|
+
# This crazy piece of work establishes a remote repo on the distribution
|
189
|
+
# server, ships our packages out to it, signs them, and brings them back.
|
190
|
+
#
|
191
|
+
namespace :jenkins do
|
192
|
+
desc "Sign all locally staged packages on #{Pkg::Config.signing_server}"
|
193
|
+
task :sign_all => "pl:fetch" do
|
194
|
+
Dir["pkg/*"].empty? and fail "There were files found in pkg/. Maybe you wanted to build/retrieve something first?"
|
195
|
+
|
196
|
+
# Because rpms and debs are laid out differently in PE under pkg/ they
|
197
|
+
# have a different sign task to address this. Rather than create a whole
|
198
|
+
# extra :jenkins task for signing PE, we determine which sign task to use
|
199
|
+
# based on if we're building PE.
|
200
|
+
# We also listen in on the environment variable SIGNING_BUNDLE. This is
|
201
|
+
# _NOT_ intended for public use, but rather with the internal promotion
|
202
|
+
# workflow for Puppet Enterprise. SIGNING_BUNDLE is the path to a tarball
|
203
|
+
# containing a git bundle to be used as the environment for the packaging
|
204
|
+
# repo in a signing operation.
|
205
|
+
signing_bundle = ENV['SIGNING_BUNDLE']
|
206
|
+
rpm_sign_task = Pkg::Config.build_pe ? "pe:sign_rpms" : "pl:sign_rpms"
|
207
|
+
deb_sign_task = Pkg::Config.build_pe ? "pe:sign_deb_changes" : "pl:sign_deb_changes"
|
208
|
+
sign_tasks = [rpm_sign_task, deb_sign_task]
|
209
|
+
sign_tasks << "pl:sign_tar" if Pkg::Config.build_tar
|
210
|
+
sign_tasks << "pl:sign_gem" if Pkg::Config.build_gem
|
211
|
+
sign_tasks << "pl:sign_osx" if Pkg::Config.build_dmg || Pkg::Config.vanagon_project
|
212
|
+
sign_tasks << "pl:sign_swix" if Pkg::Config.vanagon_project
|
213
|
+
sign_tasks << "pl:sign_svr4" if Pkg::Config.vanagon_project
|
214
|
+
sign_tasks << "pl:sign_ips" if Pkg::Config.vanagon_project
|
215
|
+
sign_tasks << "pl:sign_msi" if Pkg::Config.build_msi || Pkg::Config.vanagon_project
|
216
|
+
remote_repo = Pkg::Util::Net.remote_bootstrap(Pkg::Config.signing_server, 'HEAD', nil, signing_bundle)
|
217
|
+
build_params = Pkg::Util::Net.remote_buildparams(Pkg::Config.signing_server, Pkg::Config)
|
218
|
+
Pkg::Util::Net.rsync_to('pkg', Pkg::Config.signing_server, remote_repo)
|
219
|
+
Pkg::Util::Net.remote_ssh_cmd(Pkg::Config.signing_server, "cd #{remote_repo} ; rake #{sign_tasks.join(' ')} PARAMS_FILE=#{build_params}")
|
220
|
+
Pkg::Util::Net.rsync_from("#{remote_repo}/pkg/", Pkg::Config.signing_server, "pkg/")
|
221
|
+
Pkg::Util::Net.remote_ssh_cmd(Pkg::Config.signing_server, "rm -rf #{remote_repo}")
|
222
|
+
Pkg::Util::Net.remote_ssh_cmd(Pkg::Config.signing_server, "rm #{build_params}")
|
223
|
+
puts "Signed packages staged in 'pkg/ directory"
|
224
|
+
end
|
225
|
+
end
|
226
|
+
end
|
data/tasks/tag.rake
ADDED
data/tasks/tar.rake
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
namespace :package do
|
2
|
+
desc "Create a source tar archive"
|
3
|
+
task :tar => [:clean] do
|
4
|
+
|
5
|
+
if Pkg::Config.pre_tar_task
|
6
|
+
Pkg::Util::RakeUtils.invoke_task(Pkg::Config.pre_tar_task)
|
7
|
+
end
|
8
|
+
|
9
|
+
Rake::Task["package:doc"].invoke if Pkg::Config.build_doc
|
10
|
+
|
11
|
+
tar = Pkg::Tar.new
|
12
|
+
|
13
|
+
# If the user has specified templates via config file, they will be ack'd
|
14
|
+
# by the tar class. Otherwise, we load what we consider to be the "default"
|
15
|
+
# set, which is default for historical purposes.
|
16
|
+
#
|
17
|
+
tar.templates ||= Dir[File.join(Pkg::Config.project_root, "ext", "**", "*.erb")].select { |i| i !~ /ext\/packaging|ext\/osx/ }
|
18
|
+
|
19
|
+
|
20
|
+
# If the user has specified things to exclude via config file, they will be
|
21
|
+
# honored by the tar class, but we also always exclude the packaging repo.
|
22
|
+
#
|
23
|
+
tar.excludes << "ext/packaging"
|
24
|
+
|
25
|
+
tar.pkg!
|
26
|
+
|
27
|
+
puts "Wrote #{`pwd`.strip}/pkg/#{Pkg::Config.project}-#{Pkg::Config.version}.tar.gz"
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
namespace :pl do
|
32
|
+
task :tar => ["package:tar"]
|
33
|
+
end
|
34
|
+
|
data/tasks/update.rake
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
namespace :package do
|
2
|
+
desc "Update your clone of the packaging repo with `git pull`"
|
3
|
+
task :update do
|
4
|
+
cd 'ext/packaging' do
|
5
|
+
remote = Pkg::Config.packaging_url.split(' ')[0]
|
6
|
+
branch = Pkg::Config.packaging_url.split(' ')[1].split('=')[1]
|
7
|
+
if branch.nil? or remote.nil?
|
8
|
+
$stderr.puts "Couldn't parse the packaging repo URL from 'ext/build_defaults.yaml'."
|
9
|
+
$stderr.puts "Normally this is a string in the format git@github.com:<User>/<packaging_repo> --branch=<branch>"
|
10
|
+
else
|
11
|
+
Pkg::Util::Git.pull(remote, branch)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
data/tasks/vanagon.rake
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
namespace :vanagon do
|
2
|
+
# vanagon:check_tags is used to report the tagged status of vanagon components
|
3
|
+
# with "ref" fields indicated in their json files. This function does not create
|
4
|
+
# any barriers or stop execution, it's only a report
|
5
|
+
desc "Check for tagged components in vanagon projects"
|
6
|
+
task :check_tags do
|
7
|
+
# only available to vanagon projects
|
8
|
+
unless Pkg::Config.vanagon_project
|
9
|
+
puts "This is not a vanagon project"
|
10
|
+
return
|
11
|
+
end
|
12
|
+
puts "*" * (ENV["COLUMNS"] || 70).to_i
|
13
|
+
Pkg::Util.in_project_root do
|
14
|
+
Pkg::Util::File.files_with_ext("configs/components", ".json").each do |json_file|
|
15
|
+
json_data = Pkg::Util::Misc.load_from_json(json_file)
|
16
|
+
# Don't report on anything without a ref
|
17
|
+
if json_data["ref"].is_a?(String)
|
18
|
+
Pkg::Util::Version.report_json_tags(json_data)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
# This is just a wrapper for uber_build that runs the check_tags report and
|
25
|
+
# pauses for input, mainly so we can manually check for tagged components
|
26
|
+
# before spending time on a build
|
27
|
+
desc "Run component tag reports, if the report is okay, run an uber_build"
|
28
|
+
task :build_all, [:poll_interval] do |t, args|
|
29
|
+
args.with_defaults(:poll_interval => 0)
|
30
|
+
Rake::Task["vanagon:check_tags"].invoke
|
31
|
+
puts "Does this look correct?"
|
32
|
+
return unless Pkg::Util.ask_yes_or_no
|
33
|
+
Rake::Task["pl:jenkins:uber_build"].invoke(args.poll_interval)
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,117 @@
|
|
1
|
+
# This is an optional pre-tar-task, so we only want to present it if we're
|
2
|
+
# using it
|
3
|
+
if Pkg::Config.pre_tar_task
|
4
|
+
namespace :package do
|
5
|
+
desc "vendor gems required by project"
|
6
|
+
task :vendor_gems do
|
7
|
+
Pkg::Util::Tool.check_tool("bundle")
|
8
|
+
require 'bundler'
|
9
|
+
|
10
|
+
class UI
|
11
|
+
LEVELS = %w(silent error warn confirm info debug)
|
12
|
+
|
13
|
+
def warn(message, newline = nil)
|
14
|
+
puts message
|
15
|
+
end
|
16
|
+
|
17
|
+
def debug(message, newline = nil)
|
18
|
+
puts message
|
19
|
+
end
|
20
|
+
|
21
|
+
def trace(message, newline = nil)
|
22
|
+
puts message
|
23
|
+
end
|
24
|
+
|
25
|
+
def error(message, newline = nil)
|
26
|
+
puts message
|
27
|
+
end
|
28
|
+
|
29
|
+
def info(message, newline = nil)
|
30
|
+
puts message
|
31
|
+
end
|
32
|
+
|
33
|
+
def confirm(message, newline = nil)
|
34
|
+
end
|
35
|
+
|
36
|
+
def debug?
|
37
|
+
true
|
38
|
+
end
|
39
|
+
|
40
|
+
def ask(message)
|
41
|
+
end
|
42
|
+
|
43
|
+
def quiet?
|
44
|
+
false
|
45
|
+
end
|
46
|
+
|
47
|
+
def level=(level)
|
48
|
+
raise ArgumentError unless LEVELS.include?(level.to_s)
|
49
|
+
@level = level
|
50
|
+
end
|
51
|
+
|
52
|
+
def level(name = nil)
|
53
|
+
name ? LEVELS.index(name) <= LEVELS.index(@level) : @level
|
54
|
+
end
|
55
|
+
|
56
|
+
def silence
|
57
|
+
old_level, @level = @level, "silent"
|
58
|
+
yield
|
59
|
+
ensure
|
60
|
+
@level = old_level
|
61
|
+
end
|
62
|
+
|
63
|
+
end
|
64
|
+
|
65
|
+
class RGProxy < ::Gem::SilentUI
|
66
|
+
def initialize(ui)
|
67
|
+
@ui = ui
|
68
|
+
super()
|
69
|
+
end
|
70
|
+
|
71
|
+
def say(message)
|
72
|
+
if message =~ /native extensions/
|
73
|
+
@ui.info "with native extensions "
|
74
|
+
else
|
75
|
+
@ui.debug(message)
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
|
81
|
+
# Cache all the gems locally without using the shared GEM_PATH
|
82
|
+
Bundler.settings[:cache_all] = true
|
83
|
+
Bundler.settings[:local] = true
|
84
|
+
Bundler.settings[:disable_shared_gems] = true
|
85
|
+
# Make sure we cache all the gems, despite what the local config file says...
|
86
|
+
Bundler.settings.without = []
|
87
|
+
|
88
|
+
# Stupid bundler requires this because it's not abstracted out into a library that doesn't need IO
|
89
|
+
Bundler.ui = UI.new
|
90
|
+
Bundler.rubygems.ui = ::RGProxy.new(Bundler.ui)
|
91
|
+
Bundler.ui.level = "debug"
|
92
|
+
|
93
|
+
# Load the the Gemfile and resolve gems using RubyGems.org
|
94
|
+
definition = Bundler.definition
|
95
|
+
definition.validate_ruby!
|
96
|
+
definition.resolve_remotely!
|
97
|
+
|
98
|
+
mkdir_p Bundler.app_cache
|
99
|
+
|
100
|
+
# Cache the gems
|
101
|
+
definition.specs.each do |spec|
|
102
|
+
# Fetch Rubygem specs
|
103
|
+
if spec.source.respond_to?(:fetch_gem, true)
|
104
|
+
spec.source.send(:fetch_gem, spec) if spec.source.is_a?(Bundler::Source::Rubygems)
|
105
|
+
elsif Bundler::Fetcher.respond_to?(:fetch, true)
|
106
|
+
# Retain this call in case we are dealing with an older version of bundler.
|
107
|
+
Bundler::Fetcher.fetch(spec) if spec.source.is_a?(Bundler::Source::Rubygems)
|
108
|
+
else
|
109
|
+
# shrug
|
110
|
+
fail "Cannot find a way to download the gem for caching! Did the `fetch_gem` method move?"
|
111
|
+
end
|
112
|
+
# Cache everything but bundler itself...
|
113
|
+
spec.source.cache(spec) unless spec.name == "bundler"
|
114
|
+
end
|
115
|
+
end
|
116
|
+
end
|
117
|
+
end
|
data/tasks/version.rake
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
# This is something of a work in progress. Unfortunately,
|
2
|
+
# many of the projects that use the packaging repo carry
|
3
|
+
# version files with hard-coded versions, and many of these
|
4
|
+
# are in completely disparate formats.
|
5
|
+
#
|
6
|
+
# This task attempts to automate the updating of this file
|
7
|
+
# with the version to be packaged, but given the many version
|
8
|
+
# file formats in use, doing so cleanly is difficult. With
|
9
|
+
# any luck, going forward some of these projects will move
|
10
|
+
# away from maintaining hard-coded versions in source.
|
11
|
+
# However, if this effort loses momentum, we may end up
|
12
|
+
# revisiting this task and improving it substantially,
|
13
|
+
# and/or standardizing the expected version file format.
|
14
|
+
namespace :package do
|
15
|
+
desc "Set and commit the version in #{Pkg::Config.version_file}, requires VERSION."
|
16
|
+
task :versionset do
|
17
|
+
Pkg::Util.check_var('VERSION', ENV['VERSION'])
|
18
|
+
Pkg::Util::Version.versionbump
|
19
|
+
Pkg::Util::Git.commit_file(Pkg::Config.version_file, "update to #{ENV['VERSION']}")
|
20
|
+
end
|
21
|
+
|
22
|
+
task :versionbump, :workdir do |t, args|
|
23
|
+
Pkg::Util::Version.versionbump(args.workdir)
|
24
|
+
end
|
25
|
+
|
26
|
+
# A set of tasks for printing the version
|
27
|
+
[:version, :rpmversion, :rpmrelease, :debversion, :release].each do |task|
|
28
|
+
task "#{task}" do
|
29
|
+
$stdout.puts Pkg::Config.instance_variable_get("@#{task}")
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|