From 724f1c87b174505fd1c8c73ea166fb3395a9a034 Mon Sep 17 00:00:00 2001 From: Hubert Van De Walle Date: Fri, 11 Sep 2020 22:59:56 +0200 Subject: [PATCH] Reduce image size --- Dockerfile | 4 +- pom.xml | 37 +++++++++++++----- src/main/kotlin/starter/Server.kt | 65 ++++++++++++++++++------------- src/main/resources/logback.xml | 14 ------- 4 files changed, 68 insertions(+), 52 deletions(-) delete mode 100644 src/main/resources/logback.xml diff --git a/Dockerfile b/Dockerfile index 8a987b1..807e041 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,6 @@ FROM openjdk:14-alpine as jdkbuilder RUN apk add --no-cache binutils -ENV MODULES java.base,java.desktop,java.instrument,java.logging,java.management,java.naming,java.security.jgss,java.sql,java.xml +ENV MODULES java.base,java.xml,jdk.httpserver RUN jlink --output /myjdk --module-path $JAVA_HOME/jmods --add-modules $MODULES --no-header-files --no-man-pages --strip-debug --compress=2 RUN strip -p --strip-unneeded /myjdk/lib/server/libjvm.so @@ -22,4 +22,4 @@ COPY --from=jdkbuilder /myjdk /myjdk COPY config.toml /app/config.toml WORKDIR /app EXPOSE 7000 -CMD ["/myjdk/bin/java", "-server", "-jar", "app.jar"] +CMD ["/myjdk/bin/java", "-server", "-Xmx64m", "-XX:+UseG1GC", "-XX:+UseStringDeduplication", "-jar", "app.jar"] diff --git a/pom.xml b/pom.xml index 9a813da..6c404a2 100644 --- a/pom.xml +++ b/pom.xml @@ -26,11 +26,6 @@ pebble 3.1.4 - - ch.qos.logback - logback-classic - 1.2.3 - com.electronwill.night-config toml @@ -42,9 +37,9 @@ ${kotlin.version} - io.javalin - javalin - 3.10.1 + org.http4k + http4k-core + 3.260.0 org.apache.commons @@ -74,13 +69,35 @@ shade - false + true starter.KotlinStarterKt + + + com.electronwill.night-config:* + + ** + + + + *:* + + META-INF/maven/** + META-INF/proguard/** + META-INF/*.kotlin_module + META-INF/DEPENDENCIES* + META-INF/NOTICE* + META-INF/LICENSE* + LICENSE* + META-INF/README* + META-INF/native-image/** + + + @@ -117,4 +134,4 @@ - \ No newline at end of file + diff --git a/src/main/kotlin/starter/Server.kt b/src/main/kotlin/starter/Server.kt index f928bb7..cb21919 100644 --- a/src/main/kotlin/starter/Server.kt +++ b/src/main/kotlin/starter/Server.kt @@ -1,6 +1,17 @@ package starter -import io.javalin.Javalin +import org.http4k.core.HttpHandler +import org.http4k.core.Method +import org.http4k.core.Response +import org.http4k.core.Status +import org.http4k.core.body.form +import org.http4k.core.body.formAsMap +import org.http4k.routing.ResourceLoader +import org.http4k.routing.bind +import org.http4k.routing.routes +import org.http4k.routing.static +import org.http4k.server.SunHttp +import org.http4k.server.asServer import starter.utils.sanitizeFilename import java.io.ByteArrayInputStream @@ -9,23 +20,18 @@ class Server( private val conf: StarterConfig, private val projectZip: ProjectZip, ) { + fun run() { - val app = Javalin.create { - it.addStaticFiles("/assets") - }.start(7000) - - app.get("/") { ctx -> - ctx.result(views.index(conf.dependencies, conf.inputs)) - ctx.contentType("text/html") + val indexHandler: HttpHandler = { + Response(Status.OK).body(views.index(conf.dependencies, conf.inputs)).header("Content-Type", "text/html") } - - app.post("/") { ctx -> + val zipHandler: HttpHandler = { req -> val deps = conf.dependencies.filter { - ctx.formParam(it.name) != null + req.form(it.name) != null } val inputKeys = conf.inputs.map { it.name } - val inputs = ctx.formParamMap() + val inputs = req.formAsMap() .filter { it.key in inputKeys } .map { (name, value) -> conf.inputs.find { it.name == name }!!.copy(value = value.first()) @@ -35,21 +41,28 @@ class Server( val basePackage = inputs.find { it.name == "basePackage" }!!.value!! if (basePackage.contains("/") || basePackage.contains("..")) { - ctx.status(400) - ctx.result("Invalid Base Package") - return@post + Response(Status.BAD_REQUEST).body("Invalid Base Package") + } else { + val repositories = conf.repositories + .filter { repo -> repo.name in deps.mapNotNull { it.repository } } + + val project = Project(projectName, basePackage, inputs, deps, repositories) + val outputStream = projectZip.createZip(project) + + Response(Status.OK).header("Content-Type", "application/zip") + .header("Content-Disposition", "attachment; filename=\"${sanitizeFilename(projectName)}.zip\"") + .body(ByteArrayInputStream(outputStream.toByteArray())) } - - val repositories = conf.repositories - .filter { repo -> 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\"") - - val outputStream = projectZip.createZip(project) - ctx.result(ByteArrayInputStream(outputStream.toByteArray())) } + + val app = routes( + "/" bind Method.GET to indexHandler, + "/" bind Method.POST to zipHandler, + static(ResourceLoader.Classpath("/assets")) + ) + + app.asServer(SunHttp(7000)).start() + println("Started on http://localhost:7000") } + } diff --git a/src/main/resources/logback.xml b/src/main/resources/logback.xml deleted file mode 100644 index b35c238..0000000 --- a/src/main/resources/logback.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - true - - %cyan(%d{YYYY-MM-dd HH:mm:ss.SSS}) [%thread] %highlight(%-5level) %green(%logger{36}) - %msg%n - - - - - - - - -