def check_signed_rpms_in_pkg_dir(pkg_dir, user, project, chroot, chroot_dir, opts): success = True logger = create_file_logger("run.check_signed_rpms_in_pkg_dir", "/tmp/copr_check_signed_rpms.log") try: sign_rpms_in_dir(user, project, pkg_dir, opts, log=logger) log.info("running createrepo for {}".format(pkg_dir)) base_url = "/".join([opts.results_baseurl, user, project, chroot]) createrepo( path=chroot_dir, front_url=opts.frontend_base_url, base_url=base_url, username=user, projectname=project, ) except Exception as err: success = False log.error(">>> Failed to check/sign rpm in dir pkg_dir") log.exception(err) return success
def check_signed_rpms_in_pkg_dir(pkg_dir, user, project, chroot, chroot_dir, opts): success = True class LogCb(object): def __init__(self, logger): self.logger = logger def log(self, msg): self.logger.info(">>> {}".format(msg)) def error(self, msg): self.logger.error(">>> {}".format(msg)) cb = LogCb(log) try: sign_rpms_in_dir(user, project, pkg_dir, opts, callback=cb) log.info("running createrepo for {}".format(pkg_dir)) base_url = "/".join([opts.results_baseurl, user, project, chroot]) createrepo( path=chroot_dir, front_url=opts.frontend_base_url, base_url=base_url, username=user, projectname=project, ) except Exception as err: success = False log.error(">>> Failed to check/sign rpm in dir pkg_dir") log.exception(err) return success
def test_sign_rpms_id_dir_nothing(self, mc_gp, mc_cuk, mc_so, tmp_dir): # empty target dir doesn't produce error sign_rpms_in_dir(self.username, self.projectname, self.tmp_dir_path, self.opts, log=MagicMock()) assert not mc_gp.called assert not mc_cuk.called assert not mc_so.called
def test_sign_rpms_id_dir_nothing(self, mc_gp, mc_cuk, mc_so, tmp_dir): # empty target dir doesn't produce error sign_rpms_in_dir(self.username, self.projectname, self.tmp_dir_path, self.opts) assert not mc_gp.called assert not mc_cuk.called assert not mc_so.called
def test_sign_rpms_id_dir_no_pub_key( self, mc_gp, mc_cuk, mc_so, tmp_dir, tmp_files): mc_gp.side_effect = CoprSignNoKeyError("foobar") sign_rpms_in_dir(self.username, self.projectname, self.tmp_dir_path, self.opts, log=MagicMock()) assert mc_gp.called assert mc_cuk.called assert mc_so.called
def test_sign_rpms_id_dir_error_on_pubkey( self, mc_gp, mc_cuk, mc_so, tmp_dir, tmp_files): mc_gp.side_effect = CoprSignError("foobar") with pytest.raises(CoprSignError): sign_rpms_in_dir(self.username, self.projectname, self.tmp_dir_path, self.opts, log=MagicMock()) assert mc_gp.called assert not mc_cuk.called assert not mc_so.called
def test_sign_rpms_id_dir_no_pub_key( self, mc_gp, mc_cuk, mc_so, tmp_dir, tmp_files): mc_gp.side_effect = CoprSignNoKeyError("foobar") mc_cb = MagicMock() sign_rpms_in_dir(self.username, self.projectname, self.tmp_dir_path, self.opts, callback=mc_cb) assert mc_gp.called assert mc_cuk.called assert mc_so.called
def test_sign_rpms_id_dir_error_on_pubkey( self, mc_gp, mc_cuk, mc_so, tmp_dir, tmp_files): mc_gp.side_effect = CoprSignError("foobar") mc_cb = MagicMock() with pytest.raises(CoprSignError): sign_rpms_in_dir(self.username, self.projectname, self.tmp_dir_path, self.opts, callback=mc_cb) assert mc_gp.called assert not mc_cuk.called assert not mc_so.called
def test_sign_rpms_id_dir_sign_error_one(self, mc_gp, mc_cuk, mc_so, tmp_dir, tmp_files): mc_so.side_effect = [None, CoprSignError("foobar"), None] with pytest.raises(CoprSignError): sign_rpms_in_dir(self.username, self.projectname, self.tmp_dir_path, self.opts, log=MagicMock()) assert mc_gp.called assert not mc_cuk.called assert mc_so.called
def test_sign_rpms_id_dir_sign_error_one( self, mc_gp, mc_cuk, mc_so, tmp_dir, tmp_files): mc_cb = MagicMock() mc_so.side_effect = [ None, CoprSignError("foobar"), None ] with pytest.raises(CoprSignError): sign_rpms_in_dir(self.username, self.projectname, self.tmp_dir_path, self.opts, callback=mc_cb) assert mc_gp.called assert not mc_cuk.called assert mc_so.called
def test_sign_rpms_id_dir_ok(self, mc_gp, mc_cuk, mc_so, tmp_dir, tmp_files): sign_rpms_in_dir(self.username, self.projectname, self.tmp_dir_path, self.opts, log=MagicMock()) assert mc_gp.called assert not mc_cuk.called assert mc_so.called pathes = [call[0][0] for call in mc_so.call_args_list] count = 0 for name in self.file_names: if name.endswith(".rpm"): count += 1 assert os.path.join(self.tmp_dir_path, name) in pathes assert len(pathes) == count
def test_sign_rpms_id_dir_ok(self, mc_gp, mc_cuk, mc_so, tmp_dir, tmp_files): mc_cb = MagicMock() sign_rpms_in_dir(self.username, self.projectname, self.tmp_dir_path, self.opts, callback=mc_cb) assert mc_gp.called assert not mc_cuk.called assert mc_so.called pathes = [call[0][0] for call in mc_so.call_args_list] count = 0 for name in self.file_names: if name.endswith(".rpm"): count += 1 assert os.path.join(self.tmp_dir_path, name) in pathes assert len(pathes) == count
def fix_copr(opts, copr_full_name): log.info('Going to fix {}:'.format(copr_full_name)) owner, coprname = tuple(copr_full_name.split('/')) copr_path = os.path.abspath(os.path.join(opts.destdir, owner, coprname)) if not os.path.isdir(copr_path): log.info('Ignoring {}. Directory does not exist.'.format(copr_path)) return log.info( '> Generate key-pair on copr-keygen (if not generated) for email {}.'. format(create_gpg_email(owner, coprname))) create_user_keys(owner, coprname, opts) log.info('> Regenerate pubkey.gpg in copr {}.'.format(copr_path)) get_pubkey(owner, coprname, os.path.join(copr_path, 'pubkey.gpg')) log.info('> Re-sign rpms and call createrepo in copr\'s chroots:') for dir_name in os.listdir(copr_path): dir_path = os.path.join(copr_path, dir_name) if not os.path.isdir(dir_path): log.info('> > Ignoring {}'.format(dir_path)) continue for builddir_name in os.listdir(dir_path): builddir_path = os.path.join(dir_path, builddir_name) if not os.path.isdir(builddir_path): continue log.info( '> > Processing rpms in builddir {}:'.format(builddir_path)) try: unsign_rpms_in_dir( builddir_path, opts, log ) # first we need to unsign by using rpm-sign before we sign with obs-sign sign_rpms_in_dir(owner, coprname, builddir_path, opts, log) except Exception as e: log.exception(str(e)) continue log.info("> > Running createrepo_unsafe for {}".format(dir_path)) createrepo_unsafe(dir_path) log.info("> > Running add_appdata for {}".format(dir_path)) add_appdata(dir_path, owner, coprname)
def fix_copr(opts, copr_full_name): log.info('Going to fix {}:'.format(copr_full_name)) owner, coprname = tuple(copr_full_name.split('/')) copr_path = os.path.abspath(os.path.join(opts.destdir, owner, coprname)) if not os.path.isdir(copr_path): log.info('Ignoring {}. Directory does not exist.'.format(copr_path)) return log.info('> Generate key-pair on copr-keygen (if not generated) for email {}.'.format(create_gpg_email(owner, coprname))) create_user_keys(owner, coprname, opts) log.info('> Regenerate pubkey.gpg in copr {}.'.format(copr_path)) get_pubkey(owner, coprname, os.path.join(copr_path, 'pubkey.gpg')) log.info('> Re-sign rpms and call createrepo in copr\'s chroots:') for dir_name in os.listdir(copr_path): dir_path = os.path.join(copr_path, dir_name) if not os.path.isdir(dir_path): log.info('> > Ignoring {}'.format(dir_path)) continue for builddir_name in os.listdir(dir_path): builddir_path = os.path.join(dir_path, builddir_name) if not os.path.isdir(builddir_path): continue log.info('> > Processing rpms in builddir {}:'.format(builddir_path)) try: unsign_rpms_in_dir(builddir_path, opts, log) # first we need to unsign by using rpm-sign before we sign with obs-sign sign_rpms_in_dir(owner, coprname, builddir_path, opts, log) except Exception as e: log.exception(str(e)) continue log.info("> > Running createrepo_unsafe for {}".format(dir_path)) createrepo_unsafe(dir_path) log.info("> > Running add_appdata for {}".format(dir_path)) add_appdata(dir_path, owner, coprname)