Coverage for /home/runner/work/coxbuild/coxbuild/src/coxbuild/__main__.py: 0%

Shortcuts on this page

r m x   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

55 statements  

1import logging 

2import os 

3from pathlib import Path 

4 

5import click 

6 

7from coxbuild import __version__ 

8from coxbuild.configurations import Configuration 

9from coxbuild.configurations.builders import (DictionaryConfigurationBuilder, 

10 JsonConfigurationBuilder, 

11 YamlConfigurationBuilder) 

12 

13 

14@click.command() 

15@click.argument("tasks", default=None, nargs=-1) 

16@click.option('-D', '--directory', type=click.Path(exists=True, file_okay=False, resolve_path=True, path_type=Path), default=".", help="Path to working directory.") 

17@click.option('-f', '--file', default="", help="Schema file name (used first).") 

18@click.option('-u', '--url', default="", help="Schema URL (used second).") 

19@click.option('-e', '--ext', default="", help="Schema Extension in gallery (used third).") 

20@click.option('-i', '--uri', default="file://buildcox.py", help="Schema URI (used last).") 

21@click.option('-c', '--config', multiple=True, help="Configuration entry 'key=value'.", default=[]) 

22@click.option('-j', '--json', multiple=True, help="Configuration in JSON.", default=[]) 

23@click.option('-y', '--yaml', multiple=True, help="Configuration in YAML.", default=[]) 

24@click.version_option(__version__, package_name="coxbuild", prog_name="coxbuild", message="%(prog)s v%(version)s, written by StardustDL.") 

25@click.option('-v', '--verbose', count=True, default=0, type=click.IntRange(0, 5)) 

26def main(ctx=None, tasks: list[str] | None = None, directory: Path = ".", file: str = "", url: str = "", ext: str = "", uri: str = "file://buildcox.py", config: list[str] | None = None, yaml: list[str] | None = None, json: list[str] | None = None, verbose: int = 0) -> None: 

27 """ 

28 Coxbuild is a tiny python-script-based build automation tool, an alternative to make, psake and so on. 

29 

30 Source Project: https://github.com/StardustDL/coxbuild 

31 """ 

32 click.echo(f"Welcome to Coxbuild v{__version__}!") 

33 

34 loggingLevel = { 

35 0: logging.CRITICAL, 

36 1: logging.ERROR, 

37 2: logging.WARNING, 

38 3: logging.INFO, 

39 4: logging.DEBUG, 

40 5: logging.NOTSET 

41 }[verbose] 

42 logging.basicConfig(level=loggingLevel) 

43 logger = logging.getLogger("Cli-Main") 

44 logger.debug(f"Logging level: {loggingLevel}") 

45 

46 os.chdir(str(Path(str(directory)).resolve())) 

47 

48 if file: 

49 uri = f"file://{file}" 

50 elif url: 

51 uri = f"url://{url}" 

52 elif ext: 

53 uri = f"ext://{ext}" 

54 

55 from coxbuild import schema 

56 from coxbuild.extensions.loader import load as loadext 

57 

58 schema.manager.register(loadext(uri)) 

59 

60 json = json or [] 

61 yaml = yaml or [] 

62 

63 for item in json: 

64 logger.debug(f"Loading json config: {item}") 

65 schema.manager.configBuilders.add(JsonConfigurationBuilder(Path(item))) 

66 

67 for item in yaml: 

68 logger.debug(f"Loading yaml config: {item}") 

69 schema.manager.configBuilders.add(YamlConfigurationBuilder(Path(item))) 

70 

71 config = config or [] 

72 

73 configdata = {} 

74 for item in config: 

75 subs = item.split("=", 1) 

76 if len(subs) != 2: 

77 print("Invalid configuration entry: " + item) 

78 continue 

79 configdata[subs[0]] = subs[1] 

80 

81 schema.manager.configBuilders.add( 

82 DictionaryConfigurationBuilder(configdata)) 

83 

84 exit(0 if schema.manager.execute(*(tasks or [])) else 1) 

85 

86 

87if __name__ == '__main__': 

88 main()