Exemple #1
0
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
Exemple #2
0
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
Exemple #3
0
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
Exemple #4
0
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
Exemple #5
0
    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
Exemple #6
0
    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
Exemple #7
0
    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
Exemple #8
0
    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
Exemple #9
0
    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
Exemple #10
0
    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
Exemple #11
0
    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
Exemple #12
0
    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
Exemple #13
0
    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
Exemple #14
0
    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
Exemple #15
0
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)
Exemple #16
0
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)