from typing import Iterable from config import Package, Plugin def create_gradle_settings(repo: str) -> str: return """// Generated, do not edit rootProject.name = "gradle sync job" pluginManagement { repositories { maven { url=uri("http://""" + repo + """/releases") isAllowInsecureProtocol=true } } } """ def create_gradle_build(kotlin_version: str, plugins: Iterable[Plugin], packages: Iterable[Package], repo: str) -> str: return """// Generated, do not edit plugins { """ + f'kotlin("jvm") version "{kotlin_version}"' + """ """ + '\n '.join(p.gradle_spec for p in plugins) + """ } """ + (""" repositories { maven { url=uri("http://""" + repo + """/releases") isAllowInsecureProtocol=true } } val deps = listOf( """ + ',\n '.join(f'"{dep}"' for dep in sorted([str(p) for p in packages])) + """ ).flatMap { listOf(it, it + ":sources", it + ":javadoc") }.map { configurations.create(it.replace(':', '_')) { isCanBeResolved = true isCanBeConsumed = false } to it } dependencies { deps.forEach { (conf, dep) -> conf(dep) } } tasks.register("downloadDependencies") { val logger = getLogger() doLast { deps.forEach { (conf, dep) -> logger.warn("$conf") try { conf.files } catch (e: Exception) { if (dep.endsWith(":sources")) { logger.info("Package '$dep' has no sources") } else if (dep.endsWith(":javadoc")) { logger.info("Package '$dep' has no javadoc") } else { logger.info("Error while fetching '$dep': $e") } } } } } """ if packages else """ tasks.register("downloadDependencies") {} """)