コード例 #1
0
ファイル: package.py プロジェクト: lots0logs/auta
    def __init__(self, name):
        super(Package, self).__init__(self, name=name)

        self.maybe_update_pkgbuild_repo()

        try:
            if (not self.pkgname or self.pkgname == '') and os.path.exists(os.path.join(REPO_DIR, name)):

                key_lists = ['redis_string', 'redis_string_bool', 'redis_string_int', 'redis_list', 'redis_zset']
                for key_list_name in key_lists:
                    key_list = self.all_keys[key_list_name]
                    for key in key_list:
                        if key_list_name.endswith('string') and key != 'name':
                            setattr(self, key, '')
                        elif key_list_name.endswith('bool'):
                            setattr(self, key, False)
                        elif key_list_name.endswith('int'):
                            setattr(self, key, 0)
                        elif key_list_name.endswith('list'):
                            setattr(self, key, RedisList.as_child(self, key, str))
                        elif key_list_name.endswith('zset'):
                            setattr(self, key, RedisZSet.as_child(self, key, str))

            self.pkgname = name
            next_id = db.incr('antbs:misc:pkgid:next')
            self.pkg_id = next_id
            all_pkgs = status.all_packages()
            all_pkgs.add(self.name)
        except Exception:
            logger.error('unable to init package object for %s', name)
コード例 #2
0
ファイル: package.py プロジェクト: TheMushrr00m/auta
    def __init__(self, name):
        super(Package, self).__init__(self, name=name)

        self.maybe_update_pkgbuild_repo()

        if not self or not self.pkg_id and (os.path.exists(os.path.join(REPO_DIR, name)) or self.is_deepin_pkg()):
            # Package is not in the database, so it must be new. Let's initialize it.
            for key in self.all_keys:
                if key in self.key_lists['redis_string'] and key != 'name':
                    setattr(self, key, '')
                elif key in self.key_lists['redis_string_bool']:
                    setattr(self, key, False)
                elif key in self.key_lists['redis_string_int']:
                    setattr(self, key, 0)
                elif key in self.key_lists['redis_list']:
                    setattr(self, key, RedisList.as_child(self, key, str))
                elif key in self.key_lists['redis_zset']:
                    setattr(self, key, RedisZSet.as_child(self, key, str))
            self.pkgname = name
            next_id = db.incr('antbs:misc:pkgid:next')
            self.pkg_id = next_id
            all_pkgs = status.all_packages
            all_pkgs.add(self.name)

            if '-x86_64' in self.name or '-i686' in self.name:
                self.is_iso = True
            else:
                self.is_iso = False
コード例 #3
0
ファイル: build_obj.py プロジェクト: TheMushrr00m/auta
    def __init__(self, pkg_obj=None, bnum=None):
        if not pkg_obj and not bnum:
            raise AttributeError

        super(BuildObject, self).__init__()

        self.key_lists = dict(
            redis_string=['pkgname', 'pkgver', 'epoch', 'pkgrel', 'path', 'build_path', 'start_str', 'end_str',
                          'version_str', 'container', 'review_status', 'review_dev', 'review_date', 'log_str'],
            redis_string_bool=['failed', 'completed'],
            redis_string_int=['pkg_id', 'bnum'],
            redis_list=['log'],
            redis_zset=[])

        self.all_keys = [item for sublist in self.key_lists.values() for item in sublist]

        if not bnum:
            next_bnum = db.incr('antbs:misc:bnum:next')
            self.namespace = 'antbs:build:%s:' % next_bnum
            self.prefix = self.namespace[:-1]
            for key in self.all_keys:
                if key in self.key_lists['redis_string']:
                    value = getattr(pkg_obj, key, '')
                    setattr(self, key, value)
                elif key in self.key_lists['redis_string_bool']:
                    value = getattr(pkg_obj, key, False)
                    setattr(self, key, value)
                elif key in self.key_lists['redis_string_int']:
                    value = getattr(pkg_obj, key, 0)
                    setattr(self, key, value)
                elif key in self.key_lists['redis_list']:
                    setattr(self, key, RedisList.as_child(self, key, str))
                elif key in self.key_lists['redis_zset']:
                    setattr(self, key, RedisZSet.as_child(self, key, str))
            self.bnum = next_bnum
            self.failed = False
            self.completed = False
        else:
            self.namespace = 'antbs:build:%s:' % bnum
            self.prefix = self.namespace[:-1]
