|
| 1 | +import formless._ |
| 2 | + |
| 3 | +Global / onChangedBuildSource := ReloadOnSourceChanges |
| 4 | + |
| 5 | +lazy val scala213 = "2.13.11" |
| 6 | +lazy val scala3 = "3.3.0" |
| 7 | + |
| 8 | +ThisBuild / crossScalaVersions := Seq(scala213, scala3) |
| 9 | +ThisBuild / scalaVersion := scala3 |
| 10 | + |
| 11 | +// GitHub Actions config |
| 12 | +val javaVersions = Seq(8, 11, 17).map(v => JavaSpec.temurin(v.toString)) |
| 13 | + |
| 14 | +ThisBuild / githubWorkflowJavaVersions := javaVersions |
| 15 | +ThisBuild / githubWorkflowArtifactUpload := false |
| 16 | +ThisBuild / githubWorkflowBuildMatrixFailFast := Some(false) |
| 17 | +ThisBuild / githubWorkflowTargetBranches := Seq("main") |
| 18 | + |
| 19 | +val isJava8 = s"matrix.java == '${javaVersions.find(_.version == "8").get.render}'" |
| 20 | + |
| 21 | +ThisBuild / githubWorkflowBuild ++= Seq( |
| 22 | + WorkflowStep.Sbt(List("mimaReportBinaryIssues"), name = Some("Check binary compatibility"), cond = Some(isJava8)), |
| 23 | + WorkflowStep.Sbt(List("docs/mdoc"), name = Some("Build docs"), cond = Some(isJava8)), |
| 24 | +) |
| 25 | + |
| 26 | +ThisBuild / githubWorkflowPublishTargetBranches := Seq() |
| 27 | + |
| 28 | +def foldScalaV[A](scalaVersion: String)(_213: => A, _3: => A): A = |
| 29 | + CrossVersion.partialVersion(scalaVersion) match { |
| 30 | + case Some((2, 13)) => _213 |
| 31 | + case Some((3, _)) => _3 |
| 32 | + } |
| 33 | + |
| 34 | +lazy val baseSettings = Seq( |
| 35 | + scalaVersion := scala3, |
| 36 | + crossScalaVersions := Seq(scala213, scala3), |
| 37 | + organization := "com.bondlink", |
| 38 | + version := "0.1.0-SNAPSHOT", |
| 39 | + resolvers += "bondlink-maven-repo" at "https://raw.githubusercontent.com/mblink/maven-repo/main", |
| 40 | + mimaPreviousArtifacts := Set(), |
| 41 | + libraryDependencies ++= foldScalaV(scalaVersion.value)( |
| 42 | + Seq(compilerPlugin("org.typelevel" %% "kind-projector" % "0.13.2" cross CrossVersion.patch)), |
| 43 | + Seq(), |
| 44 | + ), |
| 45 | + scalacOptions ++= foldScalaV(scalaVersion.value)( |
| 46 | + Seq("-Vimplicits-verbose-tree"), |
| 47 | + Seq( |
| 48 | + "-no-indent", |
| 49 | + "-Wunused:unsafe-warn-patvars", |
| 50 | + ), |
| 51 | + ), |
| 52 | + scalacOptions --= Seq( |
| 53 | + "-language:existentials", |
| 54 | + "-language:experimental.macros", |
| 55 | + "-language:implicitConversions" |
| 56 | + ), |
| 57 | + licenses += License.Apache2, |
| 58 | + gitPublishDir := file("/src/maven-repo") |
| 59 | +) |
| 60 | + |
| 61 | +lazy val noPublishSettings = Seq( |
| 62 | + publish := {}, |
| 63 | + publishLocal := {}, |
| 64 | + gitRelease := {}, |
| 65 | +) |
| 66 | + |
| 67 | +lazy val munit = Def.setting("org.scalameta" %% "munit" % "1.0.0-M8" % Test) |
| 68 | +lazy val shapeless = Def.setting("com.chuusai" %%% "shapeless" % "2.3.10") |
| 69 | +lazy val scalacheck = Def.setting("org.scalacheck" %%% "scalacheck" % "1.17.0" % Test) |
| 70 | + |
| 71 | +lazy val core = crossProject(JSPlatform, JVMPlatform, NativePlatform).in(file("core")) |
| 72 | + .settings(baseSettings) |
| 73 | + .settings( |
| 74 | + name := "formless-core", |
| 75 | + libraryDependencies ++= Seq(munit.value, scalacheck.value), |
| 76 | + libraryDependencies ++= foldScalaV(scalaVersion.value)( |
| 77 | + Seq( |
| 78 | + shapeless.value, |
| 79 | + scalaOrganization.value % "scala-compiler" % scalaVersion.value % "provided", |
| 80 | + ), |
| 81 | + Seq(), |
| 82 | + ), |
| 83 | + Test / sourceGenerators += Def.task { |
| 84 | + val srcManaged = (Test / sourceManaged).value / "generated" |
| 85 | + |
| 86 | + def gen(scalaF: String, generator: SourceGenerator) = { |
| 87 | + println(s"Generating ${srcManaged / scalaF} with $generator") |
| 88 | + IO.write(srcManaged / scalaF, generator()) |
| 89 | + srcManaged / scalaF |
| 90 | + } |
| 91 | + |
| 92 | + Seq( |
| 93 | + gen("Util.scala", SourceGenerator.Util), |
| 94 | + gen("TupleSelectorTest.scala", SourceGenerator.TupleSelectorTest), |
| 95 | + gen("RecordSelectorTest.scala", SourceGenerator.RecordSelectorTest), |
| 96 | + gen("UpdaterTest.scala", SourceGenerator.UpdaterTest), |
| 97 | + gen("ModifierTest.scala", SourceGenerator.ModifierTest), |
| 98 | + gen("RenamerTest.scala", SourceGenerator.RenamerTest), |
| 99 | + gen("RemoverTest.scala", SourceGenerator.RemoverTest), |
| 100 | + ) |
| 101 | + } |
| 102 | + ) |
| 103 | + |
| 104 | +lazy val docs = project.in(file("formless-docs")) |
| 105 | + .settings(baseSettings) |
| 106 | + .settings(noPublishSettings) |
| 107 | + .settings( |
| 108 | + mdocOut := file("."), |
| 109 | + scalacOptions -= "-Xfatal-warnings", |
| 110 | + ) |
| 111 | + .dependsOn(core.jvm) |
| 112 | + .enablePlugins(MdocPlugin) |
| 113 | + .disablePlugins(MimaPlugin) |
0 commit comments