1
0

Add custom repositories + arrow

This commit is contained in:
Hubert Van De Walle 2020-09-11 16:51:41 +02:00
parent 3155a2bbe8
commit 6f691fcd75
6 changed files with 65 additions and 28 deletions

View File

@ -16,6 +16,15 @@ display = "Java Version"
default = "1.4.10"
display = "Kotlin Version"
[repositories]
[repositories.jcenter]
url = "https://jcenter.bintray.com"
default = true # TODO: find where this is needed
[repositories.arrow]
url = "https://dl.bintray.com/arrow-kt/arrow-kt/"
[dependencies]
[dependencies.http4k]
@ -166,3 +175,9 @@ groupId = "org.jetbrains.kotlinx"
artifactId = "kotlinx-serialization-runtime"
version = "1.0-M1-1.4.0-rc"
category = "serialization"
[dependencies.Arrow-core]
groupId = "io.arrow-kt"
artifactId = "arrow-core"
version = "0.10.5"
repository = "arrow"

View File

@ -3,34 +3,47 @@ package starter
import com.electronwill.nightconfig.core.file.FileConfig
import com.electronwill.nightconfig.core.Config as NightConfig
data class StarterConfig(val dependencies: List<Dependency>, val inputs: List<Input>)
data class StarterConfig(
val dependencies: List<Dependency>,
val inputs: List<Input>,
val repositories: List<Repository>,
)
class Config {
@Suppress("UNCHECKED_CAST")
private fun FileConfig.configMap(key: String) = this.get<NightConfig>(key).valueMap() as Map<String, NightConfig>
fun load(): StarterConfig {
val cfg = FileConfig.of("config.toml")
cfg.load()
val dependenciesNode: NightConfig = cfg["dependencies"]
@Suppress("UNCHECKED_CAST") val dependenciesMap = dependenciesNode.valueMap() as Map<String, NightConfig>
val dependencies = dependenciesMap.map { (name, values) ->
Dependency(
name,
values["groupId"],
values["artifactId"],
values["version"],
values.getOrElse("default", false),
values.getEnumOrElse("category", Category.Other),
values.getEnumOrElse("scope", Scope.Compile),
values["logger"],
)
}
val inputsNode: NightConfig = cfg["inputs"]
@Suppress("UNCHECKED_CAST") val inputMap = inputsNode.valueMap() as Map<String, NightConfig>
val inputs = inputMap.map { (name, values) ->
Input(name, values["display"], values["default"])
}
val dependencies = cfg.configMap("dependencies")
.map { (name, values) ->
Dependency(
name,
values["groupId"],
values["artifactId"],
values["version"],
values.getOrElse("default", false),
values.getEnumOrElse("category", Category.Other),
values.getEnumOrElse("scope", Scope.Compile),
values["logger"],
values["repository"],
)
}
return StarterConfig(dependencies, inputs)
val inputs = cfg.configMap("inputs")
.map { (name, values) ->
Input(name, values["display"], values["default"])
}
val repositories = cfg.configMap("repositories")
.map { (name, values) ->
Repository(name, values["url"], values.getOrElse("default", false))
}
return StarterConfig(dependencies, inputs, repositories)
}
}

View File

@ -17,8 +17,11 @@ data class Dependency(
val category: Category,
val scope: Scope,
val logger: String?,
val repository: String?,
)
data class Repository(val name: String, val url: String, val default: Boolean)
data class Input(val name: String, val display: String, val value: String? = null)
data class Project(
@ -26,4 +29,5 @@ data class Project(
val basePackage: String,
val inputs: List<Input>,
val dependencies: List<Dependency>,
val repositories: List<Repository>,
)

View File

@ -40,7 +40,10 @@ class Server(
return@post
}
val project = Project(projectName, basePackage, inputs, deps)
val repositories = conf.repositories
.filter { repo -> repo.default || repo.name in deps.mapNotNull { it.repository } }
val project = Project(projectName, basePackage, inputs, deps, repositories)
ctx.contentType("application/zip")
ctx.header("Content-Disposition", "attachment; filename=\"${sanitizeFilename(projectName)}.zip\"")

View File

@ -11,6 +11,7 @@ class PomTemplate(private val engine: PebbleEngine) : Template {
override fun render(project: Project): String {
val args: MutableMap<String, Any?> = mutableMapOf(
"dependencies" to project.dependencies.sortedBy { it.scope },
"repositories" to project.repositories,
"kotlinxSerialization" to project.dependencies.any { it.name == "Kotlinx-serialization" },
)

View File

@ -1,7 +1,8 @@
<repositories>
<repository>
<id>jcenter</id>
<name>jcenter</name>
<url>https://jcenter.bintray.com</url>
</repository>
</repositories>
{% for repo in repositories %}
<repository>
<id>{{ repo.name }}</id>
<url>{{ repo.url }}</url>
</repository>
{% endfor %}
</repositories>