val scala3: String = "3.8.2" ThisBuild / scalaVersion := scala3 ThisBuild / versionScheme := Some("semver-spec") ThisBuild / gsProjectName := "gs-crypto" 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://git.garrity.co/garrity-software/gs-crypto/src/branch/main/LICENSE" ) ) // Note: Scala 3 code coverage is busted :( val sharedSettings = Seq( scalaVersion := scala3, version := semVerSelected.value, coverageFailOnMinimum := true /* coverageMinimumStmtTotal := 100, coverageMinimumBranchTotal := 100 */ ) val noPublishSettings = Seq( publish := {} ) val Deps = new { val Cats = new { val Effect: ModuleID = "org.typelevel" %% "cats-effect" % "3.6.3" } val Gs = new { val Datagen: ModuleID = "gs" %% "gs-datagen-core-v0" % "0.4.1" } val BouncyCastle = new { val Provider: ModuleID = "org.bouncycastle" % "bcprov-jdk18on" % "1.83" val PKIX: ModuleID = "org.bouncycastle" % "bcpkix-jdk18on" % "1.83" } val MUnit: ModuleID = "org.scalameta" %% "munit" % "1.2.2" } lazy val testSettings = Seq( libraryDependencies ++= Seq( Deps.MUnit % Test, Deps.Gs.Datagen % Test ) ) lazy val `gs-crypto` = project .in(file(".")) .aggregate(core, argon2, rsa, eddsa) .settings(noPublishSettings) .settings(name := s"${gsProjectName.value}-v${semVerMajor.value}") lazy val core = project .in(file("modules/core")) .settings(sharedSettings) .settings(testSettings) .settings( name := s"${gsProjectName.value}-core-v${semVerMajor.value}" ) .settings( libraryDependencies ++= Seq( Deps.Cats.Effect, Deps.BouncyCastle.PKIX ) ) lazy val argon2 = project .in(file("modules/argon2")) .dependsOn(core) .settings(sharedSettings) .settings(testSettings) .settings( name := s"${gsProjectName.value}-argon2-v${semVerMajor.value}" ) .settings( libraryDependencies ++= Seq( Deps.Cats.Effect, Deps.BouncyCastle.Provider ) ) lazy val rsa = project .in(file("modules/rsa")) .dependsOn(core) .settings(sharedSettings) .settings(testSettings) .settings( name := s"${gsProjectName.value}-rsa-v${semVerMajor.value}" ) .settings( libraryDependencies ++= Seq( Deps.Cats.Effect ) ) lazy val eddsa = project .in(file("modules/eddsa")) .dependsOn(core) .settings(sharedSettings) .settings(testSettings) .settings( name := s"${gsProjectName.value}-eddsa-v${semVerMajor.value}" ) .settings( libraryDependencies ++= Seq( Deps.Cats.Effect, Deps.BouncyCastle.Provider ) )