Skip to content

Commit

Permalink
Merge pull request #131 from blast-hardcheese/modularized-deps
Browse files Browse the repository at this point in the history
Modularized deps
  • Loading branch information
blast-hardcheese authored Oct 19, 2021
2 parents 444b8cc + cd6e11b commit 72e109c
Show file tree
Hide file tree
Showing 4 changed files with 50 additions and 33 deletions.
16 changes: 14 additions & 2 deletions modules/core/build.sbt
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,20 @@ description := "Core of sbt-guardrail plugin, for custom forks of guardrail"
addCompilerPlugin("org.typelevel" %% "kind-projector" % "0.10.3")

// Dependencies
libraryDependencies += "dev.guardrail" %% "guardrail" % "0.65.4"
libraryDependencies += "dev.guardrail" %% "guardrail-cli" % "0.65.1" // Temporary, until guardrailRunner gets moved into core
libraryDependencies ++= Seq(
"dev.guardrail" %% "guardrail" % "0.65.5",
"dev.guardrail" %% "guardrail-cli" % "0.65.2",
"dev.guardrail" %% "guardrail-core" % "0.65.4",
"dev.guardrail" %% "guardrail-java-async-http" % "0.65.2",
"dev.guardrail" %% "guardrail-java-dropwizard" % "0.65.2",
"dev.guardrail" %% "guardrail-java-spring-mvc" % "0.65.2",
"dev.guardrail" %% "guardrail-java-support" % "0.65.2",
"dev.guardrail" %% "guardrail-scala-akka-http" % "0.65.2",
"dev.guardrail" %% "guardrail-scala-dropwizard" % "0.65.2",
"dev.guardrail" %% "guardrail-scala-endpoints" % "0.65.2",
"dev.guardrail" %% "guardrail-scala-http4s" % "0.65.4",
"dev.guardrail" %% "guardrail-scala-support" % "0.65.2"
)

buildInfoKeys := Seq[BuildInfoKey](organization, version)
buildInfoPackage := "dev.guardrail.sbt"
52 changes: 26 additions & 26 deletions modules/core/src/main/scala/AbstractCodegenPlugin.scala
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,15 @@ package sbt

import _root_.sbt.{Keys => SbtKeys, _}
import _root_.sbt.plugins.JvmPlugin
import dev.guardrail.runner.GuardrailRunner
import dev.guardrail.terms.protocol.PropertyRequirement
import dev.guardrail.{
Args => ArgsImpl,
CodegenTarget => CodegenTargetImpl,
Context => ContextImpl
}