コード例 #4
0
ファイル: build_obj.py プロジェクト: lots0logs/auta
    def __init__(self, pkg_obj=None, bnum=None):
        if not pkg_obj and not bnum:
            raise AttributeError

        super(BuildObject, self).__init__()

        self.all_keys = dict(
            redis_string=['pkgname', 'pkgver', 'epoch', 'pkgrel', 'path', 'build_path', 'start_str', 'end_str',
                          'version_str', 'container', 'review_status', 'review_dev', 'review_date', 'log_str'],
            redis_string_bool=['failed', 'completed'],
            redis_string_int=['pkgid', 'bnum'],
            redis_list=['log'],
            redis_zset=[])

        if not bnum:
            key_lists = ['redis_string', 'redis_string_bool', 'redis_string_int', 'redis_list', 'redis_zset']
            for key_list_name in key_lists:
                key_list = self.all_keys[key_list_name]
                for key in key_list:
                    if key_list_name.endswith('string'):
                        value = getattr(pkg_obj, key, '')
                        setattr(self, key, value)
                    elif key_list_name.endswith('bool'):
                        value = getattr(pkg_obj, key, False)
                        setattr(self, key, value)
                    elif key_list_name.endswith('int'):
                        value = getattr(pkg_obj, key, 0)
                        setattr(self, key, value)
                    elif key_list_name.endswith('list'):
                        setattr(self, key, RedisList.as_child(self, key, str))
                    elif key_list_name.endswith('zset'):
                        setattr(self, key, RedisZSet.as_child(self, key, str))
            next_bnum = db.incr('antbs:misc:bnum:next')
            self.namespace = 'antbs:build:%s:' % next_bnum
            self.bnum = next_bnum
        else:
            self.namespace = 'antbs:build:%s:' % bnum
