diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 9a4f956..bd39795 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -13,7 +13,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - java: [ '8', '11', '17' ] + java: [ '14', '17' ] steps: - uses: actions/checkout@v3 - name: Set up JDK diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index e48daae..59b825c 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -21,7 +21,7 @@ jobs: uses: actions/setup-java@v3 with: distribution: 'zulu' - java-version: 8 + java-version: 14 server-id: ossrh server-username: SONATYPE_USERNAME server-password: SONATYPE_PASSWORD diff --git a/.github/workflows/tag-release.yml b/.github/workflows/tag-release.yml index 9860e79..2240858 100644 --- a/.github/workflows/tag-release.yml +++ b/.github/workflows/tag-release.yml @@ -9,9 +9,6 @@ on: jobs: build: runs-on: ubuntu-latest - strategy: - matrix: - java: [ '8' ] steps: - name: Publish release notes uses: release-drafter/release-drafter@v5 diff --git a/README.md b/README.md index d434419..1f779e1 100644 --- a/README.md +++ b/README.md @@ -17,6 +17,19 @@ Add to your `pom.xml`: dev.guardrail guardrail-maven-plugin Please use the latest available release! + + + + dev.guardrail + guardrail-java-dropwizard_2.13 + ... + + + dev.guardrail + guardrail-java-async-http_2.13 + ... + + diff --git a/pom.xml b/pom.xml index 452de44..9b53913 100644 --- a/pom.xml +++ b/pom.xml @@ -57,8 +57,8 @@ 3.9.4 3.5.1 UTF-8 - 2.12 - 2.12.18 + 2.13 + 2.13.12 @@ -176,53 +176,10 @@ plexus-utils ${plexus-utils.version} - - dev.guardrail - guardrail-core_2.12 - 0.75.3 - - - dev.guardrail - guardrail-java-async-http_2.12 - 0.72.0 - - - dev.guardrail - guardrail-java-support_2.12 - 0.73.1 - - - dev.guardrail - guardrail-java-dropwizard_2.12 - 0.72.0 - - - dev.guardrail - guardrail-java-spring-mvc_2.12 - 0.71.2 - - - dev.guardrail - guardrail-scala-support_2.12 - 0.75.3 - - - dev.guardrail - guardrail-scala-akka-http_2.12 - 0.76.0 - - - dev.guardrail - guardrail-scala-dropwizard_2.12 - 0.72.0 - - - dev.guardrail - guardrail-scala-http4s_2.12 - 0.76.1 + guardrail-core_${scala.compat.version} + 1.0.0-M1 @@ -231,21 +188,19 @@ net.alchim31.maven scala-maven-plugin - 4.6.3 + 4.8.1 incremental -unchecked -deprecation -feature - -Xexperimental - UTF-8 - org.spire-math - kind-projector_${scala.compat.version} - 0.9.4 + org.typelevel + kind-projector_${scala.version} + 0.13.2 @@ -271,8 +226,8 @@ maven-compiler-plugin 3.10.1 - 1.8 - 1.8 + 14 + 14 @@ -331,8 +286,8 @@ true ${project.version} - 1.8 - 1.8 + 14 + 14 0.0.1 diff --git a/src/it/codegen-java-vavr/pom.xml b/src/it/codegen-java-vavr/pom.xml index 80b7714..80ac539 100644 --- a/src/it/codegen-java-vavr/pom.xml +++ b/src/it/codegen-java-vavr/pom.xml @@ -121,8 +121,8 @@ maven-compiler-plugin 3.8.1 - 1.8 - 1.8 + 14 + 14 @@ -143,6 +143,18 @@ dev.guardrail guardrail-maven-plugin ${guardrail.plugin.version} + + + dev.guardrail + guardrail-java-dropwizard_2.13 + 1.0.0-M1 + + + dev.guardrail + guardrail-java-async-http_2.13 + 1.0.0-M1 + + generate-petstore diff --git a/src/it/codegen-java/pom.xml b/src/it/codegen-java/pom.xml index c138ff0..8417c5b 100644 --- a/src/it/codegen-java/pom.xml +++ b/src/it/codegen-java/pom.xml @@ -96,8 +96,8 @@ maven-compiler-plugin 3.8.1 - 1.8 - 1.8 + 14 + 14 @@ -118,6 +118,18 @@ dev.guardrail guardrail-maven-plugin ${guardrail.plugin.version} + + + dev.guardrail + guardrail-java-dropwizard_2.13 + 1.0.0-M1 + + + dev.guardrail + guardrail-java-async-http_2.13 + 1.0.0-M1 + + generate-petstore-client diff --git a/src/it/codegen-scala/pom.xml b/src/it/codegen-scala/pom.xml index d69ece2..e1713e0 100644 --- a/src/it/codegen-scala/pom.xml +++ b/src/it/codegen-scala/pom.xml @@ -108,14 +108,14 @@ maven-compiler-plugin 3.8.1 - 1.8 - 1.8 + 14 + 14 net.alchim31.maven scala-maven-plugin - 4.4.0 + 4.8.1 @@ -143,6 +143,13 @@ dev.guardrail guardrail-maven-plugin ${guardrail.plugin.version} + + + dev.guardrail + guardrail-scala-akka-http_2.13 + 1.0.0-M1 + + generate-petstore-client diff --git a/src/it/codegen-spring-mvc-java/pom.xml b/src/it/codegen-spring-mvc-java/pom.xml index efd7bbb..3ddf880 100644 --- a/src/it/codegen-spring-mvc-java/pom.xml +++ b/src/it/codegen-spring-mvc-java/pom.xml @@ -143,8 +143,8 @@ maven-compiler-plugin 3.8.1 - 1.8 - 1.8 + 14 + 14 @@ -165,6 +165,18 @@ dev.guardrail guardrail-maven-plugin ${guardrail.plugin.version} + + + dev.guardrail + guardrail-java-spring-mvc_2.13 + 1.0.0-M1 + + + dev.guardrail + guardrail-java-async-http_2.13 + 1.0.0-M1 + + generate-petstore-spring-mvc-server diff --git a/src/main/scala/dev/guardrail/AbstractGuardrailCodegenMojo.scala b/src/main/scala/dev/guardrail/AbstractGuardrailCodegenMojo.scala index 46dfb6d..1be9bd4 100644 --- a/src/main/scala/dev/guardrail/AbstractGuardrailCodegenMojo.scala +++ b/src/main/scala/dev/guardrail/AbstractGuardrailCodegenMojo.scala @@ -12,7 +12,7 @@ import org.apache.maven.plugins.annotations.{Component, Parameter} import org.apache.maven.project.{DefaultProjectBuildingRequest, MavenProject} import org.apache.maven.shared.transfer.artifact.DefaultArtifactCoordinate import org.apache.maven.shared.transfer.artifact.resolve.{ArtifactResolver, ArtifactResolverException} -import scala.collection.JavaConverters._ +import scala.jdk.CollectionConverters._ import scala.io.AnsiColor import scala.language.higherKinds import scala.util.control.NonFatal @@ -28,7 +28,10 @@ sealed abstract class Phase(val root: String) object Main extends Phase("main") object Test extends Phase("test") -abstract class AbstractGuardrailCodegenMojo(phase: Phase) extends AbstractMojo with GuardrailRunner { +abstract class AbstractGuardrailCodegenMojo(phase: Phase) extends AbstractMojo { + def guardrailModulePrefix: String + + val runner = new GuardrailRunner() {} @Parameter(defaultValue = "${project.build.directory}/generated-sources/guardrail-sources", property = "outputPath", required = true) def outputPath: File @@ -80,6 +83,8 @@ abstract class AbstractGuardrailCodegenMojo(phase: Phase) extends AbstractMojo w @Parameter(property = "customExtraction") var customExtraction: Boolean = _ + val scalaCompatVersion: String = "2.13" + override def execute(): Unit = { if (!outputPath.exists()) { outputPath.mkdirs() @@ -124,25 +129,25 @@ abstract class AbstractGuardrailCodegenMojo(phase: Phase) extends AbstractMojo w case x => throw new MojoExecutionException(s"Unsupported codegen type: ${x}") } - val arg = Args.empty.copy( - kind=_kind, - specPath=Some(_specPath.getCanonicalPath), - packageName=Option(packageName).map(_.trim.split('.').toList), - dtoPackage=Option(dtoPackage).toList.flatMap(_.split('.').filterNot(_.isEmpty).toList), - context=Context.empty.copy( - customExtraction=Option(customExtraction).getOrElse(Context.empty.customExtraction), - framework=Option(framework), - tracing=Option(tracing).getOrElse(Context.empty.tracing), - modules=Option(modules).fold(Context.empty.modules)(_.asScala.toList.map(_.toString)) - ), - imports=Option(customImports).fold[List[String]](List.empty)(_.asScala.toList.map(_.toString)) - ) + val arg = Args.empty + .withKind(_kind) + .withSpecPath(Some(_specPath.getCanonicalPath)) + .withPackageName(Option(packageName).map(_.trim.split('.').toList)) + .withDtoPackage(Option(dtoPackage).toList.flatMap(_.split('.').filterNot(_.isEmpty).toList)) + .withContext( + Context.empty + .withCustomExtraction(Option(customExtraction).getOrElse(Context.empty.customExtraction)) + .withFramework(Option(framework)) + .withTracing(Option(tracing).getOrElse(Context.empty.tracing)) + .withModules(Option(modules).fold(Context.empty.modules)(_.asScala.toList.map(_.toString))) + ) + .withImports(Option(customImports).fold[List[String]](List.empty)(_.asScala.toList.map(_.toString))) val logLevel = Option(System.getProperty("guardrail.loglevel")).flatMap(LogLevels.apply).getOrElse(LogLevels.Warning) getLog.info(s"Generating ${_kind} from ${specDesc}") - guardrailTask(List((_language, arg)), outputPath)(logLevel) + guardrailTask(_language, arg, outputPath)(logLevel) } catch { case NonFatal(e) => getLog.error("Failed to generate client", e) @@ -151,15 +156,9 @@ abstract class AbstractGuardrailCodegenMojo(phase: Phase) extends AbstractMojo w } type Language = String - def guardrailTask(tasks: List[(Language, Args)], sourceDir: java.io.File)(implicit logLevel: LogLevel): Seq[java.io.File] = { - val preppedTasks: Map[String, NonEmptyList[Args]] = tasks.foldLeft(Map.empty[String, NonEmptyList[Args]]) { case (acc, (language, args)) => - val prepped = args.copy(outputPath=Some(sourceDir.getPath)) - acc.updated(language, acc.get(language).fold(NonEmptyList.one(prepped))(_ :+ prepped)) - } - + def guardrailTask(language: String, arg: Args, sourceDir: java.io.File)(implicit logLevel: LogLevel): Seq[java.io.File] = { val /*(logger,*/ paths/*)*/ = - guardrailRunner - .apply(preppedTasks) + runner.guardrailRunner(language, Array(arg.withOutputPath(Some(sourceDir.getPath)))) .fold[List[java.nio.file.Path]]({ case MissingArg(args, Error.ArgName(arg)) => getLog.error(s"Missing argument: ${AnsiColor.BOLD}${arg}${AnsiColor.RESET} (In block ${args})") @@ -168,7 +167,7 @@ abstract class AbstractGuardrailCodegenMojo(phase: Phase) extends AbstractMojo w getLog.error(s"""${AnsiColor.RED}Missing dependency:${AnsiColor.RESET} |${AnsiColor.BOLD} | dev.guardrail - | ${name}_2.12 + | ${guardrailModulePrefix}-${name}_${scalaCompatVersion} | Check latest version! |${AnsiColor.RESET} |""".stripMargin) diff --git a/src/main/scala/dev/guardrail/GuardrailCodegenMojo.scala b/src/main/scala/dev/guardrail/GuardrailCodegenMojo.scala index 00d5271..ed43bb8 100644 --- a/src/main/scala/dev/guardrail/GuardrailCodegenMojo.scala +++ b/src/main/scala/dev/guardrail/GuardrailCodegenMojo.scala @@ -5,6 +5,9 @@ import org.apache.maven.plugins.annotations.{LifecyclePhase, Mojo, Parameter} @Mojo(name = "generate-sources", defaultPhase = LifecyclePhase.GENERATE_SOURCES) class GuardrailCodegenMojo extends AbstractGuardrailCodegenMojo(Main) { + + val guardrailModulePrefix: String = "guardrail" + @Parameter(defaultValue = "${project.build.directory}/generated-sources/swagger-clients", property = "outputPath", required = true) var outputPath: File = _ } diff --git a/src/main/scala/dev/guardrail/GuardrailTestCodegenMojo.scala b/src/main/scala/dev/guardrail/GuardrailTestCodegenMojo.scala index 06eccaf..fd382f6 100644 --- a/src/main/scala/dev/guardrail/GuardrailTestCodegenMojo.scala +++ b/src/main/scala/dev/guardrail/GuardrailTestCodegenMojo.scala @@ -5,6 +5,8 @@ import org.apache.maven.plugins.annotations.{LifecyclePhase, Mojo, Parameter} @Mojo(name = "generate-test-sources", defaultPhase = LifecyclePhase.GENERATE_TEST_SOURCES) class GuardrailTestCodegenMojo extends AbstractGuardrailCodegenMojo(Test) { + val guardrailModulePrefix: String = "guardrail" + @Parameter(defaultValue = "${project.build.directory}/generated-sources/swagger-test-clients", property = "outputPath", required = true) var outputPath: File = _ } diff --git a/src/main/scala/dev/guardrail/m2repo/AbstractGuardrailDeployMojo.scala b/src/main/scala/dev/guardrail/m2repo/AbstractGuardrailDeployMojo.scala index dfeec95..e87b1ae 100644 --- a/src/main/scala/dev/guardrail/m2repo/AbstractGuardrailDeployMojo.scala +++ b/src/main/scala/dev/guardrail/m2repo/AbstractGuardrailDeployMojo.scala @@ -4,7 +4,7 @@ import java.io.File import org.apache.maven.artifact.DefaultArtifact import org.apache.maven.plugin.{AbstractMojo, MojoFailureException} import org.apache.maven.plugins.annotations.Parameter -import org.apache.maven.project.MavenProject +import org.apache.maven.project.{ DefaultMavenProjectHelper, MavenProject } import org.apache.maven.artifact.versioning.VersionRange abstract class AbstractGuardrailDeployMojo extends AbstractMojo { @@ -33,13 +33,13 @@ abstract class AbstractGuardrailDeployMojo extends AbstractMojo { )({ specFileType => val handler = new GuardrailArtifactHandler( specFileType, - "/" + groupId.replaceAllLiterally(".", "/") + artifactId, + "/" + groupId.replace(".", "/") + artifactId, classifier ) val artifact = new DefaultArtifact(groupId, artifactId, VersionRange.createFromVersionSpec(project.getVersion), Constants.SCOPE, `type`, classifier, handler) artifact.setFile(specPath) artifact.setRelease(!project.getVersion.endsWith("-SNAPSHOT")) - project.addAttachedArtifact(artifact) + new DefaultMavenProjectHelper().attachArtifact(project, artifact) }) }