To fight against SBT Case Statement Hell™ and unstable builds, the following guidelines are recommended for all Scala libraries:
-
A project must not release with snapshot dependencies, either indirect or transitive. Only snapshots may depend on snapshots. Rationale: We need repeatable builds. Snapshots are not repeatable.
-
Any library publishing under SBT crossbuild conventions commits to a prompt release for each new Scala version. Rationale: Do unto downstream projects as you would have upstream projects do unto you.
-
The release may be a new version or a new crossbuild of a previously released version. Rationale: Whatever gets it out the door quickest. You can always release again off your development branch later.
-
A release may depend on different versions of the same library for different cross builds. Rationale: You can't control when a dependency drops support for a certain version of Scala. That's fine, as long as your project still runs against the last supported version.