def execute(self): # One time setup of the default keystore config file. if not os.path.isfile(self.default_config_location): self.setup_default_config(self.default_config_location) targets = self.context.targets(self.is_signtarget) with self.invalidated(targets) as invalidation_check: invalid_targets = [] for vt in invalidation_check.invalid_vts: invalid_targets.extend(vt.targets) for target in invalid_targets: def get_products_path(target): """Get path of target's unsigned apks as created by AaptBuilder.""" unsigned_apks = self.context.products.get('apk') packages = unsigned_apks.get(target) if packages: for tgts, products in packages.items(): for prod in products: yield os.path.join(tgts, prod) packages = list(get_products_path(target)) for unsigned_apk in packages: keystores = KeystoreResolver.resolve(self.config_file) for key in keystores: outdir = self.sign_apk_out(target, keystores[key].build_type) safe_mkdir(outdir) args = self._render_args(target, keystores[key], unsigned_apk, outdir) with self.context.new_workunit( name='sign_apk', labels=[WorkUnitLabel.MULTITOOL]) as workunit: returncode = subprocess.call( args, stdout=workunit.output('stdout'), stderr=workunit.output('stderr')) if returncode: raise TaskError( 'The SignApk jarsigner process exited non-zero: {0}' .format(returncode)) for target in targets: release_path = self.sign_apk_out(target, 'release') release_apk = self.signed_package_name(target, 'release') if os.path.isfile(os.path.join(release_path, release_apk)): self.context.products.get('release_apk').add( target, release_path).append(release_apk)
def execute(self): # One time setup of the default keystore config file. if not os.path.isfile(self.default_config_location): self.setup_default_config(self.default_config_location) targets = self.context.targets(self.is_signtarget) with self.invalidated(targets) as invalidation_check: invalid_targets = [] for vt in invalidation_check.invalid_vts: invalid_targets.extend(vt.targets) for target in invalid_targets: def get_products_path(target): """Get path of target's unsigned apks as created by AaptBuilder.""" unsigned_apks = self.context.products.get('apk') packages = unsigned_apks.get(target) if packages: for tgts, products in packages.items(): for prod in products: yield os.path.join(tgts, prod) packages = list(get_products_path(target)) for unsigned_apk in packages: keystores = KeystoreResolver.resolve(self.config_file) for key in keystores: outdir = self.sign_apk_out(target, keystores[key].build_type) safe_mkdir(outdir) args = self._render_args(target, keystores[key], unsigned_apk, outdir) with self.context.new_workunit(name='sign_apk', labels=[WorkUnitLabel.MULTITOOL]) as workunit: returncode = subprocess.call(args, stdout=workunit.output('stdout'), stderr=workunit.output('stderr')) if returncode: raise TaskError('The SignApk jarsigner process exited non-zero: {0}' .format(returncode)) for target in targets: release_path = self.sign_apk_out(target, 'release') release_apk = self.signed_package_name(target, 'release') if os.path.isfile(os.path.join(release_path, release_apk)): self.context.products.get('release_apk').add(target, release_path).append(release_apk)
def test_a_missing_field(self): with self.assertRaises(KeystoreResolver.Error): with self.config_file(keystore_alias="") as config: KeystoreResolver.resolve(config)
def test_bad_config_location(self): with self.assertRaises(KeystoreResolver.Error): KeystoreResolver.resolve(os.path.join('no', 'config_file', 'here'))
def test_expanding_key_path(self): with self.config_file(keystore_location='~/dir') as config: keystores = KeystoreResolver.resolve(config) self.assertEqual(keystores['default-debug'].keystore_location, os.path.expanduser('~/dir'))
def test_set_location(self): with temporary_file() as temp_location: with self.config_file(keystore_location=temp_location.name) as config: keystores = KeystoreResolver.resolve(config) self.assertEqual(keystores['default-debug'].keystore_location, temp_location.name)
def test_bad_build_type(self): with self.config_file(build_type='bad-build-type') as config: keystores = KeystoreResolver.resolve(config) with self.assertRaises(ValueError): keystores['default-debug'].build_type
def test_resolve_mixed_case(self): with self.config_file(build_type='ReleASE') as config: keystores = KeystoreResolver.resolve(config) self.assertEquals(keystores['test-release'].build_type, 'release')
def test_resolve(self): with self.config_file() as config: keystores = KeystoreResolver.resolve(config) self.assertEquals(keystores['default-debug'].build_type, 'debug')