コード例 #5
0
ファイル: build_pkg.py プロジェクト: lots0logs/auta
def build_iso():
    iso_arch = ['x86_64', 'i686']
    in_dir_last = len([name for name in os.listdir('/srv/antergos.info/repo/iso/testing')])
    if in_dir_last is None:
        in_dir_last = "0"
    db.set('pkg_count_iso', in_dir_last)
    is_minimal = db.get('isoMinimal')
    if is_minimal == 'True':
        iso_name = 'antergos-iso-minimal-'
    else:
        iso_name = 'antergos-iso-'
    for arch in iso_arch:
        if db.exists('iso:one:arch') and arch == 'x86_64':
            continue
        pkgobj = package.get_pkg_object(iso_name + arch)
        failed = False
        db.incr('build_number')
        dt = datetime.datetime.now().strftime("%m/%d/%Y %I:%M%p")
        build_id = db.get('build_number')
        pkgobj.save_to_db('builds', build_id, 'list')
        this_log = 'build_log:%s' % build_id
        db.set('%s:start' % this_log, dt)
        db.set('building_num', build_id)
        db.hset('now_building', 'build_id', build_id)
        db.hset('now_building', 'key', this_log)
        db.hset('now_building', 'pkg', pkgobj.name)
        db.set(this_log, True)
        db.set('building_start', dt)
        logger.info('Building %s' % pkgobj.name)
        db.set('building', 'Building: %s' % pkgobj.name)
        db.lrem('queue', 0, pkgobj.name)
        db.set('%s:pkg' % this_log, pkgobj.name)
        db.set('%s:version' % this_log, pkgobj.version)

        flag = '/srv/antergos.info/repo/iso/testing/.ISO32'
        minimal = '/srv/antergos.info/repo/iso/testing/.MINIMAL'
        if arch is 'i686':
            if not os.path.exists(flag):
                open(flag, 'a').close()
        else:
            if os.path.exists(flag):
                os.remove(flag)
        if is_minimal == "True":
            out_dir = '/out'
            if not os.path.exists(minimal):
                open(minimal, 'a').close()
        else:
            out_dir = '/out'
            if os.path.exists(minimal):
                os.remove(minimal)
        # Get and compile translations for updater script
        # TODO: Move this into its own method.
        trans_dir = "/opt/antergos-iso-translations/"
        trans_files_dir = os.path.join(trans_dir, "translations/antergos.cnchi_updaterpot")
        dest_dir = '/srv/antergos.info/repo/iso/testing/trans'
        if not os.path.exists(dest_dir):
            os.mkdir(dest_dir)
        try:
            subprocess.check_call(['tx', 'pull', '-a', '-r', 'antergos.cnchi_updaterpot', '--minimum-perc=50'],
                                  cwd=trans_dir)
            for r, d, f in os.walk(trans_files_dir):
                for tfile in f:
                    logger.info('tfile is %s' % tfile)
                    logger.info('tfile cut is %s' % tfile[:-2])
                    mofile = tfile[:-2] + 'mo'
                    logger.info('mofile is %s' % mofile)
                    subprocess.check_call(['msgfmt', '-v', tfile, '-o', mofile], cwd=trans_files_dir)
                    os.rename(os.path.join(trans_files_dir, mofile), os.path.join(dest_dir, mofile))
        except subprocess.CalledProcessError as err:
            logger.error(err.output)
        except Exception as err:
            logger.error(err)

        nm = iso_name + arch
        # Initiate communication with docker daemon
        run_docker_clean(nm)
        hconfig = create_host_config(privileged=True, cap_add=['ALL'],
                                     binds={
                                         '/opt/archlinux-mkarchiso':
                                             {
                                                 'bind': '/start',
                                                 'ro': False
                                             },
                                         '/run/dbus':
                                             {
                                                 'bind': '/var/run/dbus',
                                                 'ro': False
                                             },
                                         '/srv/antergos.info/repo/iso/testing':
                                             {
                                                 'bind': out_dir,
                                                 'ro': False
                                             }},
                                     restart_policy={
                                         "MaximumRetryCount": 2,
                                         "Name": "on-failure"})
        try:
            iso_container = doc.create_container("antergos/mkarchiso", command='/start/run.sh', tty=True,
                                                 name=nm, host_config=hconfig, cpuset='0-3')
            db.set('container', iso_container.get('Id'))
        except Exception as err:
            logger.error("Cant connect to Docker daemon. Error msg: %s", err)
            failed = True
            break

        try:
            doc.start(iso_container, privileged=True, cap_add=['ALL'], binds={
                '/opt/archlinux-mkarchiso':
                    {
                        'bind': '/start',
                        'ro': False
                    },
                '/run/dbus':
                    {
                        'bind': '/var/run/dbus',
                        'ro': False
                    },
                '/srv/antergos.info/repo/iso/testing':
                    {
                        'bind': out_dir,
                        'ro': False
                    },
            })

            cont = db.get('container')
            stream_process = Process(target=publish_build_ouput, args=(cont, this_log))
            stream_process.start()
            result = doc.wait(cont)
            result2 = None
            if result is not 0:
                doc.restart(cont)
                stream_process2 = Process(target=publish_build_ouput, args=(cont, this_log))
                stream_process2.start()
                result2 = doc.wait(cont)
                if result2 is not 0:
                    # failed = True
                    # db.set('build_failed', "True")
                    logger.error('[CONTAINER EXIT CODE] Container %s exited. Return code was %s' % (nm, result))
            if result is 0 or (result2 and result2 is 0):
                logger.info('[CONTAINER EXIT CODE] Container %s exited. Return code was %s' % (nm, result))
                db.set('build_failed', "False")

        except Exception as err:
            logger.error("Cant start container. Error msg: %s", err)
            break

        db.publish('build-output', 'ENDOFLOG')
        db.set('%s:end' % this_log, datetime.datetime.now().strftime("%m/%d/%Y %I:%M%p"))

        in_dir = len([name for name in os.listdir('/srv/antergos.info/repo/iso/testing')])
        last_count = int(db.get('pkg_count_iso'))
        if in_dir > last_count:
            db.incr('pkg_count_iso', (in_dir - last_count))
            db.rpush('completed', build_id)
            db.set('%s:result' % this_log, 'completed')
            # db.set('%s:review_stat' % this_log, '1')
        else:
            logger.error('%s not found after container exit.' % iso_name + arch)
            failed = True
            db.set('%s:result' % this_log, 'failed')
            db.rpush('failed', build_id)
        remove('/opt/archlinux-mkarchiso/antergos-iso')
        doc.remove_container(cont, v=True)