-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbuild.sbt
128 lines (110 loc) · 4.21 KB
/
build.sbt
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
Global / onChangedBuildSource := ReloadOnSourceChanges
lazy val scala213 = "2.13.14"
lazy val scala3 = "3.3.3"
ThisBuild / crossScalaVersions := Seq(scala213, scala3)
// GitHub Actions config
val javaVersions = Seq(8, 11, 17, 21).map(v => JavaSpec.temurin(v.toString))
ThisBuild / githubWorkflowJavaVersions := javaVersions
ThisBuild / githubWorkflowArtifactUpload := false
ThisBuild / githubWorkflowBuildMatrixFailFast := Some(false)
ThisBuild / githubWorkflowTargetBranches := Seq("master")
def isJava(v: Int) = s"matrix.java == '${javaVersions.find(_.version == v.toString).get.render}'"
ThisBuild / githubWorkflowBuild ++= Seq(
WorkflowStep.Sbt(List("mimaReportBinaryIssues"), name = Some("Binary compatibility"), cond = Some(isJava(8))),
WorkflowStep.Sbt(List("docs/mdoc"), name = Some("Build docs"), cond = Some(isJava(17))),
)
ThisBuild / githubWorkflowPublishTargetBranches := Seq()
def foldScalaV[A](scalaVersion: String)(_213: => A, _3: => A): A =
CrossVersion.partialVersion(scalaVersion) match {
case Some((2, 13)) => _213
case Some((3, _)) => _3
}
lazy val baseSettings = Seq(
scalaVersion := scala3,
crossScalaVersions := Seq(scala213, scala3),
organization := "typify",
version := "12.0.0",
resolvers += "bondlink-maven-repo" at "https://raw.githubusercontent.com/mblink/maven-repo/main",
mimaPreviousArtifacts := Set("typify" %%% name.value % "12.0.0"),
libraryDependencies ++= foldScalaV(scalaVersion.value)(
Seq(compilerPlugin("org.typelevel" %% "kind-projector" % "0.13.3" cross CrossVersion.patch)),
Seq(),
),
scalacOptions ++= foldScalaV(scalaVersion.value)(
Seq("-Vimplicits-verbose-tree"),
Seq(
"-no-indent",
"-Wunused:unsafe-warn-patvars",
),
),
scalacOptions --= Seq(
"-language:existentials",
"-language:experimental.macros",
"-language:implicitConversions"
),
licenses += License.Apache2,
gitPublishDir := file("/src/maven-repo")
)
lazy val noPublishSettings = Seq(
publish := {},
publishLocal := {},
gitRelease := {},
)
lazy val root = project.in(file("."))
.aggregate((
typify.componentProjects ++
Seq(circeTypify, json4sTypify, sjsTypify) ++
(if (System.getProperty("java.version").startsWith("1.8")) Seq() else Seq(playjsonTypify))
).map(p => p: ProjectReference):_*)
.settings(baseSettings)
.settings(noPublishSettings)
.disablePlugins(MimaPlugin)
lazy val cats = Def.setting("org.typelevel" %%% "cats-core" % "2.12.0")
lazy val circe = "io.circe" %% "circe-core" % "0.14.10"
lazy val formless = Def.setting("com.bondlink" %%% "formless" % "0.5.1")
lazy val json4s = "org.json4s" %% "json4s-jackson" % "4.0.7"
lazy val playJson = "org.playframework" %% "play-json" % "3.0.4"
lazy val shapeless = Def.setting("com.chuusai" %%% "shapeless" % "2.3.12")
lazy val scalacheck = Def.setting("org.scalacheck" %%% "scalacheck" % "1.18.1" % Test)
lazy val typify = crossProject(JSPlatform, JVMPlatform, NativePlatform).in(file("typify"))
.settings(baseSettings)
.settings(
name := "typify",
libraryDependencies ++= Seq(cats.value, formless.value, scalacheck.value),
)
lazy val circeTypify = project.in(file("circe-typify"))
.settings(baseSettings)
.settings(
name := "circe-typify",
libraryDependencies += circe,
)
.dependsOn(typify.jvm % "test->test;compile->compile")
lazy val json4sTypify = project.in(file("json4s-typify"))
.settings(baseSettings)
.settings(
name := "json4s-typify",
libraryDependencies += json4s
)
.dependsOn(typify.jvm % "test->test;compile->compile")
lazy val playjsonTypify = project.in(file("play-json-typify"))
.settings(baseSettings)
.settings(
name := "play-json-typify",
libraryDependencies ++= Seq(cats.value, playJson)
)
.dependsOn(typify.jvm % "test->test;compile->compile")
lazy val sjsTypify = project.in(file("jsdynamic-typify"))
.settings(baseSettings)
.settings(name := "jsdynamic-typify")
.dependsOn(typify.js % "test->test;compile->compile")
.enablePlugins(ScalaJSPlugin)
lazy val docs = project.in(file("typify-docs"))
.settings(baseSettings)
.settings(noPublishSettings)
.settings(
mdocOut := file("."),
scalacOptions -= "-Xfatal-warnings",
)
.dependsOn(typify.jvm)
.enablePlugins(MdocPlugin)
.disablePlugins(MimaPlugin)