Description
@djspiewak asked me about this on Discord and I've had this on my mind. Cats is the last flagship project without a PR on typelevel/sbt-typelevel#83. Here's the plan that's been brewing.
-
This is going to be a big and careful effort, but my intention is to completely overhaul and modernize the cats build. If there's no objections, I'd like to enable CI snapshots and CI release.
-
I'd like to target this at a series/2.7 branch. Because sbt-typelevel enables MiMa for Scala 3, we will have to deal with cats 2.7.0 broke binary compatibility for Scala 3 (because mima wasn't run) #4062.
IMHO the best way forward is to release 2.7.1 which patches that one binary-break, and declare 2.7.0 "cursed". Other options I considered:
- Fix it in 2.8.0 and add a MiMa filter for the method. But this MiMa filter will chase us to the end of series/2.x and we will no longer get MiMa support to catch this mistake, which is bad.
- Fix it in 2.8.0 and don't check bincompat at all against 2.7.0. But then who knows what other binary issues could fall through the cracks.
- Fix it in 2.8.0 by splitting/duplicate the entirety of
cats/package.scala
across Scala 2/3 so we can apply new Scala 3-only techniques to fix it while also retaining bincompat to the cursed 2.7.0. As proposed by @smarter in:
Enable MiMa for Scala 3 #4063 (comment)
So would love to get ideas here, but to me a 2.7.1 patch release fixing this one thing is the safest and most convenient way forward.
-
It doesn't have to be/won't be part of the initial migration PR, but I'd like to move the Cats site onto the sbt-typelevel-site plugin which uses Laika. Comments:
- The visible changes will be purely aesthetic. Content, overall organization, and URLs will not change. I know this because I did similar migrations for e.g. the spire website which previously used the same setup the Cats site uses.
- Laika is pure-JVM, built on Cats+CE+fs2+http4s, with helpful and responsive maintainer @jenshalm. No more fussing with rubies and gems.
- All the website CI deploy infrastructure is in sbt-typelevel-site. So it will clean up the Cats build considerably.
- sbt-typelevel-based Laika sites are becoming widely adopted across the Typelevel ecosystem. So we're all in this together: any improvements to the core plugin are immediately rolled out to everyone.
- https://typelevel.org/sbt-typelevel
- https://typelevel.org/spire
- https://http4s.org
- https://typelevel.org/frameless
- https://typelevel.org/cats-collections
- https://typelevel.org/mouse
- https://typelevel.org/paiges
- https://typelevel.org/monoids
- https://typelevel.org/cats-time
- https://typelevel.org/keypool
- https://typelevel.org/vault
- https://typelevel.org/case-insensitive
- https://typelevel.org/log4cats
- https://typelevel.org/munit-cats-effect
- https://jdk-http-client.http4s.org/
- https://http4s.github.io/http4s-dom/
- https://http4s.github.io/sbt-http4s-org/
There isn't an immediate urgency for this. With Scala 3.1.2 on the horizon with the -Yscala-release
flag and pressure building to release with Scala 3+Native support, I'd like to get this done before those changes ripple through.
Thanks all, would appreciate any and all input.