OLD | NEW |
1 # This Source Code Form is subject to the terms of the Mozilla Public | 1 # This Source Code Form is subject to the terms of the Mozilla Public |
2 # License, v. 2.0. If a copy of the MPL was not distributed with this | 2 # License, v. 2.0. If a copy of the MPL was not distributed with this |
3 # file, You can obtain one at http://mozilla.org/MPL/2.0/. | 3 # file, You can obtain one at http://mozilla.org/MPL/2.0/. |
4 | 4 |
5 from __future__ import print_function | 5 from __future__ import print_function |
6 | 6 |
7 import os | 7 import os |
8 import operator | 8 import operator |
9 import re | 9 import re |
10 import codecs | 10 import codecs |
(...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
186 rawMetadata = re.sub( | 186 rawMetadata = re.sub( |
187 r'^(\s*version\s*=\s*).*', r'\g<1>%s' % version, | 187 r'^(\s*version\s*=\s*).*', r'\g<1>%s' % version, |
188 rawMetadata, flags=re.I | re.M | 188 rawMetadata, flags=re.I | re.M |
189 ) | 189 ) |
190 | 190 |
191 fp.seek(0) | 191 fp.seek(0) |
192 fp.write(rawMetadata) | 192 fp.write(rawMetadata) |
193 fp.truncate() | 193 fp.truncate() |
194 | 194 |
195 | 195 |
196 def create_build(platform, base_dir, target_path, version, key_file=None): | 196 def create_build(platform, base_dir, target_path, version): |
197 """Create a build for the target platform and version.""" | 197 """Create a build for the target platform and version.""" |
198 if platform == 'edge': | 198 if platform == 'edge': |
199 import buildtools.packagerEdge as packager | 199 import buildtools.packagerEdge as packager |
200 else: | 200 else: |
201 import buildtools.packagerChrome as packager | 201 import buildtools.packagerChrome as packager |
202 | 202 |
203 metadata = readMetadata(base_dir, platform) | 203 metadata = readMetadata(base_dir, platform) |
204 update_metadata(metadata, version) | 204 update_metadata(metadata, version) |
205 | 205 |
206 build_path = os.path.join( | 206 build_path = os.path.join( |
207 target_path, | 207 target_path, |
208 getDefaultFileName(metadata, version, | 208 getDefaultFileName(metadata, version, get_extension(platform)) |
209 get_extension(platform, key_file is not None)) | |
210 ) | 209 ) |
211 | 210 |
212 packager.createBuild(base_dir, type=platform, outFile=build_path, | 211 packager.createBuild(base_dir, type=platform, outFile=build_path, |
213 releaseBuild=True, keyFile=key_file) | 212 releaseBuild=True) |
214 | 213 |
215 return build_path | 214 return build_path |
216 | 215 |
217 | 216 |
218 def release_commit(base_dir, extension_name, version, platforms): | 217 def release_commit(base_dir, extension_name, version, platforms): |
219 """Create a release commit with a representative message.""" | 218 """Create a release commit with a representative message.""" |
220 subprocess.check_output([ | 219 subprocess.check_output([ |
221 'hg', 'commit', '-R', base_dir, '-m', | 220 'hg', 'commit', '-R', base_dir, '-m', |
222 'Noissue - Releasing {} {} for {}'.format( | 221 'Noissue - Releasing {} {} for {}'.format( |
223 extension_name, version, | 222 extension_name, version, |
224 ', '.join([p.capitalize() for p in platforms]))], | 223 ', '.join([p.capitalize() for p in platforms]))], |
225 stderr=subprocess.STDOUT) | 224 stderr=subprocess.STDOUT) |
226 | 225 |
227 | 226 |
228 def release_tag(base_dir, tag_name, extension_name): | 227 def release_tag(base_dir, tag_name, extension_name): |
229 """Create a tag, along with a commit message for that tag.""" | 228 """Create a tag, along with a commit message for that tag.""" |
230 subprocess.check_call([ | 229 subprocess.check_call([ |
231 'hg', 'tag', '-R', base_dir, '-f', tag_name, | 230 'hg', 'tag', '-R', base_dir, '-f', tag_name, |
232 '-m', 'Noissue - Adding release tag for {} {}'.format( | 231 '-m', 'Noissue - Adding release tag for {} {}'.format( |
233 extension_name, tag_name)]) | 232 extension_name, tag_name)]) |
234 | 233 |
235 | 234 |
236 def run(baseDir, platforms, version, keyFile, downloads_repo): | 235 def run(baseDir, platforms, version, downloads_repo): |
237 if not can_safely_release(baseDir, downloads_repo): | 236 if not can_safely_release(baseDir, downloads_repo): |
238 print('Aborting release.') | 237 print('Aborting release.') |
239 return 1 | 238 return 1 |
240 | 239 |
241 target_platforms = sorted(platforms) | 240 target_platforms = sorted(platforms) |
242 release_identifier = '-'.join([version] + [p for p in target_platforms]) | 241 release_identifier = '-'.join([version] + [p for p in target_platforms]) |
243 | 242 |
244 release_possible, reason, re_release = release_combination_is_possible( | 243 release_possible, reason, re_release = release_combination_is_possible( |
245 version, platforms, baseDir) | 244 version, platforms, baseDir) |
246 | 245 |
247 if not release_possible: | 246 if not release_possible: |
248 logging.error(reason) | 247 logging.error(reason) |
249 return 2 | 248 return 2 |
250 | 249 |
251 downloads = [] | 250 downloads = [] |
252 # Read extension name from first provided platform | 251 # Read extension name from first provided platform |
253 locale_config = read_locale_config( | 252 locale_config = read_locale_config( |
254 baseDir, target_platforms[0], | 253 baseDir, target_platforms[0], |
255 readMetadata(baseDir, target_platforms[0])) | 254 readMetadata(baseDir, target_platforms[0])) |
256 default_locale_path = os.path.join(locale_config['base_path'], | 255 default_locale_path = os.path.join(locale_config['base_path'], |
257 locale_config['default_locale'], | 256 locale_config['default_locale'], |
258 'messages.json') | 257 'messages.json') |
259 with open(default_locale_path, 'r') as fp: | 258 with open(default_locale_path, 'r') as fp: |
260 extension_name = json.load(fp)['name']['message'] | 259 extension_name = json.load(fp)['name']['message'] |
261 | 260 |
262 for platform in target_platforms: | 261 for platform in target_platforms: |
263 used_key_file = None | |
264 if platform == 'chrome': | |
265 # Currently, only chrome builds are provided by us as signed | |
266 # packages. Create an unsigned package in base_dir which should be | |
267 # uploaded to the Chrome Web Store | |
268 create_build(platform, baseDir, baseDir, version) | |
269 used_key_file = keyFile | |
270 | |
271 downloads.append( | 262 downloads.append( |
272 create_build(platform, baseDir, downloads_repo, version, | 263 create_build(platform, baseDir, downloads_repo, version) |
273 used_key_file) | |
274 ) | 264 ) |
275 | 265 |
276 # Only create one commit, one tag and one source archive for all | 266 # Only create one commit, one tag and one source archive for all |
277 # platforms | 267 # platforms |
278 archive_path = os.path.join( | 268 archive_path = os.path.join( |
279 downloads_repo, | 269 downloads_repo, |
280 'adblockplus-{}-source.tgz'.format(release_identifier), | 270 'adblockplus-{}-source.tgz'.format(release_identifier), |
281 ) | 271 ) |
282 create_sourcearchive(baseDir, archive_path) | 272 create_sourcearchive(baseDir, archive_path) |
283 downloads.append(archive_path) | 273 downloads.append(archive_path) |
284 try: | 274 try: |
285 release_commit(baseDir, extension_name, version, target_platforms) | 275 release_commit(baseDir, extension_name, version, target_platforms) |
286 except subprocess.CalledProcessError as e: | 276 except subprocess.CalledProcessError as e: |
287 if not (re_release and 'nothing changed' in e.output): | 277 if not (re_release and 'nothing changed' in e.output): |
288 raise | 278 raise |
289 | 279 |
290 release_tag(baseDir, release_identifier, extension_name) | 280 release_tag(baseDir, release_identifier, extension_name) |
291 | 281 |
292 # Now add the downloads and commit | 282 # Now add the downloads and commit |
293 subprocess.check_call(['hg', 'add', '-R', downloads_repo] + downloads) | 283 subprocess.check_call(['hg', 'add', '-R', downloads_repo] + downloads) |
294 release_commit(downloads_repo, extension_name, version, target_platforms) | 284 release_commit(downloads_repo, extension_name, version, target_platforms) |
295 | 285 |
296 # Push all changes | 286 # Push all changes |
297 subprocess.check_call(['hg', 'push', '-R', baseDir]) | 287 subprocess.check_call(['hg', 'push', '-R', baseDir]) |
298 subprocess.check_call(['hg', 'push', '-R', downloads_repo]) | 288 subprocess.check_call(['hg', 'push', '-R', downloads_repo]) |
OLD | NEW |