| OLD | NEW |
| 1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
| 2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. | 2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 3 # Use of this source code is governed by a BSD-style license that can be | 3 # Use of this source code is governed by a BSD-style license that can be |
| 4 # found in the LICENSE file. | 4 # found in the LICENSE file. |
| 5 | 5 |
| 6 """Script that reads omahaproxy and gsutil to determine version of SDK to put | 6 """Script that reads omahaproxy and gsutil to determine version of SDK to put |
| 7 in manifest. | 7 in manifest. |
| 8 """ | 8 """ |
| 9 | 9 |
| 10 # pylint is convinced the email module is missing attributes | 10 # pylint is convinced the email module is missing attributes |
| (...skipping 21 matching lines...) Expand all Loading... |
| 32 | 32 |
| 33 MANIFEST_BASENAME = 'naclsdk_manifest2.json' | 33 MANIFEST_BASENAME = 'naclsdk_manifest2.json' |
| 34 SCRIPT_DIR = os.path.dirname(__file__) | 34 SCRIPT_DIR = os.path.dirname(__file__) |
| 35 REPO_MANIFEST = os.path.join(SCRIPT_DIR, 'json', MANIFEST_BASENAME) | 35 REPO_MANIFEST = os.path.join(SCRIPT_DIR, 'json', MANIFEST_BASENAME) |
| 36 GS_BUCKET_PATH = 'gs://nativeclient-mirror/nacl/nacl_sdk/' | 36 GS_BUCKET_PATH = 'gs://nativeclient-mirror/nacl/nacl_sdk/' |
| 37 GS_SDK_MANIFEST = GS_BUCKET_PATH + MANIFEST_BASENAME | 37 GS_SDK_MANIFEST = GS_BUCKET_PATH + MANIFEST_BASENAME |
| 38 GS_SDK_MANIFEST_LOG = GS_BUCKET_PATH + MANIFEST_BASENAME + '.log' | 38 GS_SDK_MANIFEST_LOG = GS_BUCKET_PATH + MANIFEST_BASENAME + '.log' |
| 39 GS_MANIFEST_BACKUP_DIR = GS_BUCKET_PATH + 'manifest_backups/' | 39 GS_MANIFEST_BACKUP_DIR = GS_BUCKET_PATH + 'manifest_backups/' |
| 40 | 40 |
| 41 CANARY_BUNDLE_NAME = 'pepper_canary' | 41 CANARY_BUNDLE_NAME = 'pepper_canary' |
| 42 BIONIC_CANARY_BUNDLE_NAME = 'bionic_canary' |
| 42 CANARY = 'canary' | 43 CANARY = 'canary' |
| 43 NACLPORTS_ARCHIVE_NAME = 'naclports.tar.bz2' | 44 NACLPORTS_ARCHIVE_NAME = 'naclports.tar.bz2' |
| 44 | 45 |
| 45 | 46 |
| 46 logger = logging.getLogger(__name__) | 47 logger = logging.getLogger(__name__) |
| 47 | 48 |
| 48 | 49 |
| 49 def SplitVersion(version_string): | 50 def SplitVersion(version_string): |
| 50 """Split a version string (e.g. "18.0.1025.163") into its components. | 51 """Split a version string (e.g. "18.0.1025.163") into its components. |
| 51 | 52 |
| (...skipping 26 matching lines...) Expand all Loading... |
| 78 | 79 |
| 79 Args: | 80 Args: |
| 80 platform: One of ('win', 'mac', 'linux'). | 81 platform: One of ('win', 'mac', 'linux'). |
| 81 | 82 |
| 82 Returns: | 83 Returns: |
| 83 The basename of the sdk archive for that platform. | 84 The basename of the sdk archive for that platform. |
| 84 """ | 85 """ |
| 85 return 'naclsdk_%s.tar.bz2' % platform | 86 return 'naclsdk_%s.tar.bz2' % platform |
| 86 | 87 |
| 87 | 88 |
| 89 def GetBionicArchiveName(): |
| 90 """Get the basename of an archive. Currently this is linux-only""" |
| 91 return 'naclsdk_bionic.tar.bz2' |
| 92 |
| 93 |
| 88 def GetCanonicalArchiveName(url): | 94 def GetCanonicalArchiveName(url): |
| 89 """Get the canonical name of an archive given its URL. | 95 """Get the canonical name of an archive given its URL. |
| 90 | 96 |
| 91 This will convert "naclsdk_linux.bz2" -> "naclsdk_linux.tar.bz2", and also | 97 This will convert "naclsdk_linux.bz2" -> "naclsdk_linux.tar.bz2", and also |
| 92 remove everything but the filename of the URL. | 98 remove everything but the filename of the URL. |
| 93 | 99 |
| 94 This is used below to determine if an expected bundle is found in an version | 100 This is used below to determine if an expected bundle is found in an version |
| 95 directory; the archives all have the same name, but may not exist for a given | 101 directory; the archives all have the same name, but may not exist for a given |
| 96 version. | 102 version. |
| 97 | 103 |
| (...skipping 226 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 324 """Finds a version of a pepper bundle that all desired platforms share. | 330 """Finds a version of a pepper bundle that all desired platforms share. |
| 325 | 331 |
| 326 Args: | 332 Args: |
| 327 delegate: See Delegate class above. | 333 delegate: See Delegate class above. |
| 328 platforms: A sequence of platforms to consider, e.g. | 334 platforms: A sequence of platforms to consider, e.g. |
| 329 ('mac', 'linux', 'win') | 335 ('mac', 'linux', 'win') |
| 330 extra_archives: A sequence of tuples: (archive_basename, minimum_version), | 336 extra_archives: A sequence of tuples: (archive_basename, minimum_version), |
| 331 e.g. [('foo.tar.bz2', '18.0.1000.0'), ('bar.tar.bz2', '19.0.1100.20')] | 337 e.g. [('foo.tar.bz2', '18.0.1000.0'), ('bar.tar.bz2', '19.0.1100.20')] |
| 332 These archives must exist to consider a version for inclusion, as | 338 These archives must exist to consider a version for inclusion, as |
| 333 long as that version is greater than the archive's minimum version. | 339 long as that version is greater than the archive's minimum version. |
| 340 is_bionic: True if we are searching for bionic archives. |
| 334 """ | 341 """ |
| 335 def __init__(self, delegate, platforms, extra_archives=None): | 342 def __init__(self, delegate, platforms, extra_archives=None, is_bionic=False): |
| 336 self.delegate = delegate | 343 self.delegate = delegate |
| 337 self.history = delegate.GetHistory() | 344 self.history = delegate.GetHistory() |
| 338 self.platforms = platforms | 345 self.platforms = platforms |
| 339 self.extra_archives = extra_archives | 346 self.extra_archives = extra_archives |
| 347 self.is_bionic = is_bionic |
| 340 | 348 |
| 341 def GetMostRecentSharedVersion(self, major_version): | 349 def GetMostRecentSharedVersion(self, major_version): |
| 342 """Returns the most recent version of a pepper bundle that exists on all | 350 """Returns the most recent version of a pepper bundle that exists on all |
| 343 given platforms. | 351 given platforms. |
| 344 | 352 |
| 345 Specifically, the resulting version should be the most recently released | 353 Specifically, the resulting version should be the most recently released |
| 346 (meaning closest to the top of the listing on | 354 (meaning closest to the top of the listing on |
| 347 omahaproxy.appspot.com/history) version that has a Chrome release on all | 355 omahaproxy.appspot.com/history) version that has a Chrome release on all |
| 348 given platforms, and has a pepper bundle archive for each platform as well. | 356 given platforms, and has a pepper bundle archive for each platform as well. |
| 349 | 357 |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 395 | 403 |
| 396 Args: | 404 Args: |
| 397 version: The version to find archives for. (e.g. "18.0.1025.164") | 405 version: The version to find archives for. (e.g. "18.0.1025.164") |
| 398 allow_trunk_revisions: If True, will search for archives using the | 406 allow_trunk_revisions: If True, will search for archives using the |
| 399 trunk revision that matches the branch version. | 407 trunk revision that matches the branch version. |
| 400 Returns: | 408 Returns: |
| 401 A tuple (archives, missing_archives). |archives| is a list of archive | 409 A tuple (archives, missing_archives). |archives| is a list of archive |
| 402 URLs, |missing_archives| is a list of archive names. | 410 URLs, |missing_archives| is a list of archive names. |
| 403 """ | 411 """ |
| 404 archive_urls = self._GetAvailableArchivesFor(version) | 412 archive_urls = self._GetAvailableArchivesFor(version) |
| 405 platform_archives = set(GetPlatformArchiveName(p) for p in self.platforms) | 413 |
| 406 expected_archives = platform_archives | 414 if self.is_bionic: |
| 415 # Bionic currently is Linux-only. |
| 416 expected_archives = set([GetBionicArchiveName()]) |
| 417 else: |
| 418 expected_archives = set(GetPlatformArchiveName(p) for p in self.platforms) |
| 419 |
| 407 if self.extra_archives: | 420 if self.extra_archives: |
| 408 for extra_archive, extra_archive_min_version in self.extra_archives: | 421 for extra_archive, extra_archive_min_version in self.extra_archives: |
| 409 if SplitVersion(version) >= SplitVersion(extra_archive_min_version): | 422 if SplitVersion(version) >= SplitVersion(extra_archive_min_version): |
| 410 expected_archives.add(extra_archive) | 423 expected_archives.add(extra_archive) |
| 411 found_archives = set(GetCanonicalArchiveName(a) for a in archive_urls) | 424 found_archives = set(GetCanonicalArchiveName(a) for a in archive_urls) |
| 412 missing_archives = expected_archives - found_archives | 425 missing_archives = expected_archives - found_archives |
| 426 |
| 413 if allow_trunk_revisions and missing_archives: | 427 if allow_trunk_revisions and missing_archives: |
| 414 # Try to find trunk versions of any missing archives. | 428 # Try to find trunk versions of any missing archives. |
| 415 trunk_version = self.delegate.GetTrunkRevision(version) | 429 trunk_version = self.delegate.GetTrunkRevision(version) |
| 416 trunk_archives = self._GetAvailableArchivesFor(trunk_version) | 430 trunk_archives = self._GetAvailableArchivesFor(trunk_version) |
| 417 for trunk_archive_url in trunk_archives: | 431 for trunk_archive_url in trunk_archives: |
| 418 trunk_archive = GetCanonicalArchiveName(trunk_archive_url) | 432 trunk_archive = GetCanonicalArchiveName(trunk_archive_url) |
| 419 if trunk_archive in missing_archives: | 433 if trunk_archive in missing_archives: |
| 420 archive_urls.append(trunk_archive_url) | 434 archive_urls.append(trunk_archive_url) |
| 421 missing_archives.discard(trunk_archive) | 435 missing_archives.discard(trunk_archive) |
| 422 | 436 |
| (...skipping 372 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 795 e.g. ('pepper_21', '21.0.1145.0') | 809 e.g. ('pepper_21', '21.0.1145.0') |
| 796 """ | 810 """ |
| 797 if fixed_bundle_versions: | 811 if fixed_bundle_versions: |
| 798 fixed_bundle_versions = dict(fixed_bundle_versions) | 812 fixed_bundle_versions = dict(fixed_bundle_versions) |
| 799 else: | 813 else: |
| 800 fixed_bundle_versions = {} | 814 fixed_bundle_versions = {} |
| 801 | 815 |
| 802 manifest = delegate.GetRepoManifest() | 816 manifest = delegate.GetRepoManifest() |
| 803 auto_update_bundles = [] | 817 auto_update_bundles = [] |
| 804 for bundle in manifest.GetBundles(): | 818 for bundle in manifest.GetBundles(): |
| 805 if not bundle.name.startswith('pepper_'): | 819 if not bundle.name.startswith(('pepper_', 'bionic_')): |
| 806 continue | 820 continue |
| 807 archives = bundle.GetArchives() | 821 archives = bundle.GetArchives() |
| 808 if not archives: | 822 if not archives: |
| 809 auto_update_bundles.append(bundle) | 823 auto_update_bundles.append(bundle) |
| 810 | 824 |
| 811 if not auto_update_bundles: | 825 if not auto_update_bundles: |
| 812 logger.info('No versions need auto-updating.') | 826 logger.info('No versions need auto-updating.') |
| 813 return | 827 return |
| 814 | 828 |
| 815 version_finder = VersionFinder(delegate, platforms, extra_archives) | |
| 816 updater = Updater(delegate) | 829 updater = Updater(delegate) |
| 817 | 830 |
| 818 for bundle in auto_update_bundles: | 831 for bundle in auto_update_bundles: |
| 819 try: | 832 try: |
| 820 if bundle.name == CANARY_BUNDLE_NAME: | 833 if bundle.name == BIONIC_CANARY_BUNDLE_NAME: |
| 834 logger.info('>>> Looking for most recent bionic_canary...') |
| 835 version_finder = VersionFinder(delegate, platforms, extra_archives, |
| 836 is_bionic=True) |
| 837 version, channel, archives = version_finder.GetMostRecentSharedCanary() |
| 838 elif bundle.name == CANARY_BUNDLE_NAME: |
| 821 logger.info('>>> Looking for most recent pepper_canary...') | 839 logger.info('>>> Looking for most recent pepper_canary...') |
| 840 version_finder = VersionFinder(delegate, platforms, extra_archives) |
| 822 version, channel, archives = version_finder.GetMostRecentSharedCanary() | 841 version, channel, archives = version_finder.GetMostRecentSharedCanary() |
| 823 else: | 842 else: |
| 824 logger.info('>>> Looking for most recent pepper_%s...' % | 843 logger.info('>>> Looking for most recent pepper_%s...' % |
| 825 bundle.version) | 844 bundle.version) |
| 845 version_finder = VersionFinder(delegate, platforms, extra_archives) |
| 826 version, channel, archives = version_finder.GetMostRecentSharedVersion( | 846 version, channel, archives = version_finder.GetMostRecentSharedVersion( |
| 827 bundle.version) | 847 bundle.version) |
| 828 except NoSharedVersionException: | 848 except NoSharedVersionException: |
| 829 # If we can't find a shared version, make sure that there is an uploaded | 849 # If we can't find a shared version, make sure that there is an uploaded |
| 830 # bundle with that name already. | 850 # bundle with that name already. |
| 831 updater.AddLockedBundle(bundle.name) | 851 updater.AddLockedBundle(bundle.name) |
| 832 continue | 852 continue |
| 833 | 853 |
| 834 if bundle.name in fixed_bundle_versions: | 854 if bundle.name in fixed_bundle_versions: |
| 835 # Ensure this version is valid for all platforms. | 855 # Ensure this version is valid for all platforms. |
| (...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 942 gsutil_logging_handler.upload() | 962 gsutil_logging_handler.upload() |
| 943 except manifest_util.Error as e: | 963 except manifest_util.Error as e: |
| 944 if options.debug: | 964 if options.debug: |
| 945 raise | 965 raise |
| 946 sys.stderr.write(str(e) + '\n') | 966 sys.stderr.write(str(e) + '\n') |
| 947 return 1 | 967 return 1 |
| 948 | 968 |
| 949 | 969 |
| 950 if __name__ == '__main__': | 970 if __name__ == '__main__': |
| 951 sys.exit(main(sys.argv)) | 971 sys.exit(main(sys.argv)) |
| OLD | NEW |