Newer
Older
iw-project-support / sbt-iw-plugin-presets / src / main / scala / works / iterative / sbt / IWPluginPresets.scala
package works.iterative.sbt

import sbt.*
import sbt.Keys.*

object IWPluginPresets extends AutoPlugin {
    override def trigger = allRequirements

    val scalaJSCrossprojectVersion = "1.3.2"

    object autoImport {
        val addIWProjects: Seq[Def.Setting[?]] = Seq(
            addSbtPlugin(
                "works.iterative.sbt" % "sbt-iw-projects" % BuildInfo.version
            ),
            resolvers += "IW releases" at "https://dig.iterative.works/maven/releases",
            resolvers += "IW snapshots" at "https://dig.iterative.works/maven/snapshots"
        )
        val addScalablyTypedConverter: Def.Setting[?] =
            addSbtPlugin(
                "org.scalablytyped.converter" % "sbt-converter" % "1.0.0-beta44"
            )
        val addTzdb: Def.Setting[?] =
            addSbtPlugin("io.github.cquiroz" % "sbt-tzdb" % "4.3.0")
        val addLocales: Def.Setting[?] =
            addSbtPlugin("io.github.cquiroz" % "sbt-locales" % "4.4.0")
        val addScalaJS: Def.Setting[?] =
            addSbtPlugin("org.scala-js" % "sbt-scalajs" % "1.16.0")
        val addScalaJSCrossproject: Def.Setting[?] =
            addSbtPlugin(
                "org.portable-scala" % "sbt-scalajs-crossproject" % scalaJSCrossprojectVersion
            )
        val addSbtScalaJSMap: Def.Setting[?] =
            addSbtPlugin(
                "com.thoughtworks.sbt-scala-js-map" % "sbt-scala-js-map" % "4.1.1"
            )
        val addScalaJSSupport: Seq[Def.Setting[?]] = Seq(
            // TODO: remove after the scalajs-locales scala-xml dep will stop being in conflict with the rest
            // It already uses scala-xml 2.0.1, but the rest is still on 1.3.x
            evictionErrorLevel := Level.Warn,
            addScalaJS,
            addScalaJSCrossproject,
            addTzdb,
            addLocales,
            addScalablyTypedConverter
        ) ++ (if (file(".git").isFile) { // only add sbt-scala-js-map if we're in a git repo
                  Seq(addSbtScalaJSMap)
              } else Seq.empty)
        val addLagom: Def.Setting[?] =
            addSbtPlugin("com.lightbend.lagom" % "lagom-sbt-plugin" % "1.6.7")
        val addPlay: Def.Setting[?] =
            addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.8.18")
        val addPlaySupport: Seq[Def.Setting[?]] = Seq(
            addPlay,
            addSbtPlugin("com.typesafe.sbt" % "sbt-gzip" % "2.0.0"),
            addSbtPlugin("com.typesafe.sbt" % "sbt-digest" % "2.0.0")
        )
    }

    override def projectSettings: Seq[Def.Setting[?]] = Seq(
        addSbtPlugin("com.timushev.sbt" % "sbt-updates" % "0.6.4"),
        addSbtPlugin("org.typelevel" % "sbt-tpolecat" % "0.5.1"),
        addSbtPlugin("org.scalameta" % "sbt-scalafmt" % "2.5.2"),
        addSbtPlugin("com.github.sbt" % "sbt-native-packager" % "1.10.0"),
        addSbtPlugin("com.github.sbt" % "sbt-git" % "2.0.1"),
        addSbtPlugin("ch.epfl.scala" % "sbt-scalafix" % "0.12.1"),
        addSbtPlugin("com.eed3si9n" % "sbt-buildinfo" % "0.12.0"),
        addSbtPlugin(
            "org.portable-scala" % "sbt-scalajs-crossproject" % scalaJSCrossprojectVersion
        )
    )
}