trait AbstractGuardrailPlugin { self: AutoPlugin =>
def runner: Map[String,cats.data.NonEmptyList[dev.guardrail.Args]] => dev.guardrail.Target[List[java.nio.file.Path]]
trait AbstractGuardrailPlugin extends GuardrailRunner { self: AutoPlugin =>
override def requires = JvmPlugin
override def trigger = allRequirements

Expand Down Expand Up @@ -170,34 +170,34 @@ trait AbstractGuardrailPlugin { self: AutoPlugin =>
}

private def cachedGuardrailTask(projectName: String, scope: String)(kind: String, streams: _root_.sbt.Keys.TaskStreams)(tasks: List[(String, Args)], sources: Seq[java.io.File]) = {
import _root_.sbt.util.CacheImplicits._

if (BuildInfo.organization == "com.twilio" && tasks.nonEmpty) {
streams.log.warn(s"""${projectName} / ${scope}: sbt-guardrail has changed organizations! Please change "com.twilio" to "dev.guardrail" to continue receiving updates""")
}

def calcResult() =
GuardrailAnalysis(BuildInfo.version, Tasks.guardrailTask(runner)(tasks, sources.head).toList)

val cachedResult = Tracked.lastOutput[Unit, GuardrailAnalysis](streams.cacheStoreFactory.sub("guardrail").sub(kind).make("last")) {
(_, prev) =>
val tracker = Tracked.inputChanged[String, GuardrailAnalysis](streams.cacheStoreFactory.sub("guardrail").sub(kind).make("input")) {
(changed: Boolean, in: String) =>
prev match {
case None => calcResult()
case Some(prevResult) =>
if (changed) {
calcResult()
} else prevResult
}
import _root_.sbt.util.CacheImplicits._

if (BuildInfo.organization == "com.twilio" && tasks.nonEmpty) {
streams.log.warn(s"""${projectName} / ${scope}: sbt-guardrail has changed organizations! Please change "com.twilio" to "dev.guardrail" to continue receiving updates""")
}

def calcResult() =
GuardrailAnalysis(BuildInfo.version, Tasks.guardrailTask(guardrailRunner)(tasks, sources.head).toList)

val cachedResult = Tracked.lastOutput[Unit, GuardrailAnalysis](streams.cacheStoreFactory.sub("guardrail").sub(kind).make("last")) {
(_, prev) =>
val tracker = Tracked.inputChanged[String, GuardrailAnalysis](streams.cacheStoreFactory.sub("guardrail").sub(kind).make("input")) {
(changed: Boolean, in: String) =>
prev match {
case None => calcResult()
case Some(prevResult) =>
if (changed) {
calcResult()
} else prevResult
}
}

val inputs = tasks.flatMap(_._2.specPath.map( x => (FileInfo.hash(new java.io.File(x)))))
val inputs = tasks.flatMap(_._2.specPath.map( x => (FileInfo.hash(new java.io.File(x)))))

tracker(new String(inputs.flatMap(_.hash).toArray))
}
tracker(new String(inputs.flatMap(_.hash).toArray))
}

cachedResult(()).products
cachedResult(()).products
}

def scopedSettings(name: String, scope: Configuration) = Seq(
Expand Down
11 changes: 8 additions & 3 deletions modules/core/src/main/scala/Tasks.scala
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,15 @@ import dev.guardrail.{Args => ArgsImpl}
import scala.io.AnsiColor
import scala.meta._
import _root_.io.swagger.parser.SwaggerParserExtension
import java.nio.file.Path
import java.io.File

class CodegenFailedException extends FeedbackProvidedException

object Tasks {
def guardrailTask(
runner: Map[String,cats.data.NonEmptyList[dev.guardrail.Args]] => dev.guardrail.Target[List[java.nio.file.Path]]
)(tasks: List[Types.Args], sourceDir: java.io.File): Seq[java.io.File] = {
runner: Map[String,NonEmptyList[ArgsImpl]] => Target[List[Path]]
)(tasks: List[Types.Args], sourceDir: File): Seq[File] = {
// swagger-parser uses SPI to find extensions on the classpath (by default, only the OAPI2 -> OAPI3 converter)
// See https://github.com/swagger-api/swagger-parser#extensions
// That being said, Scala's classloader seems to have some issues finding SPI resources:
Expand All @@ -38,6 +40,9 @@ object Tasks {
case MissingArg(args, Error.ArgName(arg)) =>
println(s"${AnsiColor.RED}Missing argument:${AnsiColor.RESET} ${AnsiColor.BOLD}${arg}${AnsiColor.RESET} (In block ${args})")
throw new CodegenFailedException()
case MissingDependency(name) =>
println(s"""${AnsiColor.RED}Missing dependency:${AnsiColor.RESET} ${AnsiColor.BOLD}libraryDependencies += "dev.guardrail" %% "${name}" % "<check latest version>"${AnsiColor.RESET}""")
throw new CodegenFailedException()
case NoArgsSpecified =>
List.empty
case NoFramework =>
Expand Down Expand Up @@ -77,6 +82,6 @@ object Tasks {
}

def watchSources(tasks: List[Types.Args]): Seq[WatchSource] = {
tasks.flatMap(_._2.specPath.map(new java.io.File(_)).map(WatchSource(_))).toSeq
tasks.flatMap(_._2.specPath.map(new File(_)).map(WatchSource(_))).toSeq
}
}
4 changes: 2 additions & 2 deletions src/main/scala/dev/guardrail/swagger/sbt/CodegenPlugin.scala
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
package dev.guardrail
package sbt

import dev.guardrail.cli.CLI
import dev.guardrail.generators.GeneratorMappings

import _root_.sbt.AutoPlugin

object GuardrailPlugin extends AutoPlugin with AbstractGuardrailPlugin {
def runner = CLI.guardrailRunner
def languages = GeneratorMappings.defaultLanguages

object autoImport extends guardrailAutoImport
}

0 comments on commit 72e109c

Please sign in to comment.