From c2218c8abed3f2fcefb7330e56f332c2ba648865 Mon Sep 17 00:00:00 2001 From: Katrix Date: Sun, 11 Sep 2022 22:24:43 +0200 Subject: [PATCH] Initial commit --- .gitignore | 37 +++++ .scalafmt.conf | 33 +++++ build.sbt | 291 +++++++++++++++++++++++++++++++++++++++ project/build.properties | 1 + project/plugins.sbt | 5 + project/unidoc.sbt | 1 + scalafmt | Bin 0 -> 32094 bytes scalafmt.bat | 97 +++++++++++++ 8 files changed, 465 insertions(+) create mode 100644 .gitignore create mode 100644 .scalafmt.conf create mode 100644 build.sbt create mode 100644 project/build.properties create mode 100644 project/plugins.sbt create mode 100644 project/unidoc.sbt create mode 100755 scalafmt create mode 100644 scalafmt.bat diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..1a8aaa0c --- /dev/null +++ b/.gitignore @@ -0,0 +1,37 @@ +Thumbs.db + +#eclipse +.project +.classpath +.metadata +*.launch +org.* +bin +gradle.prefs + +#idea +*.iml +*.ipr +*.iws +.idea +out + +#gradle +build +.gradle + +#runtime +run + +#sbt +target +project/target +/.jvmopts +.bsp + +#mac +.DS_Store + +#travis +/travis-deploy-key +/travis-deploy-key.pub diff --git a/.scalafmt.conf b/.scalafmt.conf new file mode 100644 index 00000000..c0038ffe --- /dev/null +++ b/.scalafmt.conf @@ -0,0 +1,33 @@ +version = "3.0.1" +project.git = true +preset = defaultWithAlign +maxColumn = 120 +newlines.implicitParamListModifierPrefer = before + +rewrite.rules = [ + RedundantBraces, + RedundantParens, + SortModifiers, + PreferCurlyFors, + Imports +] +rewrite.redundantBraces.maxLines = 3 +rewrite.redundantBraces.stringInterpolation = true +rewrite.redundantBraces.generalExpressions = false + +rewrite.imports.sort = ascii +rewrite.imports.groups = [ + ["""scala\.language\..*"""], + ["""java\..*""", """javax\..*"""], + ["""scala\..*"""], +] + +literals.long = Upper +literals.float = Upper +literals.double = Upper +literals.hexDigits = Upper +literals.scientific = Upper + +docstrings.oneline = fold +docstrings.blankFirstLine = "yes" +docstrings.wrapMaxColumn = 80 diff --git a/build.sbt b/build.sbt new file mode 100644 index 00000000..6a12a883 --- /dev/null +++ b/build.sbt @@ -0,0 +1,291 @@ +import sbtcrossproject.CrossPlugin.autoImport.{CrossType, crossProject} + +lazy val akkaVersion = "2.6.18" +lazy val akkaHttpVersion = "10.2.8" +lazy val circeVersion = "0.13.0" +lazy val ackCordVersion = "0.19.0-SNAPSHOT" + +lazy val commonSettings = Seq( + scalaVersion := "2.13.8", + crossScalaVersions := Seq("2.12.12", scalaVersion.value), + organization := "net.katsstuff", + scalacOptions ++= Seq( + "-deprecation", + "-feature", + "-unchecked", + "-Xlint", + "-Ywarn-dead-code" + ), + scalacOptions ++= ( + if (scalaVersion.value.startsWith("2.12")) + Seq("-Yno-adapted-args", "-Ywarn-unused-import", "-Ypartial-unification", "-language:higherKinds") + else Nil + ), + libraryDependencies += compilerPlugin("org.typelevel" %% "kind-projector" % "0.13.2" cross CrossVersion.full), + publishTo := sonatypePublishToBundle.value +) + +lazy val publishSettings = Seq( + publishMavenStyle := true, + Test / publishArtifact := false, + licenses := Seq("MIT" -> url("http://opensource.org/licenses/MIT")), + scmInfo := Some( + ScmInfo( + url("https://github.com/Katrix/AckCord"), + "scm:git:github.com/Katrix/AckCord", + Some("scm:git:github.com/Katrix/AckCord") + ) + ), + moduleName := { + val old = moduleName.value + s"ackcord-$old" + }, + homepage := Some(url("https://github.com/Katrix/AckCord")), + developers := List(Developer("Katrix", "Kathryn Frid", "katrix97@hotmail.com", url("http://katsstuff.net/"))), + autoAPIMappings := true +) + +lazy val noPublishSettings = Seq(publish := {}, publishLocal := {}, publishArtifact := false) + +lazy val data = crossProject(JSPlatform, JVMPlatform) + .crossType(CrossType.Pure) + .settings( + commonSettings, + publishSettings, + name := "data", + version := ackCordVersion, + libraryDependencies += "com.chuusai" %%% "shapeless" % "2.3.8", + libraryDependencies ++= Seq( + "io.circe" %%% "circe-core" % circeVersion, + "io.circe" %%% "circe-parser" % circeVersion, + "io.circe" %%% "circe-generic-extras" % circeVersion, + "io.circe" %%% "circe-derivation" % "0.13.0-M5" + ), + libraryDependencies ++= Seq( + "com.beachape" %%% "enumeratum" % "1.7.0", + "com.beachape" %%% "enumeratum-circe" % "1.7.0" + ), + description := "AckCord is a Scala library using Akka for the Discord API giving as much freedom as possible to the user" + ) + +lazy val dataJVM = data.jvm +lazy val dataJS = data.js + +lazy val gatewayData = crossProject(JSPlatform, JVMPlatform) + .crossType(CrossType.Pure) + .settings( + commonSettings, + publishSettings, + name := "gateway-data", + version := ackCordVersion + ) + .dependsOn(data) + +lazy val gatewayDataJVM = gatewayData.jvm +lazy val gatewayDataJS = gatewayData.js + +lazy val requests = project + .settings( + commonSettings, + publishSettings, + name := "requests", + version := ackCordVersion, + description := "The request module of AckCord", + libraryDependencies ++= Seq( + "com.typesafe.akka" %% "akka-actor-typed" % akkaVersion, + "com.typesafe.akka" %% "akka-stream-typed" % akkaVersion, + "com.typesafe.akka" %% "akka-http-core" % akkaHttpVersion + ), + Compile / doc / scalacOptions ++= Seq("-skip-packages", "akka.pattern") + ) + .dependsOn(dataJVM) + +lazy val gateway = project + .settings( + commonSettings, + publishSettings, + name := "gateway", + version := ackCordVersion, + description := "The gateway module of AckCord", + libraryDependencies ++= Seq( + "com.typesafe.akka" %% "akka-actor-typed" % akkaVersion, + "com.typesafe.akka" %% "akka-stream-typed" % akkaVersion, + "com.typesafe.akka" %% "akka-http-core" % akkaHttpVersion + ), + Compile / doc / scalacOptions ++= Seq("-skip-packages", "akka.pattern") + ) + .dependsOn(gatewayDataJVM) + +lazy val voice = project + .settings( + commonSettings, + publishSettings, + name := "voice", + version := ackCordVersion, + description := "The voice websocket module of AckCord", + libraryDependencies ++= Seq( + "com.typesafe.akka" %% "akka-actor-typed" % akkaVersion, + "com.typesafe.akka" %% "akka-stream-typed" % akkaVersion, + "com.typesafe.akka" %% "akka-http-core" % akkaHttpVersion + ), + libraryDependencies += "com.typesafe.akka" %% "akka-stream-testkit" % akkaVersion % Test, + Compile / doc / scalacOptions ++= Seq("-skip-packages", "com.iwebpp:akka.pattern") + ) + .dependsOn(dataJVM) + +lazy val commands = project + .settings( + commonSettings, + publishSettings, + name := "commands", + version := ackCordVersion, + libraryDependencies += "org.typelevel" %% "cats-mtl-core" % "0.7.1", + description := "ackCord-commands provides a Play like commands framework for AckCord" + ) + .dependsOn(requests) + +val interactions = project + .settings( + commonSettings, + publishSettings, + name := "interactions", + version := ackCordVersion, + description := "ackCord-interactions provides a high level API to interact with Discord's interactions" + ) + .dependsOn(requests) + +lazy val core = project + .settings( + commonSettings, + publishSettings, + name := "core", + version := ackCordVersion, + libraryDependencies ++= Seq( + "com.typesafe.akka" %% "akka-testkit" % akkaVersion % Test, + "org.scalatest" %% "scalatest" % "3.2.11" % Test + ), + description := "AckCord is a Scala library using Akka for the Discord API giving as much freedom as possible to the user" + ) + .dependsOn(requests, gateway) + +lazy val lavaplayerCore = project + .settings( + commonSettings, + publishSettings, + name := "lavaplayer-core", + version := ackCordVersion, + resolvers += Resolver.JCenterRepository, + resolvers += "dv8tion" at "https://m2.dv8tion.net/releases", + libraryDependencies += "com.sedmelluq" % "lavaplayer" % "1.3.78", + description := "ackCord-lavaplayer-core provides the glue code between ackcord-core and ackcord-lavaplayer" + ) + .dependsOn(core, voice) + +lazy val ackCord = project + .settings( + commonSettings, + publishSettings, + name := "ackcord", + version := ackCordVersion, + libraryDependencies += "com.typesafe.akka" %% "akka-slf4j" % akkaVersion, + moduleName := "ackcord", + description := "A higher level extension to AckCord so you don't have to deal with the lower level stuff as much", + Compile / doc / scalacOptions ++= Seq("-skip-packages", "akka.pattern") + ) + .dependsOn(core, lavaplayerCore, commands, interactions) + +lazy val exampleCore = project + .settings( + commonSettings, + noPublishSettings, + name := "exampleCore", + version := "1.0", + Compile / mainClass := Some("ackcord.examplecore.Example"), + libraryDependencies += "com.typesafe.akka" %% "akka-slf4j" % akkaVersion, + libraryDependencies += "ch.qos.logback" % "logback-classic" % "1.2.10" + ) + .dependsOn(core, lavaplayerCore, commands, interactions) + +lazy val example = project + .settings( + commonSettings, + noPublishSettings, + name := "example", + version := "1.0", + libraryDependencies += "ch.qos.logback" % "logback-classic" % "1.2.10" + ) + .dependsOn(ackCord) + +lazy val docsMappingsAPIDir = settingKey[String]("Name of subdirectory in site target directory for api docs") + +lazy val docs = project + .enablePlugins(MicrositesPlugin, ScalaUnidocPlugin, GhpagesPlugin) + .settings(commonSettings: _*) + .settings( + micrositeName := "AckCord", + micrositeAuthor := "Katrix", + micrositeDescription := "A Discord library built for flexibility and speed", + micrositeDocumentationUrl := "/api/ackcord", + micrositeDocumentationLabelDescription := "ScalaDoc", + micrositeHomepage := "https://ackcord.katsstuff.net", + micrositeGithubOwner := "Katrix", + micrositeGithubRepo := "AckCord", + micrositeGitterChannel := false, + micrositeShareOnSocial := false, + micrositeTheme := "pattern", + ghpagesCleanSite / excludeFilter := "CNAME", + micrositePushSiteWith := GitHub4s, + micrositeGithubToken := sys.env.get("GITHUB_TOKEN"), + Compile / scalacOptions ++= Seq("-language:higherKinds"), + autoAPIMappings := true, + ScalaUnidoc / unidoc / unidocProjectFilter := inProjects( + dataJVM, + gatewayDataJVM, + requests, + gateway, + voice, + interactions, + core, + commands, + lavaplayerCore, + ackCord + ), + Compile / doc / scalacOptions ++= Seq("-skip-packages", "com.iwebpp:akka.pattern"), + docsMappingsAPIDir := "api", + addMappingsToSiteDir(ScalaUnidoc / packageDoc / mappings, docsMappingsAPIDir), + //mdoc / fork := true, + mdocIn := sourceDirectory.value / "main" / "mdoc", + //ScalaUnidoc / unidoc / fork := true, + ScalaUnidoc / unidoc / scalacOptions ++= Seq( + "-doc-source-url", + "https://github.com/Katrix/Ackcord/tree/master€{FILE_PATH}.scala", + "-sourcepath", + (LocalRootProject / baseDirectory).value.getAbsolutePath + ) + ) + .dependsOn(ackCord) + +lazy val ackCordRoot = project + .in(file(".")) + .aggregate( + dataJVM, + dataJS, + gatewayDataJVM, + gatewayDataJS, + requests, + gateway, + voice, + interactions, + core, + commands, + lavaplayerCore, + ackCord, + exampleCore, + example + ) + .settings( + commonSettings, + publishSettings, + noPublishSettings, + version := ackCordVersion + ) diff --git a/project/build.properties b/project/build.properties new file mode 100644 index 00000000..57f05799 --- /dev/null +++ b/project/build.properties @@ -0,0 +1 @@ +sbt.version = 1.5.4 \ No newline at end of file diff --git a/project/plugins.sbt b/project/plugins.sbt new file mode 100644 index 00000000..2295f3a6 --- /dev/null +++ b/project/plugins.sbt @@ -0,0 +1,5 @@ +logLevel := Level.Warn +addSbtPlugin("org.scala-js" % "sbt-scalajs" % "1.9.0") +addSbtPlugin("org.portable-scala" % "sbt-scalajs-crossproject" % "1.1.0") +addSbtPlugin("com.47deg" % "sbt-microsites" % "1.3.4") +addSbtPlugin("org.xerial.sbt" % "sbt-sonatype" % "3.9.7") diff --git a/project/unidoc.sbt b/project/unidoc.sbt new file mode 100644 index 00000000..a394be19 --- /dev/null +++ b/project/unidoc.sbt @@ -0,0 +1 @@ +addSbtPlugin("com.eed3si9n" % "sbt-unidoc" % "0.4.3") diff --git a/scalafmt b/scalafmt new file mode 100755 index 0000000000000000000000000000000000000000..63b899ccd0a633fec10b8f63ef1cc063c27cede2 GIT binary patch literal 32094 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 T@W~VGhY$CMjT_+j