Skip to content

Migrate build to sbt-typelevel #4143

Closed
@armanbilge

Description

@armanbilge

@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.

  1. 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.

  2. 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.

  3. 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:

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions