161 lines
3.4 KiB
Python
Executable File
161 lines
3.4 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
|
|
"""
|
|
TODO
|
|
- could load shortcuts from environment
|
|
"""
|
|
|
|
import os
|
|
from sys import argv, exit
|
|
from typing import Tuple, List, Generator, Iterable, Iterator, Sequence, Callable
|
|
from itertools import chain
|
|
|
|
Args = Sequence[str]
|
|
StrIter = Iterable[str]
|
|
|
|
GwCommand = 'gw'
|
|
DEBUG = False
|
|
|
|
actions = (
|
|
'clean',
|
|
'build',
|
|
'compileTestKotlin',
|
|
# todo only if there no -x prefix
|
|
'test',
|
|
'componentTest',
|
|
'shadowJar'
|
|
)
|
|
|
|
shortcuts = {
|
|
'c': ['clean'],
|
|
'b': ['build'],
|
|
't': ['test'],
|
|
'bt': ['compileTestKotlin'],
|
|
'ct': ['componentTest'],
|
|
'tct': ['test', 'componentTest'],
|
|
'cb': ['clean', 'build'],
|
|
'cbx': ['clean', 'build', '-x', 'test'],
|
|
'cbt': ['clean', 'build', 'compileTestKotlin', '-x', 'test'],
|
|
'cct': ['cleanComponentTest'],
|
|
'rt': ['cleanTest', 'test'],
|
|
'rct': ['cleanComponentTest', 'componentTest'],
|
|
'nd': ['-x', 'detekt'],
|
|
'-nd': ['-x', 'detekt'],
|
|
'xt': ['-x', 'test'],
|
|
'-nt': ['-x', 'test'],
|
|
'br': ['bootRun'],
|
|
'rb': ['bootRun'],
|
|
'jar': ['shadowJar'],
|
|
'-nc': ['--no-build-cache'],
|
|
'-rr': ['--rerun-tasks'],
|
|
'-rt': ['--rerun-tasks'],
|
|
'-wl': ['--write-locks'],
|
|
'-ef': ['-Penvironment=free'],
|
|
'-el': ['-Penvironment=licensed'],
|
|
'-lic': ['-Penvironment=licensed']
|
|
}
|
|
|
|
help_text = """\
|
|
Support functionality for gw application
|
|
|
|
Use cases
|
|
gws cbx :tests :tools
|
|
gws cb ct
|
|
gws cbt
|
|
gws cbx :microservices:afm-exec-api
|
|
|
|
Options
|
|
--show doesn't start gw app
|
|
--debug show details about processing
|
|
"""
|
|
|
|
|
|
def show_help():
|
|
print(help_text)
|
|
show_shortcuts()
|
|
print()
|
|
exit(1)
|
|
|
|
|
|
def show_shortcuts():
|
|
print('Shortcuts')
|
|
for key, value in shortcuts.items():
|
|
print(f" {key} ... {' '.join(value)}")
|
|
|
|
|
|
def log(name, obj):
|
|
if DEBUG:
|
|
print(name + str(obj))
|
|
|
|
|
|
def is_module(arg: str):
|
|
return arg.startswith(':')
|
|
|
|
|
|
def flatten(lst):
|
|
return list(chain(*lst))
|
|
|
|
|
|
def replace_shortcut(arg: str) -> List[str]:
|
|
if arg in shortcuts:
|
|
return shortcuts[arg]
|
|
else:
|
|
return [arg]
|
|
|
|
|
|
def split_on_condition(lst: Sequence, condtion):
|
|
good = []
|
|
bad = []
|
|
for item in lst:
|
|
(bad, good)[condtion(item)].append(item)
|
|
return good, bad
|
|
|
|
|
|
def pair_module_with_action(args: Args) -> List[str]:
|
|
modules, rest_args = split_on_condition(args, is_module)
|
|
log("modules", modules)
|
|
log("args", rest_args)
|
|
if modules:
|
|
_args = []
|
|
for arg in rest_args:
|
|
if arg in actions:
|
|
for module in modules:
|
|
_args.append(module + ':' + arg)
|
|
else:
|
|
_args.append(arg)
|
|
return _args
|
|
else:
|
|
return args
|
|
|
|
|
|
def prepare_args(args: Args) -> List[str]:
|
|
args = flatten(map(replace_shortcut, args))
|
|
args = pair_module_with_action(args)
|
|
return args
|
|
|
|
|
|
def prepare_command(args: Args) -> str:
|
|
return GwCommand + ' ' + ' '.join(prepare_args(args))
|
|
|
|
|
|
def try_remove(lst: Sequence, value) -> Tuple[bool, Sequence]:
|
|
filtered = list(filter(lambda x: x != value, lst))
|
|
return len(lst) != len(filtered), filtered
|
|
|
|
|
|
def main(args: List[str]):
|
|
if not args:
|
|
show_help()
|
|
global DEBUG
|
|
DEBUG, args = try_remove(args, '--debug')
|
|
just_show, args = try_remove(args, '--show')
|
|
cmd = prepare_command(args)
|
|
print(cmd)
|
|
if not just_show:
|
|
print()
|
|
os.system(cmd)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
main(argv[1:])
|