Skip to content

Commit a4c166f

Browse files
committed
add enableMimaSettings and ciCheckMima
1 parent 6278bc7 commit a4c166f

File tree

4 files changed

+60
-4
lines changed

4 files changed

+60
-4
lines changed

Diff for: project/plugins.sbt

+1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ addSbtPlugin("ch.epfl.scala" % "sbt-bloop" % "2.0.3")
55
addSbtPlugin("org.scalameta" % "sbt-scalafmt" % "2.5.2")
66
addSbtPlugin("ch.epfl.scala" % "sbt-scalafix" % "0.13.0")
77
addSbtPlugin("com.github.cb372" % "sbt-explicit-dependencies" % "0.3.1")
8+
addSbtPlugin("com.typesafe" % "sbt-mima-plugin" % "1.1.4")
89

910
// Versioning and Release Plugins
1011
addSbtPlugin("com.eed3si9n" % "sbt-buildinfo" % "0.12.0")

Diff for: zio-sbt-ci/src/main/scala/zio/sbt/ZioSbtCiPlugin.scala

+16-2
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@ object ZioSbtCiPlugin extends AutoPlugin {
8888
val ciBackgroundJobs: SettingKey[Seq[String]] = settingKey[Seq[String]]("Background jobs")
8989
val ciBuildJobs: SettingKey[Seq[Job]] = settingKey[Seq[Job]]("CI Build Jobs")
9090
val ciLintJobs: SettingKey[Seq[Job]] = settingKey[Seq[Job]]("CI Lint Jobs")
91+
val ciCheckMima: SettingKey[Boolean] = settingKey[Boolean]("Enable Lint Job: Check binary compatibility")
9192
val ciTestJobs: SettingKey[Seq[Job]] = settingKey[Seq[Job]]("CI Test Jobs")
9293
val ciUpdateReadmeJobs: SettingKey[Seq[Job]] = settingKey[Seq[Job]]("CI Update Readme Jobs")
9394
val ciReleaseJobs: SettingKey[Seq[Job]] = settingKey[Seq[Job]]("CI Release Jobs")
@@ -139,7 +140,6 @@ object ZioSbtCiPlugin extends AutoPlugin {
139140
val swapSizeGB = ciSwapSizeGB.value
140141
val setSwapSpace = SetSwapSpace.value
141142
val checkGithubWorkflow = ciCheckGithubWorkflowSteps.value
142-
val lint = Lint.value
143143

144144
Seq(
145145
Job(
@@ -152,7 +152,9 @@ object ZioSbtCiPlugin extends AutoPlugin {
152152
CacheDependencies
153153
) ++ checkGithubWorkflow.flatMap(
154154
_.flatten
155-
) ++ Seq(lint)
155+
) ++
156+
Seq(Lint.value) ++
157+
(if (ciCheckMima.value) Seq(CheckMima.value) else Seq.empty[Step.SingleStep])
156158
)
157159
)
158160
}
@@ -686,6 +688,7 @@ object ZioSbtCiPlugin extends AutoPlugin {
686688
ciDefaultJavaVersion := zio.sbt.JavaVersion.`17`,
687689
ciBuildJobs := buildJobs.value,
688690
ciLintJobs := lintJobs.value,
691+
ciCheckMima := false,
689692
ciTestJobs := testJobs.value,
690693
ciUpdateReadmeJobs := updateReadmeJobs.value,
691694
ciReleaseJobs := releaseJobs.value,
@@ -785,6 +788,17 @@ object ZioSbtCiPlugin extends AutoPlugin {
785788
)
786789
}
787790

791+
lazy val CheckMima: Def.Initialize[Step.SingleStep] = Def.setting {
792+
val backgroundJobs = ciBackgroundJobs.value
793+
val prefixJobs = makePrefixJobs(backgroundJobs)
794+
val isSingleBuild = IsSingleBuild.value
795+
796+
Step.SingleStep(
797+
name = "Check binary compatibility",
798+
run = Some(prefixJobs + "sbt " + (if (isSingleBuild) "checkMima" else "+checkMima"))
799+
)
800+
}
801+
788802
lazy val Release: Def.Initialize[SingleStep] = Def.setting {
789803
val backgroundJobs = ciBackgroundJobs.value
790804

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
/*
2+
* Copyright 2022-2023 dev.zio
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package zio.sbt
18+
19+
import com.typesafe.tools.mima.plugin.MimaKeys._
20+
import sbt.Keys._
21+
import sbt._
22+
import sbtdynver.DynVerPlugin.autoImport.previousStableVersion
23+
24+
import zio.sbt.BuildAssertions.Keys.isScalaJVM
25+
26+
trait MimaSettings {
27+
28+
lazy val checkMima: TaskKey[Unit] = taskKey[Unit]("Checks binary compatibility against previous versions.")
29+
30+
def enableMimaSettings(failOnProblem: Boolean = true): Seq[Setting[_]] =
31+
Def.settings(
32+
checkMima := { if (isScalaJVM.value && !(checkMima / skip).value) mimaReportBinaryIssues.value else () },
33+
mimaFailOnProblem := failOnProblem,
34+
mimaPreviousArtifacts := previousStableVersion.value
35+
.map(organization.value %% moduleName.value % _)
36+
.fold(Set.empty[ModuleID])(Set(_)),
37+
mimaBinaryIssueFilters := Seq()
38+
)
39+
40+
}

Diff for: zio-sbt-ecosystem/src/main/scala/zio/sbt/ZioSbtEcosystemPlugin.scala

+3-2
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ package zio.sbt
1919
import scala.collection.immutable.ListMap
2020

2121
import com.jsuereth.sbtpgp.SbtPgp.autoImport._
22+
import com.typesafe.tools.mima.plugin.MimaPlugin
2223
import de.heikoseeberger.sbtheader.HeaderPlugin
2324
import org.scalafmt.sbt.ScalafmtPlugin
2425
import sbt.Keys._
@@ -34,9 +35,9 @@ object ZioSbtEcosystemPlugin extends AutoPlugin {
3435
override def trigger = allRequirements
3536

3637
override def requires: Plugins =
37-
super.requires && HeaderPlugin && ScalafixPlugin && ScalafmtPlugin && BuildInfoPlugin && ZioSbtCrossbuildPlugin
38+
super.requires && HeaderPlugin && ScalafixPlugin && ScalafmtPlugin && BuildInfoPlugin && ZioSbtCrossbuildPlugin && MimaPlugin
3839

39-
object autoImport extends ScalaCompilerSettings {
40+
object autoImport extends ScalaCompilerSettings with MimaSettings {
4041

4142
def addCommand(commandString: List[String], name: String, description: String): Seq[Setting[_]] = {
4243
val cCommand = Commands.ComposableCommand(commandString, name, description)

0 commit comments

Comments
 (0)