From d6c60a157cccffe0a5c5710fc4d2a959594a8684 Mon Sep 17 00:00:00 2001 From: Nabil Abdel-Hafeez <7283535+987Nabil@users.noreply.github.com> Date: Wed, 11 Sep 2024 20:04:25 +0200 Subject: [PATCH 1/2] Setup Mima --- .github/workflows/ci.yml | 25 +++++++++++++++++++++++++ aliases.sbt | 4 +++- build.sbt | 9 +++++++++ project/MimaSettings.scala | 18 ++++++++++++++++++ project/plugins.sbt | 1 + 5 files changed, 56 insertions(+), 1 deletion(-) create mode 100644 project/MimaSettings.scala diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 0d3a10dd5f..21ef8c76b1 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -219,6 +219,31 @@ jobs: steps: - uses: release-drafter/release-drafter@v5 + mima_check: + name: Mima Check + if: ${{ github.event_name == 'pull_request' }} + strategy: + matrix: + os: [ubuntu-latest] + scala: [2.13.10] + java: [temurin@21] + runs-on: ${{ matrix.os }} + steps: + - name: Setup Java (temurin@21) + if: matrix.java == 'temurin@21' + uses: actions/setup-java@v4 + with: + distribution: temurin + java-version: 21 + cache: sbt + + - name: Checkout current branch (full) + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - run: sbt mimaChecks + unsafeRunScoverage: name: Unsafe Scoverage strategy: diff --git a/aliases.sbt b/aliases.sbt index 1a952200cf..802211368b 100644 --- a/aliases.sbt +++ b/aliases.sbt @@ -3,9 +3,11 @@ addCommandAlias("fmtCheck", "scalafmtCheck; Test / scalafmtCheck; sFixCheck") addCommandAlias("sFix", "scalafix OrganizeImports; Test / scalafix OrganizeImports") addCommandAlias("sFixCheck", "scalafix --check OrganizeImports; Test / scalafix --check OrganizeImports") addCommandAlias("generateMediaTypes", "zioHttpTools/runMain zio.http.tools.GenerateMediaTypes") +addCommandAlias("mimaChecks", "zioHttpJVM/mimaReportBinaryIssues; zioHttpHtmx/mimaReportBinaryIssues" + ) onLoadMessage := { - import scala.Console._ + import scala.Console.* def header(text: String): String = s"${RED}$text${RESET}" def item(text: String): String = s"${GREEN}> ${CYAN}$text${RESET}" diff --git a/build.sbt b/build.sbt index 51eca7c909..7db46dfcf7 100644 --- a/build.sbt +++ b/build.sbt @@ -33,6 +33,13 @@ ThisBuild / githubWorkflowAddedJobs := steps = List(WorkflowStep.Use(UseRef.Public("release-drafter", "release-drafter", s"v${releaseDrafterVersion}"))), cond = Option("${{ github.base_ref == 'main' }}"), ), + WorkflowJob( + id = "mima_check", + name = "Mima Check", + steps = WorkflowStep.SetupJava(List(JavaSpec.temurin("21"))) :+ WorkflowStep.CheckoutFull :+ WorkflowStep.Sbt(List("mimaChecks")), + cond = Option("${{ github.event_name == 'pull_request' }}"), + javas = List(JavaSpec.temurin("21")), + ), ) ++ ScoverageWorkFlow(50, 60) ++ JmhBenchmarkWorkflow(1) ++ BenchmarkWorkFlow() ThisBuild / githubWorkflowTargetTags ++= Seq("v*") @@ -176,6 +183,7 @@ lazy val zioHttp = crossProject(JSPlatform, JVMPlatform) }, libraryDependencies ++= netty ++ Seq(`netty-incubator`), ) + .jvmSettings(MimaSettings.mimaSettings(failOnProblem = true)) .jsSettings( ThisProject / fork := false, testFrameworks := Seq(new TestFramework("zio.test.sbt.ZTestFramework")), @@ -274,6 +282,7 @@ lazy val zioHttpHtmx = (project in file("zio-http-htmx")) ), ) .dependsOn(zioHttpJVM) + .settings(MimaSettings.mimaSettings(failOnProblem = true)) lazy val zioHttpExample = (project in file("zio-http-example")) .settings(stdSettings("zio-http-example")) diff --git a/project/MimaSettings.scala b/project/MimaSettings.scala new file mode 100644 index 0000000000..1edcce1f98 --- /dev/null +++ b/project/MimaSettings.scala @@ -0,0 +1,18 @@ +import com.typesafe.tools.mima.core.* +import com.typesafe.tools.mima.core.ProblemFilters.* +import com.typesafe.tools.mima.plugin.MimaKeys.* +import sbt.{Def, *} +import sbt.Keys.{name, organization} +import sbtdynver.DynVerPlugin.autoImport.* + +object MimaSettings { + def mimaSettings(failOnProblem: Boolean): Seq[Def.Setting[?]] = + Seq( + mimaPreviousArtifacts ++= previousStableVersion.value.map(organization.value %% name.value % _).toSet, + mimaBinaryIssueFilters ++= Seq( + exclude[Problem]("zio.http.internal.*"), + exclude[Problem]("zio.http.codec.internal.*"), + ), + mimaFailOnProblem := failOnProblem + ) +} diff --git a/project/plugins.sbt b/project/plugins.sbt index 0295afcde9..737041f101 100644 --- a/project/plugins.sbt +++ b/project/plugins.sbt @@ -14,6 +14,7 @@ addSbtPlugin("org.scala-js" % "sbt-scalajs" % "1.16.0") addSbtPlugin("org.portable-scala" % "sbt-scalajs-crossproject" % "1.3.2") addSbtPlugin("com.thesamet" % "sbt-protoc" % "1.0.7") addSbtPlugin("com.thesamet" % "sbt-protoc-gen-project" % "0.1.8") +addSbtPlugin("com.typesafe" % "sbt-mima-plugin" % "1.1.4") addSbtPlugin("org.jetbrains.scala" % "sbt-ide-settings" % "1.1.2") From e029fd6183934903660118a2d869c32baee6ce2c Mon Sep 17 00:00:00 2001 From: Nabil Abdel-Hafeez <7283535+987Nabil@users.noreply.github.com> Date: Thu, 12 Sep 2024 09:38:39 +0200 Subject: [PATCH 2/2] Setup Mima --- .github/workflows/ci.yml | 10 +++++----- build.sbt | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 21ef8c76b1..35ee3d8b82 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -229,6 +229,11 @@ jobs: java: [temurin@21] runs-on: ${{ matrix.os }} steps: + - name: Checkout current branch (full) + uses: actions/checkout@v4 + with: + fetch-depth: 0 + - name: Setup Java (temurin@21) if: matrix.java == 'temurin@21' uses: actions/setup-java@v4 @@ -237,11 +242,6 @@ jobs: java-version: 21 cache: sbt - - name: Checkout current branch (full) - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - run: sbt mimaChecks unsafeRunScoverage: diff --git a/build.sbt b/build.sbt index 7db46dfcf7..cc48774a24 100644 --- a/build.sbt +++ b/build.sbt @@ -36,7 +36,7 @@ ThisBuild / githubWorkflowAddedJobs := WorkflowJob( id = "mima_check", name = "Mima Check", - steps = WorkflowStep.SetupJava(List(JavaSpec.temurin("21"))) :+ WorkflowStep.CheckoutFull :+ WorkflowStep.Sbt(List("mimaChecks")), + steps = WorkflowStep.CheckoutFull +: WorkflowStep.SetupJava(List(JavaSpec.temurin("21"))) :+ WorkflowStep.Sbt(List("mimaChecks")), cond = Option("${{ github.event_name == 'pull_request' }}"), javas = List(JavaSpec.temurin("21")), ),