sbt-compatibility:
- configures sbt-mima automatically
- ensures that none of your dependencies are bumped or removed in an incompatible way.
Add to your project/plugins.sbt:
addSbtPlugin("io.github.alexarchambault.sbt" % "sbt-compatibility" % "0.0.4")sbt-compatibility depends on sbt-mima, so that you don't need to explicitly depend on it.
The compatibilityCheck key:
- runs
mimaReportBinaryIssues, - along with
compatibilityReportDependencyIssues
compatibilityReportDependencyIssues itself checks for
- removed dependencies, or
- dependencies bumped in an incompatible way,
and fails if any of these checks fails.
sbt-compatibility automatically sets mimaPreviousArtifacts, depending on the current value of version, kind of like
sbt-mima-version-check does.
The previously compatible version is computed from version the following way:
- drop any "metadata part" (anything after a
+, including the+itself)- if the resulting version contains only zeros (like
0.0.0), leavemimaPreviousArtifactsempty, - else if the resulting version does not contain a qualifier (see below), it is used in
mimaPreviousArtifacts.
- if the resulting version contains only zeros (like
- else, drop the qualifier part, that is any suffix like
-RC1or-M2or-alphaor-SNAPSHOT- if the resulting version ends with
.0,mimaPreviousArtifactsis left empty - else, the last numerical part of this version is decreased by one, and used in
mimaPreviousArtifacts.
- if the resulting version ends with
compatibilityReportDependencyIssues compares the dependencies of compatibilityPreviousArtifacts to the current ones.
By default, compatibilityPreviousArtifacts relies on mimaPreviousArtifacts from sbt-mima, so that only setting / changing mimaPreviousArtifacts is enough for both sbt-mima and sbt-compatibility.
compatibilityRules allows to specify whether some version bumps are allowed or not, like
compatibilityRules += "org.scala-lang.modules" %% "scala-xml" % "semver"The following compatility types are available:
semver: assumes the matched modules follow semantic versioning,pvp: assumes the matched modules follow package versioning policy (quite common in Scala),always: assumes all versions of the matched modules are compatible with each other,strict: requires exact matches between the wanted and the selected versions of the matched modules.
If no rule for a module is found in compatibilityRules, compatibilityDefaultReconciliation is used
as a compatibility type. It's default value is VersionCompatibility.PackVer (package versioning policy).
sbt-compatibility is funded by the Scala Center.
