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)
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
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]
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
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)