val scala3: String = "3.5.1" ThisBuild / scalaVersion := scala3 ThisBuild / versionScheme := Some("semver-spec") ThisBuild / gsProjectName := "gs-test" ThisBuild / externalResolvers := Seq( "Garrity Software Mirror" at "https://maven.garrity.co/releases", "Garrity Software Releases" at "https://maven.garrity.co/gs" ) ThisBuild / licenses := Seq( "MIT" -> url("https://garrity.co/MIT.html") ) val noPublishSettings = Seq( publish := {} ) val sharedSettings = Seq( scalaVersion := scala3, version := semVerSelected.value, coverageFailOnMinimum := true /* coverageMinimumStmtTotal := 100, coverageMinimumBranchTotal := 100 */ ) val Deps = new { val Cats = new { val Core: ModuleID = "org.typelevel" %% "cats-core" % "2.12.0" val Effect: ModuleID = "org.typelevel" %% "cats-effect" % "3.5.4" } val Fs2 = new { val Core: ModuleID = "co.fs2" %% "fs2-core" % "3.10.2" } val Natchez = new { val Core: ModuleID = "org.tpolecat" %% "natchez-core" % "0.3.6" } val Gs = new { val Uuid: ModuleID = "gs" %% "gs-uuid-v0" % "0.3.0" val Timing: ModuleID = "gs" %% "gs-timing-v0" % "0.1.1" val Datagen: ModuleID = "gs" %% "gs-datagen-core-v0" % "0.2.0" } val MUnit: ModuleID = "org.scalameta" %% "munit" % "1.0.1" } lazy val testSettings = Seq( libraryDependencies ++= Seq( Deps.MUnit % Test, Deps.Gs.Datagen % Test ) ) lazy val `gs-test` = project .in(file(".")) .aggregate( `test-support`, api, runtime ) .settings(noPublishSettings) .settings(name := s"${gsProjectName.value}-v${semVerMajor.value}") lazy val `test-support` = project .in(file("modules/test-support")) .settings(sharedSettings) .settings(testSettings) .settings(noPublishSettings) .settings( name := s"${gsProjectName.value}-test-support" ) .settings( libraryDependencies ++= Seq( Deps.Cats.Core, Deps.Cats.Effect ) ) lazy val api = project .in(file("modules/api")) .dependsOn(`test-support` % "test->test") .settings(sharedSettings) .settings(testSettings) .settings( name := s"${gsProjectName.value}-api-v${semVerMajor.value}" ) .settings( libraryDependencies ++= Seq( Deps.Cats.Core, Deps.Cats.Effect, Deps.Natchez.Core ) ) lazy val runtime = project .in(file("modules/runtime")) .dependsOn(`test-support` % "test->test") .dependsOn(api) .settings(sharedSettings) .settings(testSettings) .settings( name := s"${gsProjectName.value}-runtime-v${semVerMajor.value}" ) .settings( libraryDependencies ++= Seq( Deps.Gs.Uuid, Deps.Gs.Timing, Deps.Cats.Core, Deps.Cats.Effect, Deps.Fs2.Core, Deps.Natchez.Core ) )