cue: add Travis fold control and AppVeyor printed folds

fixes #42
This commit is contained in:
Ralph Lange
2020-06-06 14:39:52 +02:00
parent 03d1a5456a
commit 28ef822dd5

66
cue.py
View File

@@ -94,6 +94,27 @@ ANSI_CYAN = "\033[36;1m"
ANSI_RESET = "\033[0m"
ANSI_CLEAR = "\033[0K"
# Travis log fold control
# from https://github.com/travis-ci/travis-rubies/blob/build/build.sh
def fold_start(tag, title):
if ci_service == 'travis':
print('travis_fold:start:{0}{1}{2}{3}'
.format(tag, ANSI_YELLOW, title, ANSI_RESET))
elif ci['service'] == 'appveyor':
print('{0}===== \\/ \\/ \\/ ===== START: {1} ====={2}'
.format(ANSI_YELLOW, title, ANSI_RESET))
sys.stdout.flush()
def fold_end(tag, title):
if ci_service == 'travis':
print('\ntravis_fold:end:{0}\r'
.format(tag), end='')
elif ci_service == 'appveyor':
print('{0}----- /\\ /\\ /\\ ----- END: {1} -----{2}'
.format(ANSI_YELLOW, title, ANSI_RESET))
sys.stdout.flush()
if 'HomeDrive' in os.environ:
cachedir = os.path.join(os.getenv('HomeDrive'), os.getenv('HomePath'), '.cache')
toolsdir = os.path.join(os.getenv('HomeDrive'), os.getenv('HomePath'), '.tools')
@@ -135,7 +156,6 @@ def modlist():
setup[var] = os.environ[var]
logger.debug('ENV assignment: %s = %s', var, setup[var])
ret = ['BASE'] + setup['ADD_MODULES'].upper().split() + setup['MODULES'].upper().split()
logger.debug('Effective module list: %s', ret)
return ret
isbase314 = False
@@ -539,23 +559,27 @@ def setup_for_build(args):
def prepare(args):
host_info()
print('{0}Loading setup files{1}'.format(ANSI_YELLOW, ANSI_RESET))
fold_start('load.setup', 'Loading setup files')
if 'SET' in os.environ:
source_set(os.environ['SET'])
source_set('defaults')
[complete_setup(mod) for mod in modlist()]
fold_end('load.setup', 'Loading setup files')
logger.debug('Loaded setup')
kvs = list(setup.items())
kvs.sort()
[logger.debug(' %s = "%s"', *kv) for kv in kvs]
logger.debug('Effective module list: %s', ret)
# we're working with tags (detached heads) a lot: suppress advice
call_git(['config', '--global', 'advice.detachedHead', 'false'])
print('{0}Checking/cloning dependencies{1}'.format(ANSI_YELLOW, ANSI_RESET))
sys.stdout.flush()
fold_start('check.out.dependencies', 'Checking/cloning dependencies')
[add_dependency(mod) for mod in modlist()]
@@ -566,7 +590,9 @@ def prepare(args):
targetdir = '.'
shutil.copy(os.path.join(cachedir, 'RELEASE.local'), targetdir)
print('{0}Configuring EPICS build system{1}'.format(ANSI_YELLOW, ANSI_RESET))
fold_end('check.out.dependencies', 'Checking/cloning dependencies')
fold_start('set.up.epics_build', 'Configuring EPICS build system')
with open(os.path.join(places['EPICS_BASE'], 'configure', 'CONFIG_SITE'), 'a') as config_site:
if ci_static:
@@ -606,17 +632,19 @@ else
endif
endif'''
)
print('EPICS Base build system set up for {0} build with {1} linking'
.format(optitype, linktype))
fold_end('set.up.epics_build', 'Configuring EPICS build system')
if not os.path.isdir(toolsdir):
os.makedirs(toolsdir)
if ci_os == 'windows':
if ci_choco:
print('Installing chocolatey packages: {0}'.format(ci_choco))
sys.stdout.flush()
sp.check_call(['choco', 'install'] + ci_choco)
if ci_os == 'windows' and ci_choco:
fold_start('install.choco', 'Installing CHOCO packages')
sp.check_call(['choco', 'install'] + ci_choco)
fold_end('install.choco', 'Installing CHOCO packages')
setup_for_build(args)
@@ -638,10 +666,12 @@ endif'''
sp.check_call(['cl'])
if not building_base:
fold_start('build.dependencies', 'Build missing/outdated dependencies')
for mod in modlist():
place = places[setup[mod+"_VARNAME"]]
print('{0}Building dependency {1} in {2}{3}'.format(ANSI_YELLOW, mod, place, ANSI_RESET))
call_make(cwd=place, silent=silent_dep_builds)
fold_end('build.dependencies', 'Build missing/outdated dependencies')
print('{0}Dependency module information{1}'.format(ANSI_CYAN, ANSI_RESET))
print('Module Tag Binaries Commit')
@@ -656,25 +686,28 @@ endif'''
def build(args):
setup_for_build(args)
print('{0}Building the main module{1}'.format(ANSI_YELLOW, ANSI_RESET))
fold_start('build.module', 'Build the main module')
call_make(args.makeargs)
fold_end('build.module', 'Build the main module')
def test(args):
setup_for_build(args)
fold_start('test.module', 'Run the main module tests')
print('{0}Running the main module tests{1}'.format(ANSI_YELLOW, ANSI_RESET))
if has_test_results:
call_make(['tapfiles'])
call_make(['test-results'], parallel=0, silent=True)
else:
call_make(['runtests'])
fold_end('test.module', 'Run the main module tests')
def doExec(args):
'exec user command with vcvars'
setup_for_build(args)
os.environ['MAKE'] = 'make'
print('Execute command {}'.format(args.cmd))
sys.stdout.flush()
fold_start('exec.command', 'Execute command {}'.format(args.cmd))
sp.check_call(' '.join(args.cmd), shell=True)
fold_end('exec.command', 'Execute command {}'.format(args.cmd))
def with_vcvars(cmd):
'''re-exec main script with a (hopefully different) command
@@ -702,6 +735,10 @@ call "{vcvars}" {arch}
"{python}" "{self}" {cmd}
'''.format(**info)
print('{0}Calling vcvars-trampoline.bat to set environment for {1} on {2}{3}'
.format(ANSI_YELLOW, CC, ci_platform, ANSI_RESET))
sys.stdout.flush()
logger.debug('----- Creating vcvars-trampoline.bat -----')
for line in script.split('\n'):
logger.debug(line)
@@ -710,9 +747,6 @@ call "{vcvars}" {arch}
with open('vcvars-trampoline.bat', 'w') as F:
F.write(script)
print('{0}Calling vcvars-trampoline.bat to set environment for {1} on {2}{3}'
.format(ANSI_YELLOW, CC, ci_platform, ANSI_RESET))
sys.stdout.flush()
returncode = sp.call('vcvars-trampoline.bat', shell=True)
if returncode != 0:
sys.exit(returncode)