|
- from typing import Optional
-
- import yaml
- import logging
- from dataclasses import dataclass
- from pathlib import Path
-
- from .plugins import Plugin, handle_plugins
- from .packages import Package, handle_packages
-
- logger = logging.getLogger(__name__)
-
-
- @dataclass
- class Configuration:
- kotlin_version: str
- gradle_version: Optional[str]
- plugins: list[Plugin]
- packages: list[Package]
-
-
- @dataclass
- class MavenMirrors:
- package_mirrors: list[str]
- plugin_mirrors: list[str]
-
-
- @dataclass
- class Config:
- configurations: list[Configuration]
- mirrors: MavenMirrors
-
-
- def parse_config(path: Path) -> Optional[Config]:
- with path.open('r') as f:
- data = yaml.safe_load(f)
-
- error: list[str] = []
- configurations: dict[tuple[str, str], tuple[list[Plugin], list[Package]]] = {}
-
- for i, section in enumerate(data.get('configurations')):
- if (kotlin_versions := section.get('kotlin-version')) is None:
- error.append(f"Configuration {i} is missing 'kotlin-version'")
-
- if not isinstance(kotlin_versions, list):
- kotlin_versions = [kotlin_versions]
-
- gradle_versions = section.get('gradle-version')
- if not isinstance(gradle_versions, list):
- gradle_versions = [gradle_versions]
-
- plugins = handle_plugins(section.get('plugins', {}))
- packages = handle_packages(section.get('packages', {}))
-
- for kotlin in kotlin_versions:
- for gradle in gradle_versions:
- key = (kotlin, gradle)
-
- if key in configurations:
- configurations[key] = (
- configurations[key][0] + plugins,
- configurations[key][1] + packages,
- )
- else:
- configurations[key] = (plugins, packages)
-
- if error:
- for msg in error:
- logger.error(msg)
-
- return None
- else:
- return Config(
- [
- Configuration(kotlin, gradle, plugins, packages)
- for (kotlin, gradle), (plugins, packages) in configurations.items()
- ],
- MavenMirrors(
- data.get('maven', {}).get('package-mirrors', []),
- data.get('maven', {}).get('plugin-mirrors', []),
- ),
- )
|