def testMarkAndroidEBuildAsStable(self): """Test updating of ebuild.""" self.PatchObject(cros_build_lib, 'RunCommand') self.PatchObject(portage_util.EBuild, 'GetCrosWorkonVars', return_value=None) git_mock = self.PatchObject(git, 'RunGit') commit_mock = self.PatchObject(portage_util.EBuild, 'CommitChange') stable_candidate = portage_util.EBuild(self.old2) unstable = portage_util.EBuild(self.unstable) android_version = self.new_version package_dir = self.mock_android_dir version_atom = cros_mark_android_as_stable.MarkAndroidEBuildAsStable( stable_candidate, unstable, self.android_package, android_version, package_dir, self.build_branch, self.arc_bucket_url, self.targets) git_mock.assert_has_calls([ mock.call(package_dir, ['add', self.new]), mock.call(package_dir, ['add', 'Manifest']), ]) commit_mock.assert_called_with(partial_mock.HasString('latest'), package_dir) self.assertEqual( version_atom, '%s-%s-r1' % ( portage_util.GetFullAndroidPortagePackageName(self.android_package), self.new_version))
def main(argv): logging.EnableBuildbotMarkers() parser = GetParser() options = parser.parse_args(argv) options.Freeze() overlay_dir = os.path.abspath(_OVERLAY_DIR % {'srcroot': options.srcroot}) android_package_dir = os.path.join( overlay_dir, portage_util.GetFullAndroidPortagePackageName(options.android_package)) version_to_uprev = None (unstable_ebuild, stable_ebuilds) = FindAndroidCandidates(android_package_dir) acls = MakeAclDict(android_package_dir) build_targets = MakeBuildTargetDict(options.android_package, options.android_build_branch) # Mirror artifacts, i.e., images and some sdk tools (e.g., adb, aapt). version_to_uprev = MirrorArtifacts(options.android_bucket_url, options.android_build_branch, options.arc_bucket_url, acls, build_targets, options.force_version) stable_candidate = portage_util.BestEBuild(stable_ebuilds) if stable_candidate: logging.info('Stable candidate found %s', stable_candidate.version) else: logging.info('No stable candidate found.') tracking_branch = 'remotes/m/%s' % os.path.basename(options.tracking_branch) existing_branch = git.GetCurrentBranch(android_package_dir) work_branch = cros_mark_as_stable.GitBranch(constants.STABLE_EBUILD_BRANCH, tracking_branch, android_package_dir) work_branch.CreateBranch() # In the case of uprevving overlays that have patches applied to them, # include the patched changes in the stabilizing branch. if existing_branch: git.RunGit(overlay_dir, ['rebase', existing_branch]) android_version_atom = MarkAndroidEBuildAsStable( stable_candidate, unstable_ebuild, options.android_package, version_to_uprev, android_package_dir, options.android_build_branch, options.arc_bucket_url, options.runtime_artifacts_bucket_url, build_targets) if android_version_atom: if options.boards: cros_mark_as_stable.CleanStalePackages(options.srcroot, options.boards.split(':'), [android_version_atom]) # Explicit print to communicate to caller. print('ANDROID_VERSION_ATOM=%s' % android_version_atom)
def setUp(self): """Setup vars and create mock dir.""" self.android_package = 'test_package' self.tmp_overlay = os.path.join(self.tempdir, 'chromiumos-overlay') self.mock_android_dir = os.path.join( self.tmp_overlay, portage_util.GetFullAndroidPortagePackageName(self.android_package)) ebuild = os.path.join(self.mock_android_dir, self.android_package + '-%s.ebuild') self.unstable = ebuild % '9999' self.old_version = '25' self.old = ebuild % self.old_version self.old2_version = '50' self.old2 = ebuild % self.old2_version self.new_version = '100' self.new = ebuild % ('%s-r1' % self.new_version) self.partial_new_version = '150' self.not_new_version = '200' osutils.WriteFile(self.unstable, self.unstable_data, makedirs=True) osutils.WriteFile(self.old, self.stable_data, makedirs=True) osutils.WriteFile(self.old2, self.stable_data, makedirs=True) self.internal_acl_data = '-g google.com:READ' self.arm_acl_data = '-g google.com:READ' self.x86_acl_data = '-g google.com:WRITE' self.cts_acl_data = '-g google.com:WRITE' self.arm_acl = os.path.join(self.mock_android_dir, 'googlestorage_arm_acl.txt') self.x86_acl = os.path.join(self.mock_android_dir, 'googlestorage_x86_acl.txt') self.internal_acl = os.path.join(self.mock_android_dir, 'googlestorage_internal_acl.txt') self.cts_acl = os.path.join(self.mock_android_dir, 'googlestorage_cts_acl.txt') self.acls = { 'ARM': self.arm_acl, 'X86': self.x86_acl, 'X86_NDK_TRANSLATION': self.internal_acl, 'X86_INTERNAL': self.internal_acl, 'X86_64': self.x86_acl, 'X86_USERDEBUG': self.x86_acl, 'X86_NDK_TRANSLATION_USERDEBUG': self.internal_acl, 'X86_64_USERDEBUG': self.x86_acl, 'AOSP_X86_USERDEBUG': self.x86_acl, 'SDK_GOOGLE_X86_USERDEBUG': self.x86_acl, 'SDK_GOOGLE_X86_64_USERDEBUG': self.x86_acl, 'SDK_TOOLS': self.cts_acl, } osutils.WriteFile(self.arm_acl, self.arm_acl_data, makedirs=True) osutils.WriteFile(self.x86_acl, self.x86_acl_data, makedirs=True) osutils.WriteFile(self.cts_acl, self.cts_acl_data, makedirs=True) osutils.WriteFile(self.internal_acl, self.internal_acl_data, makedirs=True) self.bucket_url = 'gs://u' self.build_branch = constants.ANDROID_NYC_BUILD_BRANCH self.gs_mock = self.StartPatcher(gs_unittest.GSContextMock()) self.arc_bucket_url = 'gs://a' self.targets = cros_mark_android_as_stable.MakeBuildTargetDict( self.build_branch).copy() # Internal targets share path with main targets. # Redefine them for decoupled testing. self.targets['X86_INTERNAL'] = ( self.targets['X86_INTERNAL'][0] + '-internal', self.targets['X86_INTERNAL'][1]) # We only test NYC targets, thus add ndk-translation targets from PI, so # that they are covered too. self.targets['X86_NDK_TRANSLATION'] = \ constants.ANDROID_PI_BUILD_TARGETS['X86_NDK_TRANSLATION'] self.targets['X86_NDK_TRANSLATION_USERDEBUG'] = \ constants.ANDROID_PI_BUILD_TARGETS['X86_NDK_TRANSLATION_USERDEBUG'] builds = { 'ARM': [ self.old_version, self.old2_version, self.new_version, self.partial_new_version ], 'X86': [self.old_version, self.old2_version, self.new_version], 'X86_NDK_TRANSLATION': [ self.old_version, self.old2_version, self.new_version ], 'X86_INTERNAL': [self.old_version, self.old2_version, self.new_version], 'X86_64': [self.old_version, self.old2_version, self.new_version], 'X86_USERDEBUG': [ self.old_version, self.old2_version, self.new_version ], 'X86_NDK_TRANSLATION_USERDEBUG': [ self.old_version, self.old2_version, self.new_version ], 'X86_64_USERDEBUG': [ self.old_version, self.old2_version, self.new_version ], 'AOSP_X86_USERDEBUG': [ self.old_version, self.old2_version, self.new_version ], 'SDK_GOOGLE_X86_USERDEBUG': [ self.old_version, self.old2_version, self.new_version ], 'SDK_GOOGLE_X86_64_USERDEBUG': [ self.old_version, self.old2_version, self.new_version ], 'SDK_TOOLS': [ self.old_version, self.old2_version, self.new_version, self.partial_new_version ], } for build_type, builds in builds.iteritems(): url = self.makeSrcTargetUrl(self.targets[build_type][0]) builds = '\n'.join(os.path.join(url, version) for version in builds) self.gs_mock.AddCmdResult(['ls', '--', url], output=builds) for version in [self.old_version, self.old2_version, self.new_version]: for key in self.targets.iterkeys(): self.setupMockBuild(key, version) self.new_subpaths = { 'ARM': 'linux-cheets_arm-user100', 'X86': 'linux-cheets_x86-user100', 'X86_NDK_TRANSLATION': 'linux-cheets_x86_ndk_translation-user100', 'X86_INTERNAL': 'linux-cheets_x86-user-internal100', 'X86_64': 'linux-cheets_x86_64-user100', 'X86_USERDEBUG': 'linux-cheets_x86-userdebug100', 'X86_NDK_TRANSLATION_USERDEBUG': 'linux-cheets_x86_ndk_translation-userdebug100', 'X86_64_USERDEBUG': 'linux-cheets_x86_64-userdebug100', 'AOSP_X86_USERDEBUG': 'linux-aosp_cheets_x86-userdebug100', 'SDK_GOOGLE_X86_USERDEBUG': 'linux-sdk_google_cheets_x86-userdebug100', 'SDK_GOOGLE_X86_64_USERDEBUG': 'linux-sdk_google_cheets_x86_64-userdebug100', 'SDK_TOOLS': 'linux-static_sdk_tools100', } self.setupMockBuild('ARM', self.partial_new_version) self.setupMockBuild('X86', self.partial_new_version, valid=False) self.setupMockBuild('X86_NDK_TRANSLATION', self.partial_new_version, valid=False) self.setupMockBuild('X86_INTERNAL', self.partial_new_version, valid=False) self.setupMockBuild('X86_64', self.partial_new_version, valid=False) self.setupMockBuild('X86_USERDEBUG', self.partial_new_version, valid=False) self.setupMockBuild('X86_NDK_TRANSLATION_USERDEBUG', self.partial_new_version, valid=False) self.setupMockBuild('X86_64_USERDEBUG', self.partial_new_version, valid=False) self.setupMockBuild('AOSP_X86_USERDEBUG', self.partial_new_version, valid=False) self.setupMockBuild('SDK_GOOGLE_X86_USERDEBUG', self.partial_new_version, valid=False) self.setupMockBuild('SDK_GOOGLE_X86_64_USERDEBUG', self.partial_new_version, valid=False) self.setupMockBuild('SDK_TOOLS', self.partial_new_version) for key in self.targets.iterkeys(): self.setupMockBuild(key, self.not_new_version, False)