mirror of
https://github.com/archlinux-jerry/buildbot
synced 2024-11-24 22:10:41 +08:00
buildbot: add extra
This commit is contained in:
parent
a61cbc8f7a
commit
d66d4e1f7b
4 changed files with 91 additions and 8 deletions
37
buildbot.py
37
buildbot.py
|
@ -19,7 +19,8 @@ from config import ARCHS, BUILD_ARCHS, BUILD_ARCH_MAPPING, \
|
||||||
MAKEPKG_MAKE_CMD, MAKEPKG_MAKE_CMD_CLEAN, \
|
MAKEPKG_MAKE_CMD, MAKEPKG_MAKE_CMD_CLEAN, \
|
||||||
GPG_SIGN_CMD, GPG_VERIFY_CMD, UPDATE_INTERVAL, \
|
GPG_SIGN_CMD, GPG_VERIFY_CMD, UPDATE_INTERVAL, \
|
||||||
MAKEPKG_MAKE_CMD_MARCH, UPLOAD_CMD, \
|
MAKEPKG_MAKE_CMD_MARCH, UPLOAD_CMD, \
|
||||||
GIT_PULL, GIT_RESET_SUBDIR, CONSOLE_LOGFILE
|
GIT_PULL, GIT_RESET_SUBDIR, CONSOLE_LOGFILE, \
|
||||||
|
MAIN_LOGFILE, PKG_UPDATE_LOGFILE, MAKEPKG_LOGFILE
|
||||||
|
|
||||||
from utils import print_exc_plus, background, \
|
from utils import print_exc_plus, background, \
|
||||||
bash, get_pkg_details_from_name, vercmp, \
|
bash, get_pkg_details_from_name, vercmp, \
|
||||||
|
@ -32,12 +33,16 @@ import json
|
||||||
|
|
||||||
from yamlparse import load_all as load_all_yaml
|
from yamlparse import load_all as load_all_yaml
|
||||||
|
|
||||||
|
from extra import gen_pkglist as extra_gen_pkglist, \
|
||||||
|
readpkglog as extra_readpkglog, \
|
||||||
|
readmainlog as extra_readmainlog
|
||||||
|
|
||||||
abspath=os.path.abspath(__file__)
|
abspath=os.path.abspath(__file__)
|
||||||
abspath=os.path.dirname(abspath)
|
abspath=os.path.dirname(abspath)
|
||||||
os.chdir(abspath)
|
os.chdir(abspath)
|
||||||
|
|
||||||
logger = logging.getLogger('buildbot')
|
logger = logging.getLogger('buildbot')
|
||||||
configure_logger(logger, logfile='buildbot.log', rotate_size=1024*1024*10, enable_notify=True, consolelog=CONSOLE_LOGFILE)
|
configure_logger(logger, logfile=MAIN_LOGFILE, rotate_size=1024*1024*10, enable_notify=True, consolelog=CONSOLE_LOGFILE)
|
||||||
|
|
||||||
# refuse to run in systemd-nspawn
|
# refuse to run in systemd-nspawn
|
||||||
if 'systemd-nspawn' in bash('systemd-detect-virt || true'):
|
if 'systemd-nspawn' in bash('systemd-detect-virt || true'):
|
||||||
|
@ -214,7 +219,7 @@ class jobsManager:
|
||||||
# actually makepkg
|
# actually makepkg
|
||||||
try:
|
try:
|
||||||
ret = mon_nspawn_shell(arch=job.arch, cwd=cwd, cmdline=mkcmd,
|
ret = mon_nspawn_shell(arch=job.arch, cwd=cwd, cmdline=mkcmd,
|
||||||
logfile = cwd / 'buildbot.log.makepkg',
|
logfile = cwd / MAKEPKG_LOGFILE,
|
||||||
short_return = True,
|
short_return = True,
|
||||||
seconds=job.pkgconfig.timeout*60)
|
seconds=job.pkgconfig.timeout*60)
|
||||||
except Exception:
|
except Exception:
|
||||||
|
@ -399,6 +404,12 @@ class updateManager:
|
||||||
self.__pkgerrs = dict()
|
self.__pkgerrs = dict()
|
||||||
self.__pkgvers = dict()
|
self.__pkgvers = dict()
|
||||||
self.__load()
|
self.__load()
|
||||||
|
@property
|
||||||
|
def pkgvers(self):
|
||||||
|
return self.__pkgvers
|
||||||
|
@property
|
||||||
|
def pkgerrs(self):
|
||||||
|
return self.__pkgerrs
|
||||||
def __load(self):
|
def __load(self):
|
||||||
if Path(self.__filename).exists():
|
if Path(self.__filename).exists():
|
||||||
with open(self.__filename,"r") as f:
|
with open(self.__filename,"r") as f:
|
||||||
|
@ -465,7 +476,7 @@ class updateManager:
|
||||||
if type(scr) is str:
|
if type(scr) is str:
|
||||||
mon_nspawn_shell(arch, scr, cwd=pkgdir, seconds=60*60)
|
mon_nspawn_shell(arch, scr, cwd=pkgdir, seconds=60*60)
|
||||||
mon_nspawn_shell(arch, MAKEPKG_UPD_CMD, cwd=pkgdir, seconds=60*60,
|
mon_nspawn_shell(arch, MAKEPKG_UPD_CMD, cwd=pkgdir, seconds=60*60,
|
||||||
logfile = pkgdir / 'buildbot.log.update',
|
logfile = pkgdir / PKG_UPDATE_LOGFILE,
|
||||||
short_return = True)
|
short_return = True)
|
||||||
if pkg.type in ('git', 'manual'):
|
if pkg.type in ('git', 'manual'):
|
||||||
ver = self.__get_new_ver(pkg.dirname, arch)
|
ver = self.__get_new_ver(pkg.dirname, arch)
|
||||||
|
@ -532,6 +543,24 @@ def force_upload(pkgdirname, overwrite=False):
|
||||||
def getup():
|
def getup():
|
||||||
return jobsmgr.getup()
|
return jobsmgr.getup()
|
||||||
|
|
||||||
|
def extras(action, pkgname=None):
|
||||||
|
if action.startswith("pkg"):
|
||||||
|
p = extra_gen_pkglist(jobsmgr.pkgconfigs, updmgr.pkgvers, updmgr.pkgerrs)
|
||||||
|
if action == "pkgdetail":
|
||||||
|
return p[1].get(pkgname, None)
|
||||||
|
elif action == "pkgdetails":
|
||||||
|
return p[1]
|
||||||
|
elif action == "pkglist":
|
||||||
|
return p[0]
|
||||||
|
elif action == "mainlog":
|
||||||
|
return extra_readmainlog(debug=False)
|
||||||
|
elif action == "debuglog":
|
||||||
|
return extra_readmainlog(debug=True)
|
||||||
|
elif action == "readpkglog":
|
||||||
|
pkgname = str(pkgname)
|
||||||
|
return extra_readpkglog(pkgname)
|
||||||
|
return False
|
||||||
|
|
||||||
def run(funcname, args=list(), kwargs=dict()):
|
def run(funcname, args=list(), kwargs=dict()):
|
||||||
if funcname in ('info', 'rebuild_package', 'clean', 'clean_all',
|
if funcname in ('info', 'rebuild_package', 'clean', 'clean_all',
|
||||||
'force_upload', 'getup'):
|
'force_upload', 'getup'):
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
# repod.py: Automatic management tool for an arch repo.
|
# client.py: Automatic management tool for an arch repo.
|
||||||
# This file is part of Buildbot by JerryXiao
|
# This file is part of Buildbot by JerryXiao
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
|
@ -10,7 +10,7 @@ from time import sleep
|
||||||
|
|
||||||
from config import REPOD_BIND_ADDRESS, REPOD_BIND_PASSWD, \
|
from config import REPOD_BIND_ADDRESS, REPOD_BIND_PASSWD, \
|
||||||
MASTER_BIND_ADDRESS, MASTER_BIND_PASSWD, \
|
MASTER_BIND_ADDRESS, MASTER_BIND_PASSWD, \
|
||||||
CONSOLE_LOGFILE
|
CONSOLE_LOGFILE, MAIN_LOGFILE
|
||||||
|
|
||||||
from utils import print_exc_plus
|
from utils import print_exc_plus
|
||||||
|
|
||||||
|
@ -47,7 +47,7 @@ if __name__ == '__main__':
|
||||||
configure_logger(logger)
|
configure_logger(logger)
|
||||||
def print_log(debug=False):
|
def print_log(debug=False):
|
||||||
if debug:
|
if debug:
|
||||||
os.system(f'tail -n 43 -f \"buildbot.log\"')
|
os.system(f'tail -n 43 -f \"{MAIN_LOGFILE}\"')
|
||||||
else:
|
else:
|
||||||
os.system(f'tail -n 43 -f \"{CONSOLE_LOGFILE}\"')
|
os.system(f'tail -n 43 -f \"{CONSOLE_LOGFILE}\"')
|
||||||
try:
|
try:
|
||||||
|
|
|
@ -63,4 +63,9 @@ UPLOAD_CMD = 'rsync -avPh \"{src}\" repoupload:/srv/repo/buildbot/repo/updates/'
|
||||||
GIT_PULL = 'git pull'
|
GIT_PULL = 'git pull'
|
||||||
GIT_RESET_SUBDIR = 'git checkout HEAD -- .'
|
GIT_RESET_SUBDIR = 'git checkout HEAD -- .'
|
||||||
|
|
||||||
|
|
||||||
|
# logfiles
|
||||||
|
MAIN_LOGFILE = 'buildbot.log'
|
||||||
CONSOLE_LOGFILE = 'buildbot.log.console'
|
CONSOLE_LOGFILE = 'buildbot.log.console'
|
||||||
|
PKG_UPDATE_LOGFILE = 'buildbot.log.update'
|
||||||
|
MAKEPKG_LOGFILE = 'buildbot.log.makepkg'
|
||||||
|
|
51
extra.py
51
extra.py
|
@ -1,13 +1,62 @@
|
||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
# extra.py: Automatic management tool for an arch repo.
|
||||||
|
# This file is part of Buildbot by JerryXiao
|
||||||
|
|
||||||
import os
|
import os
|
||||||
import logging
|
import logging
|
||||||
from pathlib import Path
|
|
||||||
|
|
||||||
|
from pathlib import Path
|
||||||
from utils import print_exc_plus
|
from utils import print_exc_plus
|
||||||
|
|
||||||
|
from config import PKGBUILD_DIR, MAIN_LOGFILE, CONSOLE_LOGFILE, \
|
||||||
|
PKG_UPDATE_LOGFILE, MAKEPKG_LOGFILE
|
||||||
|
|
||||||
logger = logging.getLogger(f'buildbot.{__name__}')
|
logger = logging.getLogger(f'buildbot.{__name__}')
|
||||||
|
|
||||||
abspath=os.path.abspath(__file__)
|
abspath=os.path.abspath(__file__)
|
||||||
abspath=os.path.dirname(abspath)
|
abspath=os.path.dirname(abspath)
|
||||||
os.chdir(abspath)
|
os.chdir(abspath)
|
||||||
|
|
||||||
|
REPO_ROOT = Path(PKGBUILD_DIR)
|
||||||
|
|
||||||
|
# generate package list
|
||||||
|
def gen_pkglist(pkgconfigs, pkgvers, pkgerrs):
|
||||||
|
# pkgall contains details
|
||||||
|
# namelist is a list of pkgnames
|
||||||
|
pkgall = dict()
|
||||||
|
for pc in pkgconfigs:
|
||||||
|
ps = ('type', 'cleanbuild', 'timeout')
|
||||||
|
hps = ('prebuild', 'postbuild', 'update', 'failure')
|
||||||
|
dps = {p:getattr(pc, p, None) for p in ps}
|
||||||
|
dhps = {p:'\n'.join(str(getattr(pc, p, None))) for p in hps}
|
||||||
|
# additional package details
|
||||||
|
ves = {'version': pkgvers.get(pc.dirname, None), 'errors': pkgerrs.get(pc.dirname, None)}
|
||||||
|
pkgall[pc.dirname] = {**dps, **dhps, **ves}
|
||||||
|
namelist = [k for k in pkgall]
|
||||||
|
return (namelist, pkgall)
|
||||||
|
|
||||||
|
def __simpleread(fpath, limit=4096-100):
|
||||||
|
with open(fpath, 'r') as f:
|
||||||
|
c = f.read()
|
||||||
|
if len(c) > limit:
|
||||||
|
c = c[-limit:]
|
||||||
|
return c
|
||||||
|
# read logs
|
||||||
|
def readpkglog(pkgdirname, update=False):
|
||||||
|
cwd = REPO_ROOT / pkgdirname
|
||||||
|
logfile = PKG_UPDATE_LOGFILE if update else MAKEPKG_LOGFILE
|
||||||
|
if cwd.exists() and (cwd / logfile).exists():
|
||||||
|
logger.debug(f'formatting {"update" if update else "build"} logs in {pkgdirname}')
|
||||||
|
return __simpleread(cwd / logfile)
|
||||||
|
else:
|
||||||
|
logger.debug(f'not found: {"update" if update else "build"} log in dir {pkgdirname}')
|
||||||
|
return f"{cwd / logfile} cannot be found"
|
||||||
|
def readmainlog(debug=False):
|
||||||
|
logfile = MAIN_LOGFILE if debug else CONSOLE_LOGFILE
|
||||||
|
if (PKGBUILD_DIR / logfile).exists():
|
||||||
|
logger.debug(f'formatting buildbot{" debug" if debug else ""} logs')
|
||||||
|
return __simpleread(PKGBUILD_DIR / logfile)
|
||||||
|
else:
|
||||||
|
logger.debug(f'not found: buildbot{" debug" if debug else ""} log')
|
||||||
|
return f"{PKGBUILD_DIR / logfile} cannot be found"
|
||||||
|
|
Loading…
Reference in a new issue