import argparse import asyncio import logging from pathlib import Path from maven import get_effective_packages from config import parse_config, Configuration from gradle import create_gradle_build, create_gradle_settings logger = logging.getLogger(__name__) async def resolve_kotlin(ident: str, kotlin: Configuration, output_dir: Path, mirrors: list[str], gradle_repo: str): resolved_packages = [ resolved for package in kotlin.packages for resolved in await get_effective_packages(package, mirrors) ] path = output_dir / f"{ident}-kotlin-{kotlin.kotlin_version}" path.mkdir() logger.debug(f'Creating {path}') logger.debug('Generating build.gradle.kts') gradle_build = create_gradle_build(kotlin.kotlin_version, kotlin.plugins, resolved_packages, gradle_repo) (path / 'build.gradle.kts').write_text(gradle_build) logger.debug('Generating settings.gradle.kts') gradle_settings = create_gradle_settings(gradle_repo) (path / 'settings.gradle.kts').write_text(gradle_settings) async def main(package_list: Path, output_dir: Path, gradle_repo: str) -> None: config = parse_config(package_list) if not config: print('Error in configuration') if not config.configurations: print('No configurations defined, nothing to do.') elif not config.mirrors: print('No mirrors defined. Add maven.mirrors in the config file.') else: for i, configuration in enumerate(config.configurations): logger.info(f'Resolving kotlin {configuration.kotlin_version}') try: await resolve_kotlin(str(i), configuration, output_dir, config.mirrors, gradle_repo) except: logger.exception(f'Error resolving kotlin version {configuration.kotlin_version}') if __name__ == '__main__': parser = argparse.ArgumentParser() parser.add_argument('-v', '--verbose', dest='verbosity', action='count', default=0) parser.add_argument('--repo', type=str, help="The repository gradle should use", required=True) parser.add_argument('--output-dir', type=Path, help="The directory to put the generated gradle files in", default=Path('..'), required=False) parser.add_argument('package_list', type=Path, help="The list of packages to download") args = parser.parse_args() if args.verbosity == 0: log_level = 'WARNING' elif args.verbosity == 1: log_level = 'INFO' else: log_level = 'DEBUG' logging.basicConfig(level=log_level) asyncio.run( main(args.package_list, args.output_dir, args.repo) )