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
@@ -0,0 +1,366 @@
|
|
1
|
+
require "packaging/platforms"
|
2
|
+
|
3
|
+
# These are all of the parameters known to our packaging system.
|
4
|
+
# They are ingested by the config class as class instance variables
|
5
|
+
module Pkg::Params
|
6
|
+
BUILD_PARAMS = [:allow_dirty_tree,
|
7
|
+
:answer_override,
|
8
|
+
:apt_host,
|
9
|
+
:apt_releases,
|
10
|
+
:apt_repo_command,
|
11
|
+
:apt_repo_name,
|
12
|
+
:apt_repo_path,
|
13
|
+
:apt_repo_staging_path,
|
14
|
+
:apt_repo_url,
|
15
|
+
:apt_signing_server,
|
16
|
+
:apt_staging_server,
|
17
|
+
:author,
|
18
|
+
:benchmark,
|
19
|
+
:build_data_repo,
|
20
|
+
:build_date,
|
21
|
+
:build_defaults,
|
22
|
+
:build_dmg,
|
23
|
+
:build_doc,
|
24
|
+
:build_gem,
|
25
|
+
:build_ips,
|
26
|
+
:build_msi,
|
27
|
+
:build_pe,
|
28
|
+
:build_tar,
|
29
|
+
:builder_data_file,
|
30
|
+
:builds_server,
|
31
|
+
:bundle_platforms,
|
32
|
+
:certificate_pem,
|
33
|
+
:cows,
|
34
|
+
:db_table,
|
35
|
+
:deb_build_host,
|
36
|
+
:deb_build_mirrors,
|
37
|
+
:deb_targets,
|
38
|
+
:debug,
|
39
|
+
:debversion,
|
40
|
+
:default_cow,
|
41
|
+
:default_mock,
|
42
|
+
:dev_build,
|
43
|
+
:description,
|
44
|
+
:distribution_server,
|
45
|
+
:dmg_host,
|
46
|
+
:dmg_path,
|
47
|
+
:dmg_staging_server,
|
48
|
+
:email,
|
49
|
+
:files,
|
50
|
+
:final_mocks,
|
51
|
+
:foss_only,
|
52
|
+
:foss_platforms,
|
53
|
+
:freight_conf,
|
54
|
+
:gem_default_executables,
|
55
|
+
:gem_dependencies,
|
56
|
+
:gem_description,
|
57
|
+
:gem_devel_dependencies,
|
58
|
+
:gem_development_dependencies,
|
59
|
+
:gem_excludes,
|
60
|
+
:gem_executables,
|
61
|
+
:gem_files,
|
62
|
+
:gem_forge_project,
|
63
|
+
:gem_host,
|
64
|
+
:gem_name,
|
65
|
+
:gem_path,
|
66
|
+
:gem_platform_dependencies,
|
67
|
+
:gem_rdoc_options,
|
68
|
+
:gem_require_path,
|
69
|
+
:gem_required_ruby_version,
|
70
|
+
:gem_required_rubygems_version,
|
71
|
+
:gem_runtime_dependencies,
|
72
|
+
:gem_summary,
|
73
|
+
:gem_test_files,
|
74
|
+
:gemversion,
|
75
|
+
:gpg_key,
|
76
|
+
:gpg_name,
|
77
|
+
:homepage,
|
78
|
+
:internal_gem_host,
|
79
|
+
:internal_nexus_host,
|
80
|
+
:internal_stickler_host,
|
81
|
+
:ips_build_host,
|
82
|
+
:ips_host,
|
83
|
+
:ips_inter_cert,
|
84
|
+
:ips_package_host,
|
85
|
+
:ips_path,
|
86
|
+
:ips_repo,
|
87
|
+
:ips_root_cert,
|
88
|
+
:ips_signing_cert,
|
89
|
+
:ips_signing_key,
|
90
|
+
:ips_signing_server,
|
91
|
+
:ips_signing_ssh_key,
|
92
|
+
:ips_store,
|
93
|
+
:jenkins_build_host,
|
94
|
+
:jenkins_packaging_job,
|
95
|
+
:jenkins_repo_path,
|
96
|
+
:metrics,
|
97
|
+
:metrics_url,
|
98
|
+
:msi_host,
|
99
|
+
:msi_name,
|
100
|
+
:msi_path,
|
101
|
+
:msi_signing_cert,
|
102
|
+
:msi_signing_cert_pw,
|
103
|
+
:msi_signing_server,
|
104
|
+
:msi_signing_ssh_key,
|
105
|
+
:msi_staging_server,
|
106
|
+
:name,
|
107
|
+
:nonfinal_apt_repo_command,
|
108
|
+
:nonfinal_apt_repo_path,
|
109
|
+
:nonfinal_apt_repo_staging_path,
|
110
|
+
:nonfinal_dmg_path,
|
111
|
+
:nonfinal_ips_path,
|
112
|
+
:nonfinal_msi_path,
|
113
|
+
:nonfinal_p5p_path,
|
114
|
+
:nonfinal_repo_name,
|
115
|
+
:nonfinal_repo_link_target,
|
116
|
+
:nonfinal_svr4_path,
|
117
|
+
:nonfinal_swix_path,
|
118
|
+
:nonfinal_yum_repo_path,
|
119
|
+
:notify,
|
120
|
+
:nuget_host,
|
121
|
+
:nuget_repo_path,
|
122
|
+
:origversion,
|
123
|
+
:osx_build_host,
|
124
|
+
:osx_signing_cert,
|
125
|
+
:osx_signing_keychain,
|
126
|
+
:osx_signing_keychain_pw,
|
127
|
+
:osx_signing_server,
|
128
|
+
:osx_signing_ssh_key,
|
129
|
+
:p5p_host,
|
130
|
+
:p5p_path,
|
131
|
+
:packager,
|
132
|
+
:packaging_repo,
|
133
|
+
:packaging_root,
|
134
|
+
:packaging_url,
|
135
|
+
:pbuild_conf,
|
136
|
+
:pe_feature_branch,
|
137
|
+
:pe_name,
|
138
|
+
:pe_platforms,
|
139
|
+
:pe_version,
|
140
|
+
:pg_major_version,
|
141
|
+
:platform_repos,
|
142
|
+
:pre_tar_task,
|
143
|
+
:pre_tasks,
|
144
|
+
:privatekey_pem,
|
145
|
+
:project,
|
146
|
+
:project_root,
|
147
|
+
:random_mockroot,
|
148
|
+
:rc_mocks,
|
149
|
+
:redis_hostname,
|
150
|
+
:ref,
|
151
|
+
:release,
|
152
|
+
:repo_link_target,
|
153
|
+
:repo_name,
|
154
|
+
:rpm_build_host,
|
155
|
+
:rpm_targets,
|
156
|
+
:rpmrelease,
|
157
|
+
:rpmversion,
|
158
|
+
:rsync_servers,
|
159
|
+
:s3_ship,
|
160
|
+
:short_ref,
|
161
|
+
:sign_tar,
|
162
|
+
:signing_server,
|
163
|
+
:staging_server,
|
164
|
+
:summary,
|
165
|
+
:svr4_host,
|
166
|
+
:svr4_path,
|
167
|
+
:swix_host,
|
168
|
+
:swix_path,
|
169
|
+
:swix_staging_server,
|
170
|
+
:tar_excludes,
|
171
|
+
:tar_host,
|
172
|
+
:tar_staging_server,
|
173
|
+
:tarball_path,
|
174
|
+
:task,
|
175
|
+
:team,
|
176
|
+
:templates,
|
177
|
+
:update_version_file,
|
178
|
+
:vanagon_project,
|
179
|
+
:version,
|
180
|
+
:version_file,
|
181
|
+
:version_strategy,
|
182
|
+
:yum_host,
|
183
|
+
:yum_repo_command,
|
184
|
+
:yum_repo_name,
|
185
|
+
:yum_repo_path,
|
186
|
+
:yum_staging_server,
|
187
|
+
]
|
188
|
+
|
189
|
+
# Environment variable overrides for Pkg::Config parameters
|
190
|
+
#
|
191
|
+
# :var => :config_param, :envvar => :environment var :type => :variable type
|
192
|
+
#
|
193
|
+
# Note: :type is assumed :string if not present
|
194
|
+
#
|
195
|
+
ENV_VARS = [
|
196
|
+
{ :var => :allow_dirty_tree, :envvar => :ALLOW_DIRTY_TREE, :type => :bool },
|
197
|
+
{ :var => :answer_override, :envvar => :ANSWER_OVERRIDE },
|
198
|
+
{ :var => :apt_host, :envvar => :APT_HOST },
|
199
|
+
{ :var => :apt_releases, :envvar => :APT_RELEASES, :type => :array },
|
200
|
+
{ :var => :apt_repo_path, :envvar => :APT_REPO },
|
201
|
+
{ :var => :apt_repo_staging_path, :envvar => :APT_REPO_STAGING_PATH },
|
202
|
+
{ :var => :apt_signing_server, :envvar => :APT_SIGNING_SERVER },
|
203
|
+
{ :var => :apt_staging_server, :envvar => :APT_STAGING_SERVER },
|
204
|
+
{ :var => :build_data_repo, :envvar => :BUILD_DATA_REPO },
|
205
|
+
{ :var => :build_dmg, :envvar => :DMG, :type => :bool },
|
206
|
+
{ :var => :build_doc, :envvar => :DOC, :type => :bool },
|
207
|
+
{ :var => :build_gem, :envvar => :GEM, :type => :bool },
|
208
|
+
{ :var => :build_ips, :envvar => :IPS, :type => :bool },
|
209
|
+
{ :var => :build_msi, :envvar => :MSI, :type => :bool },
|
210
|
+
{ :var => :build_pe, :envvar => :PE_BUILD, :type => :bool },
|
211
|
+
{ :var => :build_tar, :envvar => :TAR, :type => :bool },
|
212
|
+
{ :var => :certificate_pem, :envvar => :CERT_PEM },
|
213
|
+
{ :var => :cows, :envvar => :COW },
|
214
|
+
{ :var => :debug, :envvar => :DEBUG, :type => :bool },
|
215
|
+
{ :var => :default_cow, :envvar => :COW },
|
216
|
+
{ :var => :default_mock, :envvar => :MOCK },
|
217
|
+
{ :var => :dev_build, :envvar => :DEV_BUILD, :type => :bool },
|
218
|
+
{ :var => :dmg_host, :envvar => :DMG_HOST },
|
219
|
+
{ :var => :dmg_path, :envvar => :DMG_PATH },
|
220
|
+
{ :var => :dmg_staging_server, :envvar => :DMG_STAGING_SERVER },
|
221
|
+
{ :var => :final_mocks, :envvar => :MOCK },
|
222
|
+
{ :var => :foss_only, :envvar => :FOSS_ONLY, :type => :bool },
|
223
|
+
{ :var => :foss_platforms, :envvar => :FOSS_PLATFORMS, :type => :array },
|
224
|
+
{ :var => :gem_host, :envvar => :GEM_HOST },
|
225
|
+
{ :var => :gpg_key, :envvar => :GPG_KEY },
|
226
|
+
{ :var => :gpg_name, :envvar => :GPG_NAME },
|
227
|
+
{ :var => :ips_host, :envvar => :IPS_HOST },
|
228
|
+
{ :var => :ips_inter_cert, :envvar => :IPS_INTER_CERT },
|
229
|
+
{ :var => :ips_path, :envvar => :IPS_PATH },
|
230
|
+
{ :var => :ips_repo, :envvar => :IPS_REPO },
|
231
|
+
{ :var => :ips_root_cert, :envvar => :IPS_ROOT_CERT },
|
232
|
+
{ :var => :ips_signing_cert, :envvar => :IPS_SIGNING_CERT },
|
233
|
+
{ :var => :ips_signing_key, :envvar => :IPS_SIGNING_KEY },
|
234
|
+
{ :var => :ips_signing_server, :envvar => :IPS_SIGNING_SERVER },
|
235
|
+
{ :var => :ips_signing_ssh_key, :envvar => :IPS_SIGNING_SSH_KEY },
|
236
|
+
{ :var => :msi_host, :envvar => :MSI_HOST },
|
237
|
+
{ :var => :msi_path, :envvar => :MSI_PATH },
|
238
|
+
{ :var => :msi_signing_cert, :envvar => :MSI_SIGNING_CERT },
|
239
|
+
{ :var => :msi_signing_cert_pw, :envvar => :MSI_SIGNING_CERT_PW },
|
240
|
+
{ :var => :msi_signing_server, :envvar => :MSI_SIGNING_SERVER },
|
241
|
+
{ :var => :msi_signing_ssh_key, :envvar => :MSI_SIGNING_SSH_KEY },
|
242
|
+
{ :var => :msi_staging_server, :envvar => :MSI_STAGING_SERVER },
|
243
|
+
{ :var => :nonfinal_apt_repo_command, :envvar => :NONFINAL_APT_REPO_COMMAND },
|
244
|
+
{ :var => :nonfinal_apt_repo_path, :envvar => :NONFINAL_APT_REPO_PATH },
|
245
|
+
{ :var => :nonfinal_apt_repo_staging_path, :envvar => :NONFINAL_APT_REPO_STAGING_PATH },
|
246
|
+
{ :var => :nonfinal_dmg_path, :envvar => :NONFINAL_DMG_PATH },
|
247
|
+
{ :var => :nonfinal_ips_path, :envvar => :NONFINAL_IPS_PATH },
|
248
|
+
{ :var => :nonfinal_msi_path, :envvar => :NONFINAL_MSI_PATH },
|
249
|
+
{ :var => :nonfinal_p5p_path, :envvar => :NONFINAL_P5P_PATH },
|
250
|
+
{ :var => :nonfinal_repo_link_target, :envvar => :NONFINAL_REPO_LINK_TARGET },
|
251
|
+
{ :var => :nonfinal_repo_name, :envvar => :NONFINAL_REPO_NAME },
|
252
|
+
{ :var => :nonfinal_svr4_path, :envvar => :NONFINAL_SVR4_PATH },
|
253
|
+
{ :var => :nonfinal_swix_path, :envvar => :NONFINAL_SWIX_PATH },
|
254
|
+
{ :var => :nonfinal_yum_repo_path, :envvar => :NONFINAL_YUM_REPO_PATH },
|
255
|
+
{ :var => :notify, :envvar => :NOTIFY },
|
256
|
+
{ :var => :nuget_host, :envvar => :NUGET_HOST },
|
257
|
+
{ :var => :nuget_repo_path, :envvar => :NUGET_REPO },
|
258
|
+
{ :var => :osx_signing_cert, :envvar => :OSX_SIGNING_CERT },
|
259
|
+
{ :var => :osx_signing_keychain, :envvar => :OSX_SIGNING_KEYCHAIN },
|
260
|
+
{ :var => :osx_signing_keychain_pw, :envvar => :OSX_SIGNING_KEYCHAIN_PW },
|
261
|
+
{ :var => :osx_signing_server, :envvar => :OSX_SIGNING_SERVER },
|
262
|
+
{ :var => :osx_signing_ssh_key, :envvar => :OSX_SIGNING_SSH_KEY },
|
263
|
+
{ :var => :p5p_host, :envvar => :P5P_HOST },
|
264
|
+
{ :var => :p5p_path, :envvar => :P5P_PATH },
|
265
|
+
{ :var => :packager, :envvar => :PACKAGER },
|
266
|
+
{ :var => :pbuild_conf, :envvar => :PBUILDCONF },
|
267
|
+
{ :var => :pe_feature_branch, :envvar => :PE_FEATURE_BRANCH },
|
268
|
+
{ :var => :pe_version, :envvar => :PE_VER },
|
269
|
+
{ :var => :privatekey_pem, :envvar => :PRIVATE_PEM },
|
270
|
+
{ :var => :project_root, :envvar => :PROJECT_ROOT },
|
271
|
+
{ :var => :random_mockroot, :envvar => :RANDOM_MOCKROOT, :type => :bool },
|
272
|
+
{ :var => :rc_mocks, :envvar => :MOCK },
|
273
|
+
{ :var => :release, :envvar => :RELEASE },
|
274
|
+
{ :var => :repo_name, :envvar => :REPO_NAME },
|
275
|
+
{ :var => :repo_link_target, :envvar => :REPO_LINK_TARGET },
|
276
|
+
{ :var => :s3_ship, :envvar => :S3_SHIP, :type => :bool },
|
277
|
+
{ :var => :sign_tar, :envvar => :SIGN_TAR, :type => :bool },
|
278
|
+
{ :var => :signing_server, :envvar => :SIGNING_SERVER },
|
279
|
+
{ :var => :staging_server, :envvar => :STAGING_SERVER },
|
280
|
+
{ :var => :swix_host, :envvar => :SWIX_HOST },
|
281
|
+
{ :var => :swix_staging_server, :envvar => :SWIX_STAGING_SERVER },
|
282
|
+
{ :var => :svr4_host, :envvar => :SVR4_HOST },
|
283
|
+
{ :var => :svr4_path, :envvar => :SVR4_PATH },
|
284
|
+
{ :var => :swix_path, :envvar => :SWIX_PATH },
|
285
|
+
{ :var => :tar_host, :envvar => :TAR_HOST },
|
286
|
+
{ :var => :tar_staging_server, :envvar => :TAR_STAGING_SERVER },
|
287
|
+
{ :var => :team, :envvar => :TEAM },
|
288
|
+
{ :var => :update_version_file, :envvar => :NEW_STYLE_PACKAGE },
|
289
|
+
{ :var => :vanagon_project, :envvar => :VANAGON_PROJECT, :type => :bool },
|
290
|
+
{ :var => :yum_host, :envvar => :YUM_HOST },
|
291
|
+
{ :var => :yum_repo_path, :envvar => :YUM_REPO },
|
292
|
+
{ :var => :yum_staging_server, :envvar => :YUM_STAGING_SERVER },
|
293
|
+
{ :var => :internal_gem_host, :envvar => :INTERNAL_GEM_HOST },
|
294
|
+
{ :var => :internal_nexus_host, :envvar => :INTERNAL_NEXUS_HOST },
|
295
|
+
{ :var => :internal_stickler_host, :envvar => :INTERNAL_STICKLER_HOST },
|
296
|
+
]
|
297
|
+
# Default values that are supplied if the user does not supply them
|
298
|
+
#
|
299
|
+
# usage is the same as above
|
300
|
+
#
|
301
|
+
DEFAULTS = [{ :var => :allow_dirty_tree, :val => false },
|
302
|
+
{ :var => :builder_data_file, :val => 'builder_data.yaml' },
|
303
|
+
{ :var => :team, :val => 'dev' },
|
304
|
+
{ :var => :random_mockroot, :val => true },
|
305
|
+
{ :var => :keychain_loaded, :val => false },
|
306
|
+
{ :var => :foss_only, :val => false },
|
307
|
+
{ :var => :build_data_repo, :val => 'https://github.com/puppetlabs/build-data.git' },
|
308
|
+
{ :var => :build_date, :val => Pkg::Util::Date.timestamp('-') },
|
309
|
+
{ :var => :release, :val => '1' },
|
310
|
+
{ :var => :internal_gem_host, :val => 'https://artifactory.delivery.puppetlabs.net/artifactory/api/gems/rubygems/' },
|
311
|
+
{ :var => :build_tar, :val => true },
|
312
|
+
{ :var => :dev_build, :val => false },
|
313
|
+
{ :var => :osx_signing_cert, :val => '$OSX_SIGNING_CERT' },
|
314
|
+
{ :var => :osx_signing_keychain, :val => '$OSX_SIGNING_KEYCHAIN' },
|
315
|
+
{ :var => :osx_signing_keychain_pw, :val => '$OSX_SIGNING_KEYCHAIN_PW' },
|
316
|
+
{ :var => :ips_signing_cert, :val => '$IPS_SIGNING_CERT' },
|
317
|
+
{ :var => :ips_inter_cert, :val => '$IPS_INTER_CERT' },
|
318
|
+
{ :var => :ips_root_cert, :val => '$IPS_ROOT_CERT' },
|
319
|
+
{ :var => :ips_signing_key, :val => '$IPS_SIGNING_KEY' },
|
320
|
+
{ :var => :msi_signing_cert, :val => '$MSI_SIGNING_CERT' },
|
321
|
+
{ :var => :msi_signing_cert_pw, :val => '$MSI_SIGNING_CERT_PW' },
|
322
|
+
{ :var => :pe_feature_branch, :val => false },
|
323
|
+
{ :var => :s3_ship, :val => false },
|
324
|
+
{ :var => :apt_releases, :val => Pkg::Platforms.codenames }]
|
325
|
+
|
326
|
+
# These are variables which, over time, we decided to rename or replace. For
|
327
|
+
# backwards compatibility, we assign the value of the old/deprecated
|
328
|
+
# variables, if set, to the new ones. We also use this method for accessor
|
329
|
+
# "redirects" - e.g. defaulting the populated value of one parameter for another
|
330
|
+
# in case it is not set.
|
331
|
+
#
|
332
|
+
REASSIGNMENTS = [
|
333
|
+
{ :oldvar => :internal_gem_host, :newvar => :internal_nexus_host },
|
334
|
+
{ :oldvar => :internal_gem_host, :newvar => :internal_stickler_host },
|
335
|
+
# These are fall-through values for shipping endpoints
|
336
|
+
{ :oldvar => :staging_server, :newvar => :apt_staging_server },
|
337
|
+
{ :oldvar => :staging_server, :newvar => :dmg_staging_server },
|
338
|
+
{ :oldvar => :staging_server, :newvar => :swix_staging_server },
|
339
|
+
{ :oldvar => :staging_server, :newvar => :tar_staging_server },
|
340
|
+
{ :oldvar => :staging_server, :newvar => :yum_staging_server },
|
341
|
+
# These are fall-through values for signing/repo endpoints
|
342
|
+
{ :oldvar => :yum_staging_server, :newvar => :yum_host },
|
343
|
+
{ :oldvar => :apt_repo_staging_path, :newvar => :apt_repo_path },
|
344
|
+
{ :oldvar => :apt_signing_server, :newvar => :apt_host },
|
345
|
+
# These are legitimately old values
|
346
|
+
{ :oldvar => :gem_devel_dependencies, :newvar => :gem_development_dependencies },
|
347
|
+
{ :oldvar => :gpg_name, :newvar => :gpg_key },
|
348
|
+
{ :oldvar => :name, :newvar => :project },
|
349
|
+
{ :oldvar => :pe_name, :newvar => :project },
|
350
|
+
{ :oldvar => :project, :newvar => :gem_name },
|
351
|
+
{ :oldvar => :yum_host, :newvar => :swix_host },
|
352
|
+
{ :oldvar => :yum_host, :newvar => :dmg_host },
|
353
|
+
{ :oldvar => :yum_host, :newvar => :tar_host },
|
354
|
+
]
|
355
|
+
|
356
|
+
# These are variables that we have deprecated. If they are encountered in a
|
357
|
+
# project's config, we issue deprecations for them.
|
358
|
+
#
|
359
|
+
DEPRECATIONS = [{ :var => :gem_devel_dependencies, :message => "
|
360
|
+
DEPRECATED, 9-Nov-2013: 'gem_devel_dependencies' has been replaced with
|
361
|
+
'gem_development_dependencies.' Please update this field in your
|
362
|
+
build_defaults.yaml or project_data.yaml" },
|
363
|
+
{ :var => :gpg_name, :message => "
|
364
|
+
DEPRECATED, 29-Jul-2014: 'gpg_name' has been replaced with 'gpg_key'.
|
365
|
+
Please update this field in your build_defaults.yaml" }]
|
366
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# DEB methods used by various libraries and rake tasks
|
2
|
+
|
3
|
+
module Pkg::Deb
|
4
|
+
require 'packaging/deb/repo'
|
5
|
+
class << self
|
6
|
+
def set_cow_envs(cow)
|
7
|
+
elements = /base-(.*)-(.*)\.cow/.match(cow)
|
8
|
+
if elements.nil?
|
9
|
+
fail "Didn't get a matching cow, e.g. 'base-squeeze-i386'"
|
10
|
+
end
|
11
|
+
dist = elements[1]
|
12
|
+
arch = elements[2]
|
13
|
+
if Pkg::Config.build_pe
|
14
|
+
ENV['PE_VER'] = Pkg::Config.pe_version
|
15
|
+
end
|
16
|
+
if Pkg::Config.deb_build_mirrors
|
17
|
+
ENV['BUILDMIRROR'] = Pkg::Config.deb_build_mirrors.map do |mirror|
|
18
|
+
mirror.gsub(/__DIST__/, dist)
|
19
|
+
end.join(' | ')
|
20
|
+
end
|
21
|
+
ENV['DIST'] = dist
|
22
|
+
ENV['ARCH'] = arch
|
23
|
+
if dist =~ /cumulus/
|
24
|
+
ENV['NETWORK_OS'] = 'cumulus'
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,263 @@
|
|
1
|
+
# Utilities for working with deb repos
|
2
|
+
require 'fileutils'
|
3
|
+
|
4
|
+
module Pkg::Deb::Repo
|
5
|
+
|
6
|
+
class << self
|
7
|
+
|
8
|
+
# This is the default set of arches we are using for our reprepro repos. We
|
9
|
+
# take this list and combine it with the list of supported arches for each
|
10
|
+
# given platform to ensure a complete set of architectures. We use this
|
11
|
+
# when we initially create the repos and when we sign the repos.
|
12
|
+
DEBIAN_PACKAGING_ARCHES = ['i386', 'amd64', 'arm64', 'armel', 'armhf', 'powerpc', 'ppc64el', 'sparc', 'mips', 'mipsel']
|
13
|
+
|
14
|
+
def reprepro_repo_name
|
15
|
+
if Pkg::Config.apt_repo_name
|
16
|
+
Pkg::Config.apt_repo_name
|
17
|
+
else
|
18
|
+
Pkg::Paths.repo_name.empty? ? 'main' : Pkg::Paths.repo_name
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def base_url
|
23
|
+
"http://#{Pkg::Config.builds_server}/#{Pkg::Config.project}/#{Pkg::Config.ref}"
|
24
|
+
end
|
25
|
+
|
26
|
+
# Generate apt configuration files that point to the repositories created
|
27
|
+
# on the distribution server with packages created from the current source
|
28
|
+
# repo commit. There is one for each dist that is packaged for (e.g. lucid,
|
29
|
+
# squeeze, etc). Files are created in pkg/repo_configs/deb and are named
|
30
|
+
# pl-$project-$sha.list, and can be placed in /etc/apt/sources.list.d to
|
31
|
+
# enable clients to install these packages.
|
32
|
+
#
|
33
|
+
def generate_repo_configs(source = "repos", target = "repo_configs")
|
34
|
+
# We use wget to obtain a directory listing of what are presumably our deb repos
|
35
|
+
#
|
36
|
+
wget = Pkg::Util::Tool.check_tool("wget")
|
37
|
+
|
38
|
+
# This is the standard path to all debian build artifact repositories on
|
39
|
+
# the distribution server for this commit
|
40
|
+
#
|
41
|
+
repo_base = "#{base_url}/#{source}/apt/"
|
42
|
+
|
43
|
+
# First test if the directory even exists
|
44
|
+
#
|
45
|
+
begin
|
46
|
+
stdout, _, _ = Pkg::Util::Execution.capture3("#{wget} --spider -r -l 1 --no-parent #{repo_base} 2>&1")
|
47
|
+
rescue RuntimeError
|
48
|
+
warn "No debian repos available for #{Pkg::Config.project} at #{Pkg::Config.ref}."
|
49
|
+
return
|
50
|
+
end
|
51
|
+
|
52
|
+
# We want to exclude index and robots files and only include the http: prefixed elements
|
53
|
+
repo_urls = stdout.split.uniq.reject { |x| x =~ /\?|index|robots/ }.select { |x| x =~ /http:/ }.map { |x| x.chomp('/') }
|
54
|
+
|
55
|
+
|
56
|
+
# Create apt sources.list files that can be added to hosts for installing
|
57
|
+
# these packages. We use the list of distributions to create a config
|
58
|
+
# file for every distribution.
|
59
|
+
#
|
60
|
+
FileUtils.mkdir_p(File.join("pkg", target, "deb"))
|
61
|
+
repo_urls.each do |url|
|
62
|
+
# We want to skip the base_url, which wget returns as one of the results
|
63
|
+
next if "#{url}/" == repo_base
|
64
|
+
platform_tag = Pkg::Paths.tag_from_artifact_path(url)
|
65
|
+
platform, version, _ = Pkg::Platforms.parse_platform_tag(platform_tag)
|
66
|
+
codename = Pkg::Platforms.codename_for_platform_version(platform, version)
|
67
|
+
repoconfig = ["# Packages for #{Pkg::Config.project} built from ref #{Pkg::Config.ref}",
|
68
|
+
"deb #{url} #{codename} #{reprepro_repo_name}"]
|
69
|
+
config = File.join("pkg", target, "deb", "pl-#{Pkg::Config.project}-#{Pkg::Config.ref}-#{codename}.list")
|
70
|
+
File.open(config, 'w') { |f| f.puts repoconfig }
|
71
|
+
end
|
72
|
+
puts "Wrote apt repo configs for #{Pkg::Config.project} at #{Pkg::Config.ref} to pkg/#{target}/deb."
|
73
|
+
end
|
74
|
+
|
75
|
+
def retrieve_repo_configs(target = "repo_configs")
|
76
|
+
wget = Pkg::Util::Tool.check_tool("wget")
|
77
|
+
FileUtils.mkdir_p("pkg/#{target}")
|
78
|
+
config_url = "#{base_url}/#{target}/deb/"
|
79
|
+
stdout, _, _ = Pkg::Util::Execution.capture3("#{wget} -r -np -nH --cut-dirs 3 -P pkg/#{target} --reject 'index*' #{config_url}")
|
80
|
+
stdout
|
81
|
+
rescue => e
|
82
|
+
fail "Couldn't retrieve deb apt repo configs.\n#{e}"
|
83
|
+
end
|
84
|
+
|
85
|
+
def repo_creation_command(repo_directory, artifact_paths)
|
86
|
+
cmd = "[ -d #{repo_directory} ] || exit 1 ; "
|
87
|
+
cmd << "pushd #{repo_directory} > /dev/null && "
|
88
|
+
cmd << 'echo "Checking for running repo creation. Will wait if detected." && '
|
89
|
+
cmd << 'while [ -f .lock ] ; do sleep 1 ; echo -n "." ; done && '
|
90
|
+
cmd << 'echo "Setting lock" && '
|
91
|
+
cmd << 'touch .lock && '
|
92
|
+
|
93
|
+
# Make the conf directory and write out our configuration file
|
94
|
+
cmd << 'rm -rf apt && mkdir -p apt ; pushd apt > /dev/null && '
|
95
|
+
|
96
|
+
artifact_paths.each do |path|
|
97
|
+
platform_tag = Pkg::Paths.tag_from_artifact_path(path)
|
98
|
+
platform, version, _ = Pkg::Platforms. parse_platform_tag(platform_tag)
|
99
|
+
codename = Pkg::Platforms.codename_for_platform_version(platform, version)
|
100
|
+
arches = Pkg::Platforms.arches_for_codename(codename)
|
101
|
+
|
102
|
+
cmd << "mkdir -p #{codename}/conf && "
|
103
|
+
cmd << "pushd #{codename} ; "
|
104
|
+
cmd << %Q( [ -e 'conf/distributions' ] || echo "
|
105
|
+
Origin: Puppet Labs
|
106
|
+
Label: Puppet Labs
|
107
|
+
Codename: #{codename}
|
108
|
+
Architectures: #{(DEBIAN_PACKAGING_ARCHES + arches).uniq.join(' ')}
|
109
|
+
Components: #{reprepro_repo_name}
|
110
|
+
Description: Apt repository for acceptance testing" >> conf/distributions ; )
|
111
|
+
|
112
|
+
cmd << 'reprepro=$(which reprepro) && '
|
113
|
+
cmd << "$reprepro includedeb #{codename} ../../#{path}/*.deb && "
|
114
|
+
cmd << 'popd > /dev/null ; '
|
115
|
+
end
|
116
|
+
cmd << 'popd > /dev/null ; popd > /dev/null '
|
117
|
+
cmd
|
118
|
+
end
|
119
|
+
|
120
|
+
# This method is doing too much for its name
|
121
|
+
def create_repos(directory = 'repos')
|
122
|
+
artifact_directory = File.join(Pkg::Config.jenkins_repo_path, Pkg::Config.project, Pkg::Config.ref)
|
123
|
+
artifact_paths = Pkg::Repo.directories_that_contain_packages(File.join(artifact_directory, 'artifacts'), 'deb')
|
124
|
+
Pkg::Repo.populate_repo_directory(artifact_directory)
|
125
|
+
command = repo_creation_command(File.join(artifact_directory, 'repos'), artifact_paths)
|
126
|
+
|
127
|
+
begin
|
128
|
+
Pkg::Util::Net.remote_ssh_cmd(Pkg::Config.distribution_server, command)
|
129
|
+
# Now that we've created our package repositories, we can generate repo
|
130
|
+
# configurations for use with downstream jobs, acceptance clients, etc.
|
131
|
+
Pkg::Deb::Repo.generate_repo_configs
|
132
|
+
|
133
|
+
# Now that we've created the repo configs, we can ship them
|
134
|
+
Pkg::Deb::Repo.ship_repo_configs
|
135
|
+
ensure
|
136
|
+
# Always remove the lock file, even if we've failed
|
137
|
+
Pkg::Util::Net.remote_ssh_cmd(Pkg::Config.distribution_server, "rm -f #{artifact_directory}/repos/.lock")
|
138
|
+
end
|
139
|
+
end
|
140
|
+
|
141
|
+
def ship_repo_configs(target = "repo_configs")
|
142
|
+
if (!File.exist?("pkg/#{target}/deb")) || Pkg::Util::File.empty_dir?("pkg/#{target}/deb")
|
143
|
+
warn "No repo configs have been generated! Try pl:deb_repo_configs."
|
144
|
+
return
|
145
|
+
end
|
146
|
+
|
147
|
+
invoke_task("pl:fetch")
|
148
|
+
repo_dir = "#{Pkg::Config.jenkins_repo_path}/#{Pkg::Config.project}/#{Pkg::Config.ref}/#{target}/deb"
|
149
|
+
Pkg::Util::Net.remote_ssh_cmd(Pkg::Config.distribution_server, "mkdir -p #{repo_dir}")
|
150
|
+
Pkg::Util::Execution.retry_on_fail(:times => 3) do
|
151
|
+
Pkg::Util::Net.rsync_to("pkg/#{target}/deb/", Pkg::Config.distribution_server, repo_dir)
|
152
|
+
end
|
153
|
+
end
|
154
|
+
|
155
|
+
def sign_repos(target = "repos", message = "Signed apt repository")
|
156
|
+
reprepro = Pkg::Util::Tool.check_tool('reprepro')
|
157
|
+
Pkg::Util::Gpg.load_keychain if Pkg::Util::Tool.find_tool('keychain')
|
158
|
+
|
159
|
+
dists = Pkg::Util::File.directories("#{target}/apt")
|
160
|
+
supported_codenames = Pkg::Platforms.codenames
|
161
|
+
|
162
|
+
if dists
|
163
|
+
dists.each do |dist|
|
164
|
+
next unless supported_codenames.include?(dist)
|
165
|
+
arches = Pkg::Platforms.arches_for_codename(dist)
|
166
|
+
Dir.chdir("#{target}/apt/#{dist}") do
|
167
|
+
File.open("conf/distributions", "w") do |f|
|
168
|
+
f.puts "Origin: Puppet Labs
|
169
|
+
Label: Puppet Labs
|
170
|
+
Codename: #{dist}
|
171
|
+
Architectures: #{(DEBIAN_PACKAGING_ARCHES + arches).uniq.join(' ')}
|
172
|
+
Components: #{reprepro_repo_name}
|
173
|
+
Description: #{message} for #{dist}
|
174
|
+
SignWith: #{Pkg::Config.gpg_key}"
|
175
|
+
end
|
176
|
+
|
177
|
+
stdout, _, _ = Pkg::Util::Execution.capture3("#{reprepro} -vvv --confdir ./conf --dbdir ./db --basedir ./ export")
|
178
|
+
stdout
|
179
|
+
end
|
180
|
+
end
|
181
|
+
else
|
182
|
+
warn "No repos found to sign. Maybe you didn't build any debs, or the repo creation failed?"
|
183
|
+
end
|
184
|
+
end
|
185
|
+
|
186
|
+
# @deprecated this command will die a painful death when we are
|
187
|
+
# able to sit down with Operations and refactor our distribution infra.
|
188
|
+
# For now, it's extremely debian specific, which is why it lives here.
|
189
|
+
# - Ryan McKern 11/2015
|
190
|
+
#
|
191
|
+
# @param origin_path [String] path for Deb repos on local filesystem
|
192
|
+
# @param destination_path [String] path for Deb repos on remote filesystem
|
193
|
+
# @param destination [String] remote host to send rsynced content to. If
|
194
|
+
# nil will copy locally
|
195
|
+
# @param dryrun [Boolean] whether or not to use '--dry-run'
|
196
|
+
#
|
197
|
+
# @return [String] an rsync command that can be executed on a remote host
|
198
|
+
# to copy local content from that host to a remote node.
|
199
|
+
def repo_deployment_command(origin_path, destination_path, destination, dryrun = false)
|
200
|
+
path = Pathname.new(origin_path)
|
201
|
+
dest_path = Pathname.new(destination_path)
|
202
|
+
|
203
|
+
# You may think "rsync doesn't actually remove the sticky bit, let's
|
204
|
+
# remove the Dugo-s from the chmod". However, that will make your rsyncs
|
205
|
+
# fail due to permission errors.
|
206
|
+
options = %w(
|
207
|
+
rsync
|
208
|
+
--itemize-changes
|
209
|
+
--hard-links
|
210
|
+
--copy-links
|
211
|
+
--omit-dir-times
|
212
|
+
--progress
|
213
|
+
--archive
|
214
|
+
--update
|
215
|
+
--verbose
|
216
|
+
--super
|
217
|
+
--delay-updates
|
218
|
+
--omit-dir-times
|
219
|
+
--no-perms
|
220
|
+
--no-owner
|
221
|
+
--no-group
|
222
|
+
--exclude='dists/*-*'
|
223
|
+
--exclude='pool/*-*'
|
224
|
+
)
|
225
|
+
|
226
|
+
options << '--dry-run' if dryrun
|
227
|
+
options << path
|
228
|
+
if !destination.nil?
|
229
|
+
options << "#{destination}:#{dest_path.parent}"
|
230
|
+
else
|
231
|
+
options << "#{dest_path.parent}"
|
232
|
+
end
|
233
|
+
options.join("\s")
|
234
|
+
end
|
235
|
+
|
236
|
+
# @deprecated this command will die a painful death when we are
|
237
|
+
# able to sit down with Operations and refactor our distribution infra.
|
238
|
+
# It's extremely Debian specific due to how Debian repos are signed,
|
239
|
+
# which is why it lives here.
|
240
|
+
# Yes, it is basically just a layer of indirection around the task
|
241
|
+
# of copying content from one node to another. No, I am not proud
|
242
|
+
# of it. - Ryan McKern 11/2015
|
243
|
+
#
|
244
|
+
# @param apt_path [String] path for Deb repos on local and remote filesystem
|
245
|
+
# @param destination_staging_path [String] staging path for Deb repos on
|
246
|
+
# remote filesystem
|
247
|
+
# @param origin_server [String] remote host to start the rsync from
|
248
|
+
# @param destination_server [String] remote host to send rsynced content to
|
249
|
+
# @param dryrun [Boolean] whether or not to use '--dry-run'
|
250
|
+
def deploy_repos(apt_path, destination_staging_path, origin_server, destination_server, dryrun = false)
|
251
|
+
rsync_command = repo_deployment_command(apt_path, destination_staging_path, destination_server, dryrun)
|
252
|
+
cp_command = repo_deployment_command(destination_staging_path, apt_path, nil, dryrun)
|
253
|
+
|
254
|
+
Pkg::Util::Net.remote_ssh_cmd(origin_server, rsync_command)
|
255
|
+
if dryrun
|
256
|
+
puts "[DRYRUN] not executing #{cp_command} on #{destination_server}"
|
257
|
+
else
|
258
|
+
Pkg::Util::Net.remote_ssh_cmd(destination_server, cp_command)
|
259
|
+
end
|
260
|
+
end
|
261
|
+
|
262
|
+
end
|
263
|
+
end
|