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
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
1import logging
2import os
3from pathlib import Path
5import click
7from coxbuild import __version__
8from coxbuild.configurations import Configuration
9from coxbuild.configurations.builders import (DictionaryConfigurationBuilder,
10 JsonConfigurationBuilder,
11 YamlConfigurationBuilder)
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.
30 Source Project: https://github.com/StardustDL/coxbuild
31 """
32 click.echo(f"Welcome to Coxbuild v{__version__}!")
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}")
46 os.chdir(str(Path(str(directory)).resolve()))
48 if file:
49 uri = f"file://{file}"
50 elif url:
51 uri = f"url://{url}"
52 elif ext:
53 uri = f"ext://{ext}"
55 from coxbuild import schema
56 from coxbuild.extensions.loader import load as loadext
58 schema.manager.register(loadext(uri))
60 json = json or []
61 yaml = yaml or []
63 for item in json:
64 logger.debug(f"Loading json config: {item}")
65 schema.manager.configBuilders.add(JsonConfigurationBuilder(Path(item)))
67 for item in yaml:
68 logger.debug(f"Loading yaml config: {item}")
69 schema.manager.configBuilders.add(YamlConfigurationBuilder(Path(item)))
71 config = config or []
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]
81 schema.manager.configBuilders.add(
82 DictionaryConfigurationBuilder(configdata))
84 exit(0 if schema.manager.execute(*(tasks or [])) else 1)
87if __name__ == '__main__':
88 main()