diff --git a/sbt-iw-plugin-presets/src/main/scala/works/iterative/sbt/IWPluginPresets.scala b/sbt-iw-plugin-presets/src/main/scala/works/iterative/sbt/IWPluginPresets.scala index 0973caa..c607948 100644 --- a/sbt-iw-plugin-presets/src/main/scala/works/iterative/sbt/IWPluginPresets.scala +++ b/sbt-iw-plugin-presets/src/main/scala/works/iterative/sbt/IWPluginPresets.scala @@ -25,7 +25,7 @@ val addLocales: Def.Setting[?] = addSbtPlugin("io.github.cquiroz" % "sbt-locales" % "4.5.0") val addScalaJS: Def.Setting[?] = - addSbtPlugin("org.scala-js" % "sbt-scalajs" % "1.17.0") + addSbtPlugin("org.scala-js" % "sbt-scalajs" % "1.18.2") val addScalaJSCrossproject: Def.Setting[?] = addSbtPlugin( "org.portable-scala" % "sbt-scalajs-crossproject" % scalaJSCrossprojectVersion @@ -60,11 +60,11 @@ override def projectSettings: Seq[Def.Setting[?]] = Seq( addSbtPlugin("com.timushev.sbt" % "sbt-updates" % "0.6.4"), addSbtPlugin("org.typelevel" % "sbt-tpolecat" % "0.5.2"), - addSbtPlugin("org.scalameta" % "sbt-scalafmt" % "2.5.2"), - addSbtPlugin("com.github.sbt" % "sbt-native-packager" % "1.10.4"), + addSbtPlugin("org.scalameta" % "sbt-scalafmt" % "2.5.4"), + addSbtPlugin("com.github.sbt" % "sbt-native-packager" % "1.11.1"), addSbtPlugin("com.github.sbt" % "sbt-git" % "2.0.1"), - addSbtPlugin("ch.epfl.scala" % "sbt-scalafix" % "0.13.0"), - addSbtPlugin("com.eed3si9n" % "sbt-buildinfo" % "0.12.0"), + addSbtPlugin("ch.epfl.scala" % "sbt-scalafix" % "0.14.2"), + addSbtPlugin("com.eed3si9n" % "sbt-buildinfo" % "0.13.1"), addSbtPlugin( "org.portable-scala" % "sbt-scalajs-crossproject" % scalaJSCrossprojectVersion ) diff --git a/sbt-iw-plugin-presets/src/main/scala/works/iterative/sbt/IWPluginPresets.scala b/sbt-iw-plugin-presets/src/main/scala/works/iterative/sbt/IWPluginPresets.scala index 0973caa..c607948 100644 --- a/sbt-iw-plugin-presets/src/main/scala/works/iterative/sbt/IWPluginPresets.scala +++ b/sbt-iw-plugin-presets/src/main/scala/works/iterative/sbt/IWPluginPresets.scala @@ -25,7 +25,7 @@ val addLocales: Def.Setting[?] = addSbtPlugin("io.github.cquiroz" % "sbt-locales" % "4.5.0") val addScalaJS: Def.Setting[?] = - addSbtPlugin("org.scala-js" % "sbt-scalajs" % "1.17.0") + addSbtPlugin("org.scala-js" % "sbt-scalajs" % "1.18.2") val addScalaJSCrossproject: Def.Setting[?] = addSbtPlugin( "org.portable-scala" % "sbt-scalajs-crossproject" % scalaJSCrossprojectVersion @@ -60,11 +60,11 @@ override def projectSettings: Seq[Def.Setting[?]] = Seq( addSbtPlugin("com.timushev.sbt" % "sbt-updates" % "0.6.4"), addSbtPlugin("org.typelevel" % "sbt-tpolecat" % "0.5.2"), - addSbtPlugin("org.scalameta" % "sbt-scalafmt" % "2.5.2"), - addSbtPlugin("com.github.sbt" % "sbt-native-packager" % "1.10.4"), + addSbtPlugin("org.scalameta" % "sbt-scalafmt" % "2.5.4"), + addSbtPlugin("com.github.sbt" % "sbt-native-packager" % "1.11.1"), addSbtPlugin("com.github.sbt" % "sbt-git" % "2.0.1"), - addSbtPlugin("ch.epfl.scala" % "sbt-scalafix" % "0.13.0"), - addSbtPlugin("com.eed3si9n" % "sbt-buildinfo" % "0.12.0"), + addSbtPlugin("ch.epfl.scala" % "sbt-scalafix" % "0.14.2"), + addSbtPlugin("com.eed3si9n" % "sbt-buildinfo" % "0.13.1"), addSbtPlugin( "org.portable-scala" % "sbt-scalajs-crossproject" % scalaJSCrossprojectVersion ) diff --git a/sbt-iw-projects/src/main/scala/works/iterative/sbt/IWMaterialsDeps.scala b/sbt-iw-projects/src/main/scala/works/iterative/sbt/IWMaterialsDeps.scala index d83254d..127b966 100644 --- a/sbt-iw-projects/src/main/scala/works/iterative/sbt/IWMaterialsDeps.scala +++ b/sbt-iw-projects/src/main/scala/works/iterative/sbt/IWMaterialsDeps.scala @@ -57,8 +57,6 @@ lazy val zioInteropReactiveStreams: Def.Setting[_] = zioLib("interop-reactivestreams", V.zioInteropReactiveStreams) lazy val zioNIO: Def.Setting[_] = zioLib("nio", V.zioNIO) - lazy val zioOptics: Def.Setting[_] = zioLib("optics", V.zioOptics) - lazy val zioQuery: Def.Setting[_] = zioLib("query", V.zioQuery) lazy val zioCli: Def.Setting[_] = zioLib("cli", V.zioCli) lazy val quill: Def.Setting[_] = @@ -129,6 +127,12 @@ lazy val tapirCats: Def.Setting[_] = tapirLib("cats") lazy val tapirZIOHttp4sServer: Def.Setting[_] = tapirLib("http4s-server-zio") + lazy val magnum: Def.Setting[_] = libraryDependencies += "com.augustnagro" % "magnum_3" % V.magnum + lazy val magnumZIO: Def.Setting[_] = libraryDependencies += "com.augustnagro" % "magnumzio_3" % V.magnum + lazy val magnumPG: Def.Setting[_] = libraryDependencies += "com.augustnagro" % "magnumpg_3" % V.magnum + + lazy val scalatags: Def.Setting[_] = libraryDependencies += "com.lihaoyi" %%% "scalatags" % V.scalatags + private val sttpClient3Org = "com.softwaremill.sttp.client3" def sttpClient3Lib(name: String): Def.Setting[_] = libraryDependencies += sttpClient3Org %%% name % V.sttpClient3 diff --git a/sbt-iw-plugin-presets/src/main/scala/works/iterative/sbt/IWPluginPresets.scala b/sbt-iw-plugin-presets/src/main/scala/works/iterative/sbt/IWPluginPresets.scala index 0973caa..c607948 100644 --- a/sbt-iw-plugin-presets/src/main/scala/works/iterative/sbt/IWPluginPresets.scala +++ b/sbt-iw-plugin-presets/src/main/scala/works/iterative/sbt/IWPluginPresets.scala @@ -25,7 +25,7 @@ val addLocales: Def.Setting[?] = addSbtPlugin("io.github.cquiroz" % "sbt-locales" % "4.5.0") val addScalaJS: Def.Setting[?] = - addSbtPlugin("org.scala-js" % "sbt-scalajs" % "1.17.0") + addSbtPlugin("org.scala-js" % "sbt-scalajs" % "1.18.2") val addScalaJSCrossproject: Def.Setting[?] = addSbtPlugin( "org.portable-scala" % "sbt-scalajs-crossproject" % scalaJSCrossprojectVersion @@ -60,11 +60,11 @@ override def projectSettings: Seq[Def.Setting[?]] = Seq( addSbtPlugin("com.timushev.sbt" % "sbt-updates" % "0.6.4"), addSbtPlugin("org.typelevel" % "sbt-tpolecat" % "0.5.2"), - addSbtPlugin("org.scalameta" % "sbt-scalafmt" % "2.5.2"), - addSbtPlugin("com.github.sbt" % "sbt-native-packager" % "1.10.4"), + addSbtPlugin("org.scalameta" % "sbt-scalafmt" % "2.5.4"), + addSbtPlugin("com.github.sbt" % "sbt-native-packager" % "1.11.1"), addSbtPlugin("com.github.sbt" % "sbt-git" % "2.0.1"), - addSbtPlugin("ch.epfl.scala" % "sbt-scalafix" % "0.13.0"), - addSbtPlugin("com.eed3si9n" % "sbt-buildinfo" % "0.12.0"), + addSbtPlugin("ch.epfl.scala" % "sbt-scalafix" % "0.14.2"), + addSbtPlugin("com.eed3si9n" % "sbt-buildinfo" % "0.13.1"), addSbtPlugin( "org.portable-scala" % "sbt-scalajs-crossproject" % scalaJSCrossprojectVersion ) diff --git a/sbt-iw-projects/src/main/scala/works/iterative/sbt/IWMaterialsDeps.scala b/sbt-iw-projects/src/main/scala/works/iterative/sbt/IWMaterialsDeps.scala index d83254d..127b966 100644 --- a/sbt-iw-projects/src/main/scala/works/iterative/sbt/IWMaterialsDeps.scala +++ b/sbt-iw-projects/src/main/scala/works/iterative/sbt/IWMaterialsDeps.scala @@ -57,8 +57,6 @@ lazy val zioInteropReactiveStreams: Def.Setting[_] = zioLib("interop-reactivestreams", V.zioInteropReactiveStreams) lazy val zioNIO: Def.Setting[_] = zioLib("nio", V.zioNIO) - lazy val zioOptics: Def.Setting[_] = zioLib("optics", V.zioOptics) - lazy val zioQuery: Def.Setting[_] = zioLib("query", V.zioQuery) lazy val zioCli: Def.Setting[_] = zioLib("cli", V.zioCli) lazy val quill: Def.Setting[_] = @@ -129,6 +127,12 @@ lazy val tapirCats: Def.Setting[_] = tapirLib("cats") lazy val tapirZIOHttp4sServer: Def.Setting[_] = tapirLib("http4s-server-zio") + lazy val magnum: Def.Setting[_] = libraryDependencies += "com.augustnagro" % "magnum_3" % V.magnum + lazy val magnumZIO: Def.Setting[_] = libraryDependencies += "com.augustnagro" % "magnumzio_3" % V.magnum + lazy val magnumPG: Def.Setting[_] = libraryDependencies += "com.augustnagro" % "magnumpg_3" % V.magnum + + lazy val scalatags: Def.Setting[_] = libraryDependencies += "com.lihaoyi" %%% "scalatags" % V.scalatags + private val sttpClient3Org = "com.softwaremill.sttp.client3" def sttpClient3Lib(name: String): Def.Setting[_] = libraryDependencies += sttpClient3Org %%% name % V.sttpClient3 diff --git a/sbt-iw-projects/src/main/scala/works/iterative/sbt/IWMaterialsVersions.scala b/sbt-iw-projects/src/main/scala/works/iterative/sbt/IWMaterialsVersions.scala index 8e3eecb..305c290 100644 --- a/sbt-iw-projects/src/main/scala/works/iterative/sbt/IWMaterialsVersions.scala +++ b/sbt-iw-projects/src/main/scala/works/iterative/sbt/IWMaterialsVersions.scala @@ -3,41 +3,42 @@ object IWMaterialsVersions { val akka = "2.6.18" val akkaHttp = "10.4.0" - val cats = "2.12.0" - val caliban = "2.9.0" - val chimney = "1.4.0" - val ducktape = "0.2.5" + val cats = "2.13.0" + val caliban = "2.9.2" + val chimney = "1.7.3" + val ducktape = "0.2.7" val elastic4s = "7.12.4" - val http4s = "0.23.28" - val http4sBlaze = "0.23.16" - val http4sPac4J = "4.1.0" - val laminar = "17.1.0" + val http4s = "0.23.30" + val http4sBlaze = "0.23.17" + val http4sPac4J = "5.0.0" + val laminar = "17.2.0" val laminext = "0.17.0" - val logbackClassic = "1.5.6" - val pac4j = "5.4.2" + val logbackClassic = "1.5.17" + val magnum = "2.0.0-M1" + val pac4j = "6.0.3" val play = "2.8.18" val playJson = "2.9.3" - val quill = "4.8.5" + val quill = "4.8.6" val scalaJsMacroTaskExecutor = "1.1.1" val scalaJsJavaSecureRandom = "1.0.0" - val scalaTest = "3.2.14" + val scalatags = "0.13.1" + val scalaTest = "3.2.19" val slick = "3.3.3" - val sttpClient3 = "3.10.0" - val sttpClient4 = "4.0.0-M18" + val sttpClient3 = "3.10.3" + val sttpClient4 = "4.0.0-RC1" val support = "1.7.0" - val tapir = "1.11.5" - val urlDsl = "0.6.2" - val waypoint = "8.0.1" - val zio = "2.1.9" - val zioConfig = "4.0.2" - val zioCli = "0.5.0" + val tapir = "1.11.16" + val urlDsl = "0.7.0" + val waypoint = "9.0.0" + val zio = "2.1.16" + val zioConfig = "4.0.3" + val zioCli = "0.7.0" val zioInteropCats = "23.1.0.3" val zioInteropReactiveStreams = "2.0.2" - val zioJson = "0.7.3" - val zioLogging = "2.3.1" + val zioJson = "0.7.36" + val zioLogging = "2.5.0" val zioNIO = "2.0.2" - val zioOptics = "0.2.2" - val zioPrelude = "1.0.0-RC31" + val zioPrelude = "1.0.0-RC39" val zioQuery = "0.7.6" - val zioSchema = "1.5.0" + val zioSchema = "1.6.3" } diff --git a/sbt-iw-plugin-presets/src/main/scala/works/iterative/sbt/IWPluginPresets.scala b/sbt-iw-plugin-presets/src/main/scala/works/iterative/sbt/IWPluginPresets.scala index 0973caa..c607948 100644 --- a/sbt-iw-plugin-presets/src/main/scala/works/iterative/sbt/IWPluginPresets.scala +++ b/sbt-iw-plugin-presets/src/main/scala/works/iterative/sbt/IWPluginPresets.scala @@ -25,7 +25,7 @@ val addLocales: Def.Setting[?] = addSbtPlugin("io.github.cquiroz" % "sbt-locales" % "4.5.0") val addScalaJS: Def.Setting[?] = - addSbtPlugin("org.scala-js" % "sbt-scalajs" % "1.17.0") + addSbtPlugin("org.scala-js" % "sbt-scalajs" % "1.18.2") val addScalaJSCrossproject: Def.Setting[?] = addSbtPlugin( "org.portable-scala" % "sbt-scalajs-crossproject" % scalaJSCrossprojectVersion @@ -60,11 +60,11 @@ override def projectSettings: Seq[Def.Setting[?]] = Seq( addSbtPlugin("com.timushev.sbt" % "sbt-updates" % "0.6.4"), addSbtPlugin("org.typelevel" % "sbt-tpolecat" % "0.5.2"), - addSbtPlugin("org.scalameta" % "sbt-scalafmt" % "2.5.2"), - addSbtPlugin("com.github.sbt" % "sbt-native-packager" % "1.10.4"), + addSbtPlugin("org.scalameta" % "sbt-scalafmt" % "2.5.4"), + addSbtPlugin("com.github.sbt" % "sbt-native-packager" % "1.11.1"), addSbtPlugin("com.github.sbt" % "sbt-git" % "2.0.1"), - addSbtPlugin("ch.epfl.scala" % "sbt-scalafix" % "0.13.0"), - addSbtPlugin("com.eed3si9n" % "sbt-buildinfo" % "0.12.0"), + addSbtPlugin("ch.epfl.scala" % "sbt-scalafix" % "0.14.2"), + addSbtPlugin("com.eed3si9n" % "sbt-buildinfo" % "0.13.1"), addSbtPlugin( "org.portable-scala" % "sbt-scalajs-crossproject" % scalaJSCrossprojectVersion ) diff --git a/sbt-iw-projects/src/main/scala/works/iterative/sbt/IWMaterialsDeps.scala b/sbt-iw-projects/src/main/scala/works/iterative/sbt/IWMaterialsDeps.scala index d83254d..127b966 100644 --- a/sbt-iw-projects/src/main/scala/works/iterative/sbt/IWMaterialsDeps.scala +++ b/sbt-iw-projects/src/main/scala/works/iterative/sbt/IWMaterialsDeps.scala @@ -57,8 +57,6 @@ lazy val zioInteropReactiveStreams: Def.Setting[_] = zioLib("interop-reactivestreams", V.zioInteropReactiveStreams) lazy val zioNIO: Def.Setting[_] = zioLib("nio", V.zioNIO) - lazy val zioOptics: Def.Setting[_] = zioLib("optics", V.zioOptics) - lazy val zioQuery: Def.Setting[_] = zioLib("query", V.zioQuery) lazy val zioCli: Def.Setting[_] = zioLib("cli", V.zioCli) lazy val quill: Def.Setting[_] = @@ -129,6 +127,12 @@ lazy val tapirCats: Def.Setting[_] = tapirLib("cats") lazy val tapirZIOHttp4sServer: Def.Setting[_] = tapirLib("http4s-server-zio") + lazy val magnum: Def.Setting[_] = libraryDependencies += "com.augustnagro" % "magnum_3" % V.magnum + lazy val magnumZIO: Def.Setting[_] = libraryDependencies += "com.augustnagro" % "magnumzio_3" % V.magnum + lazy val magnumPG: Def.Setting[_] = libraryDependencies += "com.augustnagro" % "magnumpg_3" % V.magnum + + lazy val scalatags: Def.Setting[_] = libraryDependencies += "com.lihaoyi" %%% "scalatags" % V.scalatags + private val sttpClient3Org = "com.softwaremill.sttp.client3" def sttpClient3Lib(name: String): Def.Setting[_] = libraryDependencies += sttpClient3Org %%% name % V.sttpClient3 diff --git a/sbt-iw-projects/src/main/scala/works/iterative/sbt/IWMaterialsVersions.scala b/sbt-iw-projects/src/main/scala/works/iterative/sbt/IWMaterialsVersions.scala index 8e3eecb..305c290 100644 --- a/sbt-iw-projects/src/main/scala/works/iterative/sbt/IWMaterialsVersions.scala +++ b/sbt-iw-projects/src/main/scala/works/iterative/sbt/IWMaterialsVersions.scala @@ -3,41 +3,42 @@ object IWMaterialsVersions { val akka = "2.6.18" val akkaHttp = "10.4.0" - val cats = "2.12.0" - val caliban = "2.9.0" - val chimney = "1.4.0" - val ducktape = "0.2.5" + val cats = "2.13.0" + val caliban = "2.9.2" + val chimney = "1.7.3" + val ducktape = "0.2.7" val elastic4s = "7.12.4" - val http4s = "0.23.28" - val http4sBlaze = "0.23.16" - val http4sPac4J = "4.1.0" - val laminar = "17.1.0" + val http4s = "0.23.30" + val http4sBlaze = "0.23.17" + val http4sPac4J = "5.0.0" + val laminar = "17.2.0" val laminext = "0.17.0" - val logbackClassic = "1.5.6" - val pac4j = "5.4.2" + val logbackClassic = "1.5.17" + val magnum = "2.0.0-M1" + val pac4j = "6.0.3" val play = "2.8.18" val playJson = "2.9.3" - val quill = "4.8.5" + val quill = "4.8.6" val scalaJsMacroTaskExecutor = "1.1.1" val scalaJsJavaSecureRandom = "1.0.0" - val scalaTest = "3.2.14" + val scalatags = "0.13.1" + val scalaTest = "3.2.19" val slick = "3.3.3" - val sttpClient3 = "3.10.0" - val sttpClient4 = "4.0.0-M18" + val sttpClient3 = "3.10.3" + val sttpClient4 = "4.0.0-RC1" val support = "1.7.0" - val tapir = "1.11.5" - val urlDsl = "0.6.2" - val waypoint = "8.0.1" - val zio = "2.1.9" - val zioConfig = "4.0.2" - val zioCli = "0.5.0" + val tapir = "1.11.16" + val urlDsl = "0.7.0" + val waypoint = "9.0.0" + val zio = "2.1.16" + val zioConfig = "4.0.3" + val zioCli = "0.7.0" val zioInteropCats = "23.1.0.3" val zioInteropReactiveStreams = "2.0.2" - val zioJson = "0.7.3" - val zioLogging = "2.3.1" + val zioJson = "0.7.36" + val zioLogging = "2.5.0" val zioNIO = "2.0.2" - val zioOptics = "0.2.2" - val zioPrelude = "1.0.0-RC31" + val zioPrelude = "1.0.0-RC39" val zioQuery = "0.7.6" - val zioSchema = "1.5.0" + val zioSchema = "1.6.3" } diff --git a/sbt-iw-projects/src/main/scala/works/iterative/sbt/IWScalaProjectPlugin.scala b/sbt-iw-projects/src/main/scala/works/iterative/sbt/IWScalaProjectPlugin.scala index e03221a..3563d51 100644 --- a/sbt-iw-projects/src/main/scala/works/iterative/sbt/IWScalaProjectPlugin.scala +++ b/sbt-iw-projects/src/main/scala/works/iterative/sbt/IWScalaProjectPlugin.scala @@ -14,9 +14,9 @@ override def trigger: PluginTrigger = allRequirements object autoImport { - val scala2Version = "2.13.15" - val scala3LTSVersion = "3.3.4" - val scala3Version = "3.5.2" + val scala2Version = "2.13.16" + val scala3LTSVersion = "3.3.5" + val scala3Version = "3.6.3" def publishToIW: Seq[Def.Setting[?]] = inThisBuild( List( publishTo := { diff --git a/sbt-iw-plugin-presets/src/main/scala/works/iterative/sbt/IWPluginPresets.scala b/sbt-iw-plugin-presets/src/main/scala/works/iterative/sbt/IWPluginPresets.scala index 0973caa..c607948 100644 --- a/sbt-iw-plugin-presets/src/main/scala/works/iterative/sbt/IWPluginPresets.scala +++ b/sbt-iw-plugin-presets/src/main/scala/works/iterative/sbt/IWPluginPresets.scala @@ -25,7 +25,7 @@ val addLocales: Def.Setting[?] = addSbtPlugin("io.github.cquiroz" % "sbt-locales" % "4.5.0") val addScalaJS: Def.Setting[?] = - addSbtPlugin("org.scala-js" % "sbt-scalajs" % "1.17.0") + addSbtPlugin("org.scala-js" % "sbt-scalajs" % "1.18.2") val addScalaJSCrossproject: Def.Setting[?] = addSbtPlugin( "org.portable-scala" % "sbt-scalajs-crossproject" % scalaJSCrossprojectVersion @@ -60,11 +60,11 @@ override def projectSettings: Seq[Def.Setting[?]] = Seq( addSbtPlugin("com.timushev.sbt" % "sbt-updates" % "0.6.4"), addSbtPlugin("org.typelevel" % "sbt-tpolecat" % "0.5.2"), - addSbtPlugin("org.scalameta" % "sbt-scalafmt" % "2.5.2"), - addSbtPlugin("com.github.sbt" % "sbt-native-packager" % "1.10.4"), + addSbtPlugin("org.scalameta" % "sbt-scalafmt" % "2.5.4"), + addSbtPlugin("com.github.sbt" % "sbt-native-packager" % "1.11.1"), addSbtPlugin("com.github.sbt" % "sbt-git" % "2.0.1"), - addSbtPlugin("ch.epfl.scala" % "sbt-scalafix" % "0.13.0"), - addSbtPlugin("com.eed3si9n" % "sbt-buildinfo" % "0.12.0"), + addSbtPlugin("ch.epfl.scala" % "sbt-scalafix" % "0.14.2"), + addSbtPlugin("com.eed3si9n" % "sbt-buildinfo" % "0.13.1"), addSbtPlugin( "org.portable-scala" % "sbt-scalajs-crossproject" % scalaJSCrossprojectVersion ) diff --git a/sbt-iw-projects/src/main/scala/works/iterative/sbt/IWMaterialsDeps.scala b/sbt-iw-projects/src/main/scala/works/iterative/sbt/IWMaterialsDeps.scala index d83254d..127b966 100644 --- a/sbt-iw-projects/src/main/scala/works/iterative/sbt/IWMaterialsDeps.scala +++ b/sbt-iw-projects/src/main/scala/works/iterative/sbt/IWMaterialsDeps.scala @@ -57,8 +57,6 @@ lazy val zioInteropReactiveStreams: Def.Setting[_] = zioLib("interop-reactivestreams", V.zioInteropReactiveStreams) lazy val zioNIO: Def.Setting[_] = zioLib("nio", V.zioNIO) - lazy val zioOptics: Def.Setting[_] = zioLib("optics", V.zioOptics) - lazy val zioQuery: Def.Setting[_] = zioLib("query", V.zioQuery) lazy val zioCli: Def.Setting[_] = zioLib("cli", V.zioCli) lazy val quill: Def.Setting[_] = @@ -129,6 +127,12 @@ lazy val tapirCats: Def.Setting[_] = tapirLib("cats") lazy val tapirZIOHttp4sServer: Def.Setting[_] = tapirLib("http4s-server-zio") + lazy val magnum: Def.Setting[_] = libraryDependencies += "com.augustnagro" % "magnum_3" % V.magnum + lazy val magnumZIO: Def.Setting[_] = libraryDependencies += "com.augustnagro" % "magnumzio_3" % V.magnum + lazy val magnumPG: Def.Setting[_] = libraryDependencies += "com.augustnagro" % "magnumpg_3" % V.magnum + + lazy val scalatags: Def.Setting[_] = libraryDependencies += "com.lihaoyi" %%% "scalatags" % V.scalatags + private val sttpClient3Org = "com.softwaremill.sttp.client3" def sttpClient3Lib(name: String): Def.Setting[_] = libraryDependencies += sttpClient3Org %%% name % V.sttpClient3 diff --git a/sbt-iw-projects/src/main/scala/works/iterative/sbt/IWMaterialsVersions.scala b/sbt-iw-projects/src/main/scala/works/iterative/sbt/IWMaterialsVersions.scala index 8e3eecb..305c290 100644 --- a/sbt-iw-projects/src/main/scala/works/iterative/sbt/IWMaterialsVersions.scala +++ b/sbt-iw-projects/src/main/scala/works/iterative/sbt/IWMaterialsVersions.scala @@ -3,41 +3,42 @@ object IWMaterialsVersions { val akka = "2.6.18" val akkaHttp = "10.4.0" - val cats = "2.12.0" - val caliban = "2.9.0" - val chimney = "1.4.0" - val ducktape = "0.2.5" + val cats = "2.13.0" + val caliban = "2.9.2" + val chimney = "1.7.3" + val ducktape = "0.2.7" val elastic4s = "7.12.4" - val http4s = "0.23.28" - val http4sBlaze = "0.23.16" - val http4sPac4J = "4.1.0" - val laminar = "17.1.0" + val http4s = "0.23.30" + val http4sBlaze = "0.23.17" + val http4sPac4J = "5.0.0" + val laminar = "17.2.0" val laminext = "0.17.0" - val logbackClassic = "1.5.6" - val pac4j = "5.4.2" + val logbackClassic = "1.5.17" + val magnum = "2.0.0-M1" + val pac4j = "6.0.3" val play = "2.8.18" val playJson = "2.9.3" - val quill = "4.8.5" + val quill = "4.8.6" val scalaJsMacroTaskExecutor = "1.1.1" val scalaJsJavaSecureRandom = "1.0.0" - val scalaTest = "3.2.14" + val scalatags = "0.13.1" + val scalaTest = "3.2.19" val slick = "3.3.3" - val sttpClient3 = "3.10.0" - val sttpClient4 = "4.0.0-M18" + val sttpClient3 = "3.10.3" + val sttpClient4 = "4.0.0-RC1" val support = "1.7.0" - val tapir = "1.11.5" - val urlDsl = "0.6.2" - val waypoint = "8.0.1" - val zio = "2.1.9" - val zioConfig = "4.0.2" - val zioCli = "0.5.0" + val tapir = "1.11.16" + val urlDsl = "0.7.0" + val waypoint = "9.0.0" + val zio = "2.1.16" + val zioConfig = "4.0.3" + val zioCli = "0.7.0" val zioInteropCats = "23.1.0.3" val zioInteropReactiveStreams = "2.0.2" - val zioJson = "0.7.3" - val zioLogging = "2.3.1" + val zioJson = "0.7.36" + val zioLogging = "2.5.0" val zioNIO = "2.0.2" - val zioOptics = "0.2.2" - val zioPrelude = "1.0.0-RC31" + val zioPrelude = "1.0.0-RC39" val zioQuery = "0.7.6" - val zioSchema = "1.5.0" + val zioSchema = "1.6.3" } diff --git a/sbt-iw-projects/src/main/scala/works/iterative/sbt/IWScalaProjectPlugin.scala b/sbt-iw-projects/src/main/scala/works/iterative/sbt/IWScalaProjectPlugin.scala index e03221a..3563d51 100644 --- a/sbt-iw-projects/src/main/scala/works/iterative/sbt/IWScalaProjectPlugin.scala +++ b/sbt-iw-projects/src/main/scala/works/iterative/sbt/IWScalaProjectPlugin.scala @@ -14,9 +14,9 @@ override def trigger: PluginTrigger = allRequirements object autoImport { - val scala2Version = "2.13.15" - val scala3LTSVersion = "3.3.4" - val scala3Version = "3.5.2" + val scala2Version = "2.13.16" + val scala3LTSVersion = "3.3.5" + val scala3Version = "3.6.3" def publishToIW: Seq[Def.Setting[?]] = inThisBuild( List( publishTo := { diff --git a/sbt-iw-projects/src/main/scala/works/iterative/sbt/VitePlugin.scala b/sbt-iw-projects/src/main/scala/works/iterative/sbt/VitePlugin.scala new file mode 100644 index 0000000..540932c --- /dev/null +++ b/sbt-iw-projects/src/main/scala/works/iterative/sbt/VitePlugin.scala @@ -0,0 +1,145 @@ +package works.iterative.sbt + +import sbt._ +import Keys._ +// import org.scalajs.sbtplugin.ScalaJSPlugin.autoImport._ +// import org.scalajs.sbtplugin.ScalaJSPlugin +import scala.sys.process._ +import sbt.nio.file.FileTreeView + +class ViteDevServer() { + private var worker: Option[Worker] = None + + def start( + workDir: File, + extraEnv: Seq[(String, String)], + logger: Logger, + globalLogger: Logger + ): Unit = + this.synchronized { + stop() + worker = Some(new Worker(workDir, extraEnv, logger, globalLogger)) + } + + def stop(): Unit = this.synchronized { + worker.foreach { w => + w.stop() + worker = None + } + } + + private class Worker( + workDir: File, + extraEnv: Seq[(String, String)], + logger: Logger, + globalLogger: Logger + ) { + logger.info("Starting vite dev server") + val command = Seq("yarn", "run", "vite", "dev") + val process = Process(command, workDir, extraEnv.toSeq: _*).run( + ProcessLogger(globalLogger.info(_), globalLogger.error(_)) + ) + + def stop(): Unit = { + logger.info("Stopping vite dev server") + process.destroy() + } + } + + override def finalize() = stop() +} + +object VitePlugin extends AutoPlugin { + override lazy val requires = empty // ScalaJSPlugin + override lazy val trigger = noTrigger + + object autoImport { + lazy val viteBuild = taskKey[File]("Vite build") + lazy val viteBasePath = taskKey[String]("Vite base path") + lazy val viteMonitoredFiles = + taskKey[Seq[File]]("Files monitored for vite build") + lazy val viteExtraEnv = + taskKey[Map[String, String]]("Extra environment for vite build") + lazy val startViteDev = taskKey[Unit]("Start vite dev mode") + lazy val stopViteDev = taskKey[Unit]("Stop vite dev mode") + } + + import autoImport._ + + private val viteDist = + SettingKey[File]("viteDist", "Vite dist directory", KeyRanks.Invisible) + + private val viteDevServer = SettingKey[ViteDevServer]( + "viteDevServer", + "Global vite dev server", + KeyRanks.Invisible + ) + + override def projectSettings = Seq( + viteDist := target.value / "vite", + viteDevServer := new ViteDevServer(), + viteBasePath := "/", + viteExtraEnv := Map.empty, + startViteDev := { + val workDir = baseDirectory.value + val extraEnv = + viteExtraEnv.value // + ("SCALAJS_OUTPUT" -> ((Compile / fastLinkJS / scalaJSLinkerOutputDirectory).value).getAbsolutePath) + val prefixedEnv = extraEnv.map { case (k, v) => + s"VITE_$k" -> v.toString + }.toSeq + val log = streams.value.log + val globalLog = state.value.globalLogging.full + val server = viteDevServer.value + server.start(workDir, prefixedEnv, log, globalLog) + }, + stopViteDev := { + viteDevServer.value.stop() + }, + viteMonitoredFiles := { + val baseGlob = baseDirectory.value.toGlob + def baseFiles(pattern: String): Glob = baseGlob / pattern + val viteConfigs = + FileTreeView.default.list( + List(baseFiles("*.json"), baseFiles("*.js"), baseFiles("*.html")) + ) + /* + val linkerDirectory = + (Compile / fullLinkJS / scalaJSLinkerOutputDirectory).value + val viteInputs = FileTreeView.default.list( + linkerDirectory.toGlob / "*.js" + ) + */ + (viteConfigs /* ++ viteInputs*/ ).map(_._1.toFile) + }, + viteBuild := { + val s = streams.value + val dist = viteDist.value + val base = viteBasePath.value + val files = viteMonitoredFiles.value + val extraEnv = + viteExtraEnv.value /* + + ("SCALAJS_MAIN_JS" -> ((Compile / fullLinkJS / scalaJSLinkerOutputDirectory).value / "main.js").getAbsolutePath) + + ("SCALAJS_OUTPUT" -> ((Compile / fullLinkJS / scalaJSLinkerOutputDirectory).value).getAbsolutePath) + */ + // We depend on fullLinkJS + // val _ = (Compile / fullLinkJS).value + def doBuild() = Process( + "yarn" :: "run" :: "vite" :: "build" :: "." :: "--outDir" :: dist.toString :: "--base" :: base :: Nil, + baseDirectory.value, + extraEnv.map { case (k, v) => s"VITE_$k" -> v.toString }.toSeq: _* + ) ! s.log + val cachedFun = FileFunction.cached(s.cacheDirectory / "vite") { _ => + doBuild() + Set(dist) + } + cachedFun(files.toSet).head + }, + (onLoad in Global) := { + (onLoad in Global).value.compose( + _.addExitHook { + viteDevServer.value.stop() + } + ) + } + ) +} diff --git a/sbt-iw-plugin-presets/src/main/scala/works/iterative/sbt/IWPluginPresets.scala b/sbt-iw-plugin-presets/src/main/scala/works/iterative/sbt/IWPluginPresets.scala index 0973caa..c607948 100644 --- a/sbt-iw-plugin-presets/src/main/scala/works/iterative/sbt/IWPluginPresets.scala +++ b/sbt-iw-plugin-presets/src/main/scala/works/iterative/sbt/IWPluginPresets.scala @@ -25,7 +25,7 @@ val addLocales: Def.Setting[?] = addSbtPlugin("io.github.cquiroz" % "sbt-locales" % "4.5.0") val addScalaJS: Def.Setting[?] = - addSbtPlugin("org.scala-js" % "sbt-scalajs" % "1.17.0") + addSbtPlugin("org.scala-js" % "sbt-scalajs" % "1.18.2") val addScalaJSCrossproject: Def.Setting[?] = addSbtPlugin( "org.portable-scala" % "sbt-scalajs-crossproject" % scalaJSCrossprojectVersion @@ -60,11 +60,11 @@ override def projectSettings: Seq[Def.Setting[?]] = Seq( addSbtPlugin("com.timushev.sbt" % "sbt-updates" % "0.6.4"), addSbtPlugin("org.typelevel" % "sbt-tpolecat" % "0.5.2"), - addSbtPlugin("org.scalameta" % "sbt-scalafmt" % "2.5.2"), - addSbtPlugin("com.github.sbt" % "sbt-native-packager" % "1.10.4"), + addSbtPlugin("org.scalameta" % "sbt-scalafmt" % "2.5.4"), + addSbtPlugin("com.github.sbt" % "sbt-native-packager" % "1.11.1"), addSbtPlugin("com.github.sbt" % "sbt-git" % "2.0.1"), - addSbtPlugin("ch.epfl.scala" % "sbt-scalafix" % "0.13.0"), - addSbtPlugin("com.eed3si9n" % "sbt-buildinfo" % "0.12.0"), + addSbtPlugin("ch.epfl.scala" % "sbt-scalafix" % "0.14.2"), + addSbtPlugin("com.eed3si9n" % "sbt-buildinfo" % "0.13.1"), addSbtPlugin( "org.portable-scala" % "sbt-scalajs-crossproject" % scalaJSCrossprojectVersion ) diff --git a/sbt-iw-projects/src/main/scala/works/iterative/sbt/IWMaterialsDeps.scala b/sbt-iw-projects/src/main/scala/works/iterative/sbt/IWMaterialsDeps.scala index d83254d..127b966 100644 --- a/sbt-iw-projects/src/main/scala/works/iterative/sbt/IWMaterialsDeps.scala +++ b/sbt-iw-projects/src/main/scala/works/iterative/sbt/IWMaterialsDeps.scala @@ -57,8 +57,6 @@ lazy val zioInteropReactiveStreams: Def.Setting[_] = zioLib("interop-reactivestreams", V.zioInteropReactiveStreams) lazy val zioNIO: Def.Setting[_] = zioLib("nio", V.zioNIO) - lazy val zioOptics: Def.Setting[_] = zioLib("optics", V.zioOptics) - lazy val zioQuery: Def.Setting[_] = zioLib("query", V.zioQuery) lazy val zioCli: Def.Setting[_] = zioLib("cli", V.zioCli) lazy val quill: Def.Setting[_] = @@ -129,6 +127,12 @@ lazy val tapirCats: Def.Setting[_] = tapirLib("cats") lazy val tapirZIOHttp4sServer: Def.Setting[_] = tapirLib("http4s-server-zio") + lazy val magnum: Def.Setting[_] = libraryDependencies += "com.augustnagro" % "magnum_3" % V.magnum + lazy val magnumZIO: Def.Setting[_] = libraryDependencies += "com.augustnagro" % "magnumzio_3" % V.magnum + lazy val magnumPG: Def.Setting[_] = libraryDependencies += "com.augustnagro" % "magnumpg_3" % V.magnum + + lazy val scalatags: Def.Setting[_] = libraryDependencies += "com.lihaoyi" %%% "scalatags" % V.scalatags + private val sttpClient3Org = "com.softwaremill.sttp.client3" def sttpClient3Lib(name: String): Def.Setting[_] = libraryDependencies += sttpClient3Org %%% name % V.sttpClient3 diff --git a/sbt-iw-projects/src/main/scala/works/iterative/sbt/IWMaterialsVersions.scala b/sbt-iw-projects/src/main/scala/works/iterative/sbt/IWMaterialsVersions.scala index 8e3eecb..305c290 100644 --- a/sbt-iw-projects/src/main/scala/works/iterative/sbt/IWMaterialsVersions.scala +++ b/sbt-iw-projects/src/main/scala/works/iterative/sbt/IWMaterialsVersions.scala @@ -3,41 +3,42 @@ object IWMaterialsVersions { val akka = "2.6.18" val akkaHttp = "10.4.0" - val cats = "2.12.0" - val caliban = "2.9.0" - val chimney = "1.4.0" - val ducktape = "0.2.5" + val cats = "2.13.0" + val caliban = "2.9.2" + val chimney = "1.7.3" + val ducktape = "0.2.7" val elastic4s = "7.12.4" - val http4s = "0.23.28" - val http4sBlaze = "0.23.16" - val http4sPac4J = "4.1.0" - val laminar = "17.1.0" + val http4s = "0.23.30" + val http4sBlaze = "0.23.17" + val http4sPac4J = "5.0.0" + val laminar = "17.2.0" val laminext = "0.17.0" - val logbackClassic = "1.5.6" - val pac4j = "5.4.2" + val logbackClassic = "1.5.17" + val magnum = "2.0.0-M1" + val pac4j = "6.0.3" val play = "2.8.18" val playJson = "2.9.3" - val quill = "4.8.5" + val quill = "4.8.6" val scalaJsMacroTaskExecutor = "1.1.1" val scalaJsJavaSecureRandom = "1.0.0" - val scalaTest = "3.2.14" + val scalatags = "0.13.1" + val scalaTest = "3.2.19" val slick = "3.3.3" - val sttpClient3 = "3.10.0" - val sttpClient4 = "4.0.0-M18" + val sttpClient3 = "3.10.3" + val sttpClient4 = "4.0.0-RC1" val support = "1.7.0" - val tapir = "1.11.5" - val urlDsl = "0.6.2" - val waypoint = "8.0.1" - val zio = "2.1.9" - val zioConfig = "4.0.2" - val zioCli = "0.5.0" + val tapir = "1.11.16" + val urlDsl = "0.7.0" + val waypoint = "9.0.0" + val zio = "2.1.16" + val zioConfig = "4.0.3" + val zioCli = "0.7.0" val zioInteropCats = "23.1.0.3" val zioInteropReactiveStreams = "2.0.2" - val zioJson = "0.7.3" - val zioLogging = "2.3.1" + val zioJson = "0.7.36" + val zioLogging = "2.5.0" val zioNIO = "2.0.2" - val zioOptics = "0.2.2" - val zioPrelude = "1.0.0-RC31" + val zioPrelude = "1.0.0-RC39" val zioQuery = "0.7.6" - val zioSchema = "1.5.0" + val zioSchema = "1.6.3" } diff --git a/sbt-iw-projects/src/main/scala/works/iterative/sbt/IWScalaProjectPlugin.scala b/sbt-iw-projects/src/main/scala/works/iterative/sbt/IWScalaProjectPlugin.scala index e03221a..3563d51 100644 --- a/sbt-iw-projects/src/main/scala/works/iterative/sbt/IWScalaProjectPlugin.scala +++ b/sbt-iw-projects/src/main/scala/works/iterative/sbt/IWScalaProjectPlugin.scala @@ -14,9 +14,9 @@ override def trigger: PluginTrigger = allRequirements object autoImport { - val scala2Version = "2.13.15" - val scala3LTSVersion = "3.3.4" - val scala3Version = "3.5.2" + val scala2Version = "2.13.16" + val scala3LTSVersion = "3.3.5" + val scala3Version = "3.6.3" def publishToIW: Seq[Def.Setting[?]] = inThisBuild( List( publishTo := { diff --git a/sbt-iw-projects/src/main/scala/works/iterative/sbt/VitePlugin.scala b/sbt-iw-projects/src/main/scala/works/iterative/sbt/VitePlugin.scala new file mode 100644 index 0000000..540932c --- /dev/null +++ b/sbt-iw-projects/src/main/scala/works/iterative/sbt/VitePlugin.scala @@ -0,0 +1,145 @@ +package works.iterative.sbt + +import sbt._ +import Keys._ +// import org.scalajs.sbtplugin.ScalaJSPlugin.autoImport._ +// import org.scalajs.sbtplugin.ScalaJSPlugin +import scala.sys.process._ +import sbt.nio.file.FileTreeView + +class ViteDevServer() { + private var worker: Option[Worker] = None + + def start( + workDir: File, + extraEnv: Seq[(String, String)], + logger: Logger, + globalLogger: Logger + ): Unit = + this.synchronized { + stop() + worker = Some(new Worker(workDir, extraEnv, logger, globalLogger)) + } + + def stop(): Unit = this.synchronized { + worker.foreach { w => + w.stop() + worker = None + } + } + + private class Worker( + workDir: File, + extraEnv: Seq[(String, String)], + logger: Logger, + globalLogger: Logger + ) { + logger.info("Starting vite dev server") + val command = Seq("yarn", "run", "vite", "dev") + val process = Process(command, workDir, extraEnv.toSeq: _*).run( + ProcessLogger(globalLogger.info(_), globalLogger.error(_)) + ) + + def stop(): Unit = { + logger.info("Stopping vite dev server") + process.destroy() + } + } + + override def finalize() = stop() +} + +object VitePlugin extends AutoPlugin { + override lazy val requires = empty // ScalaJSPlugin + override lazy val trigger = noTrigger + + object autoImport { + lazy val viteBuild = taskKey[File]("Vite build") + lazy val viteBasePath = taskKey[String]("Vite base path") + lazy val viteMonitoredFiles = + taskKey[Seq[File]]("Files monitored for vite build") + lazy val viteExtraEnv = + taskKey[Map[String, String]]("Extra environment for vite build") + lazy val startViteDev = taskKey[Unit]("Start vite dev mode") + lazy val stopViteDev = taskKey[Unit]("Stop vite dev mode") + } + + import autoImport._ + + private val viteDist = + SettingKey[File]("viteDist", "Vite dist directory", KeyRanks.Invisible) + + private val viteDevServer = SettingKey[ViteDevServer]( + "viteDevServer", + "Global vite dev server", + KeyRanks.Invisible + ) + + override def projectSettings = Seq( + viteDist := target.value / "vite", + viteDevServer := new ViteDevServer(), + viteBasePath := "/", + viteExtraEnv := Map.empty, + startViteDev := { + val workDir = baseDirectory.value + val extraEnv = + viteExtraEnv.value // + ("SCALAJS_OUTPUT" -> ((Compile / fastLinkJS / scalaJSLinkerOutputDirectory).value).getAbsolutePath) + val prefixedEnv = extraEnv.map { case (k, v) => + s"VITE_$k" -> v.toString + }.toSeq + val log = streams.value.log + val globalLog = state.value.globalLogging.full + val server = viteDevServer.value + server.start(workDir, prefixedEnv, log, globalLog) + }, + stopViteDev := { + viteDevServer.value.stop() + }, + viteMonitoredFiles := { + val baseGlob = baseDirectory.value.toGlob + def baseFiles(pattern: String): Glob = baseGlob / pattern + val viteConfigs = + FileTreeView.default.list( + List(baseFiles("*.json"), baseFiles("*.js"), baseFiles("*.html")) + ) + /* + val linkerDirectory = + (Compile / fullLinkJS / scalaJSLinkerOutputDirectory).value + val viteInputs = FileTreeView.default.list( + linkerDirectory.toGlob / "*.js" + ) + */ + (viteConfigs /* ++ viteInputs*/ ).map(_._1.toFile) + }, + viteBuild := { + val s = streams.value + val dist = viteDist.value + val base = viteBasePath.value + val files = viteMonitoredFiles.value + val extraEnv = + viteExtraEnv.value /* + + ("SCALAJS_MAIN_JS" -> ((Compile / fullLinkJS / scalaJSLinkerOutputDirectory).value / "main.js").getAbsolutePath) + + ("SCALAJS_OUTPUT" -> ((Compile / fullLinkJS / scalaJSLinkerOutputDirectory).value).getAbsolutePath) + */ + // We depend on fullLinkJS + // val _ = (Compile / fullLinkJS).value + def doBuild() = Process( + "yarn" :: "run" :: "vite" :: "build" :: "." :: "--outDir" :: dist.toString :: "--base" :: base :: Nil, + baseDirectory.value, + extraEnv.map { case (k, v) => s"VITE_$k" -> v.toString }.toSeq: _* + ) ! s.log + val cachedFun = FileFunction.cached(s.cacheDirectory / "vite") { _ => + doBuild() + Set(dist) + } + cachedFun(files.toSet).head + }, + (onLoad in Global) := { + (onLoad in Global).value.compose( + _.addExitHook { + viteDevServer.value.stop() + } + ) + } + ) +} diff --git a/src/main/g8/default.properties b/src/main/g8/default.properties index f4ffe8f..0beac7a 100644 --- a/src/main/g8/default.properties +++ b/src/main/g8/default.properties @@ -1,4 +1,4 @@ name = iw-project -iw_version = 0.3.23 -sbt_version = 1.10.6 +iw_version = 0.3.25 +sbt_version = 1.10.10 java_version = 21 diff --git a/sbt-iw-plugin-presets/src/main/scala/works/iterative/sbt/IWPluginPresets.scala b/sbt-iw-plugin-presets/src/main/scala/works/iterative/sbt/IWPluginPresets.scala index 0973caa..c607948 100644 --- a/sbt-iw-plugin-presets/src/main/scala/works/iterative/sbt/IWPluginPresets.scala +++ b/sbt-iw-plugin-presets/src/main/scala/works/iterative/sbt/IWPluginPresets.scala @@ -25,7 +25,7 @@ val addLocales: Def.Setting[?] = addSbtPlugin("io.github.cquiroz" % "sbt-locales" % "4.5.0") val addScalaJS: Def.Setting[?] = - addSbtPlugin("org.scala-js" % "sbt-scalajs" % "1.17.0") + addSbtPlugin("org.scala-js" % "sbt-scalajs" % "1.18.2") val addScalaJSCrossproject: Def.Setting[?] = addSbtPlugin( "org.portable-scala" % "sbt-scalajs-crossproject" % scalaJSCrossprojectVersion @@ -60,11 +60,11 @@ override def projectSettings: Seq[Def.Setting[?]] = Seq( addSbtPlugin("com.timushev.sbt" % "sbt-updates" % "0.6.4"), addSbtPlugin("org.typelevel" % "sbt-tpolecat" % "0.5.2"), - addSbtPlugin("org.scalameta" % "sbt-scalafmt" % "2.5.2"), - addSbtPlugin("com.github.sbt" % "sbt-native-packager" % "1.10.4"), + addSbtPlugin("org.scalameta" % "sbt-scalafmt" % "2.5.4"), + addSbtPlugin("com.github.sbt" % "sbt-native-packager" % "1.11.1"), addSbtPlugin("com.github.sbt" % "sbt-git" % "2.0.1"), - addSbtPlugin("ch.epfl.scala" % "sbt-scalafix" % "0.13.0"), - addSbtPlugin("com.eed3si9n" % "sbt-buildinfo" % "0.12.0"), + addSbtPlugin("ch.epfl.scala" % "sbt-scalafix" % "0.14.2"), + addSbtPlugin("com.eed3si9n" % "sbt-buildinfo" % "0.13.1"), addSbtPlugin( "org.portable-scala" % "sbt-scalajs-crossproject" % scalaJSCrossprojectVersion ) diff --git a/sbt-iw-projects/src/main/scala/works/iterative/sbt/IWMaterialsDeps.scala b/sbt-iw-projects/src/main/scala/works/iterative/sbt/IWMaterialsDeps.scala index d83254d..127b966 100644 --- a/sbt-iw-projects/src/main/scala/works/iterative/sbt/IWMaterialsDeps.scala +++ b/sbt-iw-projects/src/main/scala/works/iterative/sbt/IWMaterialsDeps.scala @@ -57,8 +57,6 @@ lazy val zioInteropReactiveStreams: Def.Setting[_] = zioLib("interop-reactivestreams", V.zioInteropReactiveStreams) lazy val zioNIO: Def.Setting[_] = zioLib("nio", V.zioNIO) - lazy val zioOptics: Def.Setting[_] = zioLib("optics", V.zioOptics) - lazy val zioQuery: Def.Setting[_] = zioLib("query", V.zioQuery) lazy val zioCli: Def.Setting[_] = zioLib("cli", V.zioCli) lazy val quill: Def.Setting[_] = @@ -129,6 +127,12 @@ lazy val tapirCats: Def.Setting[_] = tapirLib("cats") lazy val tapirZIOHttp4sServer: Def.Setting[_] = tapirLib("http4s-server-zio") + lazy val magnum: Def.Setting[_] = libraryDependencies += "com.augustnagro" % "magnum_3" % V.magnum + lazy val magnumZIO: Def.Setting[_] = libraryDependencies += "com.augustnagro" % "magnumzio_3" % V.magnum + lazy val magnumPG: Def.Setting[_] = libraryDependencies += "com.augustnagro" % "magnumpg_3" % V.magnum + + lazy val scalatags: Def.Setting[_] = libraryDependencies += "com.lihaoyi" %%% "scalatags" % V.scalatags + private val sttpClient3Org = "com.softwaremill.sttp.client3" def sttpClient3Lib(name: String): Def.Setting[_] = libraryDependencies += sttpClient3Org %%% name % V.sttpClient3 diff --git a/sbt-iw-projects/src/main/scala/works/iterative/sbt/IWMaterialsVersions.scala b/sbt-iw-projects/src/main/scala/works/iterative/sbt/IWMaterialsVersions.scala index 8e3eecb..305c290 100644 --- a/sbt-iw-projects/src/main/scala/works/iterative/sbt/IWMaterialsVersions.scala +++ b/sbt-iw-projects/src/main/scala/works/iterative/sbt/IWMaterialsVersions.scala @@ -3,41 +3,42 @@ object IWMaterialsVersions { val akka = "2.6.18" val akkaHttp = "10.4.0" - val cats = "2.12.0" - val caliban = "2.9.0" - val chimney = "1.4.0" - val ducktape = "0.2.5" + val cats = "2.13.0" + val caliban = "2.9.2" + val chimney = "1.7.3" + val ducktape = "0.2.7" val elastic4s = "7.12.4" - val http4s = "0.23.28" - val http4sBlaze = "0.23.16" - val http4sPac4J = "4.1.0" - val laminar = "17.1.0" + val http4s = "0.23.30" + val http4sBlaze = "0.23.17" + val http4sPac4J = "5.0.0" + val laminar = "17.2.0" val laminext = "0.17.0" - val logbackClassic = "1.5.6" - val pac4j = "5.4.2" + val logbackClassic = "1.5.17" + val magnum = "2.0.0-M1" + val pac4j = "6.0.3" val play = "2.8.18" val playJson = "2.9.3" - val quill = "4.8.5" + val quill = "4.8.6" val scalaJsMacroTaskExecutor = "1.1.1" val scalaJsJavaSecureRandom = "1.0.0" - val scalaTest = "3.2.14" + val scalatags = "0.13.1" + val scalaTest = "3.2.19" val slick = "3.3.3" - val sttpClient3 = "3.10.0" - val sttpClient4 = "4.0.0-M18" + val sttpClient3 = "3.10.3" + val sttpClient4 = "4.0.0-RC1" val support = "1.7.0" - val tapir = "1.11.5" - val urlDsl = "0.6.2" - val waypoint = "8.0.1" - val zio = "2.1.9" - val zioConfig = "4.0.2" - val zioCli = "0.5.0" + val tapir = "1.11.16" + val urlDsl = "0.7.0" + val waypoint = "9.0.0" + val zio = "2.1.16" + val zioConfig = "4.0.3" + val zioCli = "0.7.0" val zioInteropCats = "23.1.0.3" val zioInteropReactiveStreams = "2.0.2" - val zioJson = "0.7.3" - val zioLogging = "2.3.1" + val zioJson = "0.7.36" + val zioLogging = "2.5.0" val zioNIO = "2.0.2" - val zioOptics = "0.2.2" - val zioPrelude = "1.0.0-RC31" + val zioPrelude = "1.0.0-RC39" val zioQuery = "0.7.6" - val zioSchema = "1.5.0" + val zioSchema = "1.6.3" } diff --git a/sbt-iw-projects/src/main/scala/works/iterative/sbt/IWScalaProjectPlugin.scala b/sbt-iw-projects/src/main/scala/works/iterative/sbt/IWScalaProjectPlugin.scala index e03221a..3563d51 100644 --- a/sbt-iw-projects/src/main/scala/works/iterative/sbt/IWScalaProjectPlugin.scala +++ b/sbt-iw-projects/src/main/scala/works/iterative/sbt/IWScalaProjectPlugin.scala @@ -14,9 +14,9 @@ override def trigger: PluginTrigger = allRequirements object autoImport { - val scala2Version = "2.13.15" - val scala3LTSVersion = "3.3.4" - val scala3Version = "3.5.2" + val scala2Version = "2.13.16" + val scala3LTSVersion = "3.3.5" + val scala3Version = "3.6.3" def publishToIW: Seq[Def.Setting[?]] = inThisBuild( List( publishTo := { diff --git a/sbt-iw-projects/src/main/scala/works/iterative/sbt/VitePlugin.scala b/sbt-iw-projects/src/main/scala/works/iterative/sbt/VitePlugin.scala new file mode 100644 index 0000000..540932c --- /dev/null +++ b/sbt-iw-projects/src/main/scala/works/iterative/sbt/VitePlugin.scala @@ -0,0 +1,145 @@ +package works.iterative.sbt + +import sbt._ +import Keys._ +// import org.scalajs.sbtplugin.ScalaJSPlugin.autoImport._ +// import org.scalajs.sbtplugin.ScalaJSPlugin +import scala.sys.process._ +import sbt.nio.file.FileTreeView + +class ViteDevServer() { + private var worker: Option[Worker] = None + + def start( + workDir: File, + extraEnv: Seq[(String, String)], + logger: Logger, + globalLogger: Logger + ): Unit = + this.synchronized { + stop() + worker = Some(new Worker(workDir, extraEnv, logger, globalLogger)) + } + + def stop(): Unit = this.synchronized { + worker.foreach { w => + w.stop() + worker = None + } + } + + private class Worker( + workDir: File, + extraEnv: Seq[(String, String)], + logger: Logger, + globalLogger: Logger + ) { + logger.info("Starting vite dev server") + val command = Seq("yarn", "run", "vite", "dev") + val process = Process(command, workDir, extraEnv.toSeq: _*).run( + ProcessLogger(globalLogger.info(_), globalLogger.error(_)) + ) + + def stop(): Unit = { + logger.info("Stopping vite dev server") + process.destroy() + } + } + + override def finalize() = stop() +} + +object VitePlugin extends AutoPlugin { + override lazy val requires = empty // ScalaJSPlugin + override lazy val trigger = noTrigger + + object autoImport { + lazy val viteBuild = taskKey[File]("Vite build") + lazy val viteBasePath = taskKey[String]("Vite base path") + lazy val viteMonitoredFiles = + taskKey[Seq[File]]("Files monitored for vite build") + lazy val viteExtraEnv = + taskKey[Map[String, String]]("Extra environment for vite build") + lazy val startViteDev = taskKey[Unit]("Start vite dev mode") + lazy val stopViteDev = taskKey[Unit]("Stop vite dev mode") + } + + import autoImport._ + + private val viteDist = + SettingKey[File]("viteDist", "Vite dist directory", KeyRanks.Invisible) + + private val viteDevServer = SettingKey[ViteDevServer]( + "viteDevServer", + "Global vite dev server", + KeyRanks.Invisible + ) + + override def projectSettings = Seq( + viteDist := target.value / "vite", + viteDevServer := new ViteDevServer(), + viteBasePath := "/", + viteExtraEnv := Map.empty, + startViteDev := { + val workDir = baseDirectory.value + val extraEnv = + viteExtraEnv.value // + ("SCALAJS_OUTPUT" -> ((Compile / fastLinkJS / scalaJSLinkerOutputDirectory).value).getAbsolutePath) + val prefixedEnv = extraEnv.map { case (k, v) => + s"VITE_$k" -> v.toString + }.toSeq + val log = streams.value.log + val globalLog = state.value.globalLogging.full + val server = viteDevServer.value + server.start(workDir, prefixedEnv, log, globalLog) + }, + stopViteDev := { + viteDevServer.value.stop() + }, + viteMonitoredFiles := { + val baseGlob = baseDirectory.value.toGlob + def baseFiles(pattern: String): Glob = baseGlob / pattern + val viteConfigs = + FileTreeView.default.list( + List(baseFiles("*.json"), baseFiles("*.js"), baseFiles("*.html")) + ) + /* + val linkerDirectory = + (Compile / fullLinkJS / scalaJSLinkerOutputDirectory).value + val viteInputs = FileTreeView.default.list( + linkerDirectory.toGlob / "*.js" + ) + */ + (viteConfigs /* ++ viteInputs*/ ).map(_._1.toFile) + }, + viteBuild := { + val s = streams.value + val dist = viteDist.value + val base = viteBasePath.value + val files = viteMonitoredFiles.value + val extraEnv = + viteExtraEnv.value /* + + ("SCALAJS_MAIN_JS" -> ((Compile / fullLinkJS / scalaJSLinkerOutputDirectory).value / "main.js").getAbsolutePath) + + ("SCALAJS_OUTPUT" -> ((Compile / fullLinkJS / scalaJSLinkerOutputDirectory).value).getAbsolutePath) + */ + // We depend on fullLinkJS + // val _ = (Compile / fullLinkJS).value + def doBuild() = Process( + "yarn" :: "run" :: "vite" :: "build" :: "." :: "--outDir" :: dist.toString :: "--base" :: base :: Nil, + baseDirectory.value, + extraEnv.map { case (k, v) => s"VITE_$k" -> v.toString }.toSeq: _* + ) ! s.log + val cachedFun = FileFunction.cached(s.cacheDirectory / "vite") { _ => + doBuild() + Set(dist) + } + cachedFun(files.toSet).head + }, + (onLoad in Global) := { + (onLoad in Global).value.compose( + _.addExitHook { + viteDevServer.value.stop() + } + ) + } + ) +} diff --git a/src/main/g8/default.properties b/src/main/g8/default.properties index f4ffe8f..0beac7a 100644 --- a/src/main/g8/default.properties +++ b/src/main/g8/default.properties @@ -1,4 +1,4 @@ name = iw-project -iw_version = 0.3.23 -sbt_version = 1.10.6 +iw_version = 0.3.25 +sbt_version = 1.10.10 java_version = 21 diff --git a/version.sbt b/version.sbt index 898b9f8..0a4eacd 100644 --- a/version.sbt +++ b/version.sbt @@ -1 +1 @@ -ThisBuild / version := "0.3.25-SNAPSHOT" +ThisBuild / version := "0.3.25"