-
-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathbuild.mill
More file actions
154 lines (124 loc) · 5.22 KB
/
build.mill
File metadata and controls
154 lines (124 loc) · 5.22 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
//| bspScriptIgnore:
//| - "sbt-indigo"
package build
import mill.*
import mill.scalalib.*
import mill.scalalib.publish.*
import mill.scalalib.scalafmt.*
import mill.scalajslib.*
import mill.scalanativelib.*
import mill.scalanativelib.api.*
import mill.api.BuildCtx
import org.typelevel.scalacoptions.*
import com.goyeau.mill.scalafix.ScalafixModule
trait Shared extends ScalafmtModule, ScalafixModule:
// May need to be compatible with the Mill Scala version in mill-build/build.mill
def scalaVersion = Task("3.8.2")
override def scalacOptions = Task {
val baseOptions = ScalacOptions.tokensForVersion(
ScalaVersion.unsafeFromString(scalaVersion()),
ScalacOptions.default ++
ScalacOptions.fatalWarningOptions ++
Seq(ScalacOptions.languageStrictEquality)
)
// Filter out deprecated -Xfatal-warnings (replaced by -Werror in Scala 3.8+)
val excluded = Set("-Xfatal-warnings")
val filtered = baseOptions.filterNot(excluded.contains)
super.scalacOptions() ++ filtered ++ Seq("-Werror")
}
trait SharedJVM extends Shared, ScalaModule:
object test extends ScalaTests:
def mvnDeps = Seq(
mvn"org.scalameta::munit::${Dependencies.munit}",
mvn"org.scalacheck::scalacheck::${Dependencies.scalacheck}",
mvn"org.typelevel::munit-cats-effect::${Dependencies.munitCatsEffect3}",
mvn"org.typelevel::discipline-munit::${Dependencies.disciplineMUnit}",
mvn"org.typelevel::cats-laws::${Dependencies.catsLaws}"
)
def testFramework = Task("munit.Framework")
trait SharedJS extends Shared, ScalaJSModule:
def scalaJSVersion = Task("1.21.0")
object test extends Shared, ScalaJSTests:
def mvnDeps = Seq(
mvn"org.scalameta::munit::${Dependencies.munit}",
mvn"org.scalacheck::scalacheck::${Dependencies.scalacheck}",
mvn"org.typelevel::munit-cats-effect::${Dependencies.munitCatsEffect3}",
mvn"org.typelevel::discipline-munit::${Dependencies.disciplineMUnit}",
mvn"org.typelevel::cats-laws::${Dependencies.catsLaws}"
)
override def moduleKind = Task(mill.scalajslib.api.ModuleKind.CommonJSModule)
def testFramework = Task("munit.Framework")
trait SharedNative extends Shared, ScalaNativeModule:
def scalaNativeVersion = Task("0.5.10")
override def nativeIncrementalCompilation: T[Boolean] = Task(true)
override def releaseMode: T[ReleaseMode] = Task(ReleaseMode.Debug)
override def nativeLTO: T[LTO] = Task(LTO.None)
object test extends Shared, ScalaNativeTests:
def mvnDeps = Seq(
mvn"org.scalameta::munit::${Dependencies.munit}",
mvn"org.scalacheck::scalacheck::${Dependencies.scalacheck}",
mvn"org.typelevel::munit-cats-effect::${Dependencies.munitCatsEffect3}",
mvn"org.typelevel::discipline-munit::${Dependencies.disciplineMUnit}",
mvn"org.typelevel::cats-laws::${Dependencies.catsLaws}"
)
def testFramework = Task("munit.Framework")
trait SharedPublish extends PublishModule:
def indigoVersion = Task.Input(IndigoVersion.getVersion(BuildCtx.workspaceRoot))
def publishVersion = indigoVersion()
def pomSettings =
PomSettings(
description = "indigo",
organization = "io.indigoengine",
url = "https://github.com/PurpleKingdomGames/indigoengine",
licenses = Seq(License.MIT),
versionControl = VersionControl.github("PurpleKingdomGames", "indigoengine"),
developers = Seq(
Developer("davesmith00000", "David Smith", "https://github.com/davesmith00000")
)
)
// --- Utils ---
object IndigoVersion:
def getVersion(workspaceDir: os.Path): String = {
def rec(wd: os.Path, file: String, levels: Int, version: Option[String]): String = {
val msg = "ERROR: Couldn't find Indigo Engine version."
version match {
case Some(v) =>
println(s"""Indigo version set to '$v'""")
v
case None if levels < 3 =>
try {
val v = os.read.lines(wd / file).head
rec(wd, file, levels, Some(v))
} catch {
case _: Throwable =>
rec(wd / os.RelPath.up, file, levels + 1, None)
}
case None =>
println(msg)
throw new Exception(msg)
}
}
rec(workspaceDir, ".indigo-version", 0, None)
}
// --- Dependencies ---
object Dependencies:
val catsEffect = "3.7.0"
val circe = millbuild.DepVersions.circeVersion
val fs2 = "3.13.0"
val scalajsDomVersion = "2.8.1"
val munitCatsEffect3 = "2.2.0"
val disciplineMUnit = "2.0.0"
val scalajsSnabbdom = "0.2.0-M3"
val zio = "2.1.21"
val zioInteropCats = "23.1.0.5"
val scalaJavaTime = "2.6.0"
val catsLaws = "2.13.0"
val http4sCirce = "0.23.30"
val http4sDom = "0.2.11"
val http4sServer = "0.23.32"
val scalacheck = "1.19.0"
val munit = "1.2.2"
val oslib = millbuild.DepVersions.osLibVersion
val scalacOptions: String = millbuild.DepVersions.scalacOptionsVersion
val scalafixMill: String = millbuild.DepVersions.scalafixMillVersion
val scalajsMacrotaskExecutor = "1.1.1"