2025-11-07 05:10:10 +01:00
|
|
|
//| mvnDeps:
|
|
|
|
|
//| - com.raquo::domtypes:18.1.0
|
|
|
|
|
//| - com.goyeau::mill-scalafix::0.6.0
|
2025-08-16 04:49:13 +02:00
|
|
|
|
2025-08-03 19:51:02 +02:00
|
|
|
package build
|
2025-08-16 04:49:13 +02:00
|
|
|
|
2025-08-21 04:14:31 +02:00
|
|
|
import mill.*, scalalib.*, javascriptlib.*
|
2025-11-07 05:10:10 +01:00
|
|
|
import mill.scalalib.scalafmt.ScalafmtModule
|
2025-08-16 04:49:13 +02:00
|
|
|
import mill.api.Task.Simple
|
2025-08-21 18:19:08 +02:00
|
|
|
import java.net.URI
|
|
|
|
|
import java.nio.file.*
|
|
|
|
|
import java.nio.file.attribute.BasicFileAttributes
|
|
|
|
|
import java.util
|
2025-11-07 05:10:10 +01:00
|
|
|
import com.goyeau.mill.scalafix.ScalafixModule
|
2025-08-03 19:51:02 +02:00
|
|
|
|
2025-11-07 05:10:10 +01:00
|
|
|
trait ScalaCommon extends ScalaModule with ScalafmtModule with ScalafixModule:
|
2025-08-16 04:49:13 +02:00
|
|
|
def scalaVersion = "3.7.2"
|
2025-08-19 21:23:29 +02:00
|
|
|
def scalacOptions = Seq(
|
|
|
|
|
"-Wunused:all",
|
|
|
|
|
"-preview",
|
|
|
|
|
"-feature",
|
|
|
|
|
"-language:implicitConversions",
|
2025-09-03 18:08:17 +02:00
|
|
|
"-Wvalue-discard",
|
|
|
|
|
"-Wnonunit-statement"
|
2025-08-19 21:23:29 +02:00
|
|
|
)
|
2025-08-15 22:51:27 +02:00
|
|
|
|
2025-08-21 04:14:31 +02:00
|
|
|
object core extends ScalaCommon:
|
2025-08-05 02:23:59 +02:00
|
|
|
def mvnDeps = Seq(mvn"dev.zio::zio-json:0.7.44")
|
2025-08-09 01:31:43 +02:00
|
|
|
|
2025-08-16 04:49:13 +02:00
|
|
|
def generatedSources = Task {
|
|
|
|
|
new DomDefsGenerator((Task.dest / "core/src/scalive").toString).generate()
|
|
|
|
|
super.generatedSources() ++ Seq(PathRef(Task.dest))
|
|
|
|
|
}
|
|
|
|
|
|
2025-08-21 04:14:31 +02:00
|
|
|
object test extends ScalaTests with scalalib.TestModule.Utest:
|
2025-08-09 01:31:43 +02:00
|
|
|
def utestVersion = "0.9.0"
|
|
|
|
|
|
2025-08-21 04:14:31 +02:00
|
|
|
object zio extends ScalaCommon:
|
2025-08-21 14:10:47 +02:00
|
|
|
def mvnDeps = Seq(mvn"dev.zio::zio-http:3.4.0")
|
|
|
|
|
def moduleDeps = Seq(core)
|
|
|
|
|
|
|
|
|
|
object example extends ScalaCommon:
|
|
|
|
|
def moduleDeps = Seq(zio)
|
2025-09-12 17:35:11 +02:00
|
|
|
def mvnDeps = Seq(mvn"dev.optics::monocle-core:3.1.0", mvn"dev.zio::zio-logging:2.5.1")
|
2025-08-21 18:19:08 +02:00
|
|
|
|
|
|
|
|
def scaliveBundle = Task {
|
|
|
|
|
os.copy(
|
|
|
|
|
from = example.js.bundle().path,
|
|
|
|
|
to = Task.dest / "public" / "app.js",
|
|
|
|
|
createFolders = true
|
|
|
|
|
)
|
|
|
|
|
PathRef(Task.dest)
|
|
|
|
|
}
|
|
|
|
|
|
2025-09-11 19:45:46 +02:00
|
|
|
def tailwindConfig = Task.Source(moduleDir / "tailwind.css")
|
|
|
|
|
|
|
|
|
|
def generateCss = Task {
|
|
|
|
|
sources()
|
|
|
|
|
os.proc(
|
|
|
|
|
"tailwindcss",
|
|
|
|
|
"--minify",
|
|
|
|
|
"--input",
|
|
|
|
|
tailwindConfig().path
|
|
|
|
|
).call().out.text()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
def cssResources = Task {
|
|
|
|
|
os.write(
|
|
|
|
|
target = Task.dest / "public" / "app.css",
|
|
|
|
|
data = generateCss(),
|
|
|
|
|
createFolders = true
|
|
|
|
|
)
|
|
|
|
|
PathRef(Task.dest)
|
|
|
|
|
}
|
|
|
|
|
|
2025-08-21 18:19:08 +02:00
|
|
|
def resources = Task {
|
2025-09-11 19:45:46 +02:00
|
|
|
super.resources() :+ scaliveBundle() :+ cssResources()
|
2025-08-21 18:19:08 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
object js extends TypeScriptModule:
|
2025-08-25 01:17:02 +02:00
|
|
|
def mainFileName = "app.js"
|
2025-09-17 02:29:38 +02:00
|
|
|
def npmDeps = Seq("phoenix@1.7.21", "phoenix_live_view@1.1.8", "topbar@3.0.0", "daisyui@5.1.12")
|
|
|
|
|
def bundleFlags = super.bundleFlags() ++ Map("minify" -> ujson.Bool(false))
|
2025-09-11 19:45:46 +02:00
|
|
|
end example
|