Skip to content

radically simplify the build #1456

@SethTisue

Description

@SethTisue

Dale and I were talking today and Dale was pushing a bit on whether it makes sense for the Scala 2 community build to continue in its present form.

It has come up repeatedly in the past that most of the time, we don't actually need dbuild's dependency-rewiring capability. Now that Scala 2.14 isn't happening and Scala 2 will remain binary compatible forever, it would be fine to simply build every project's HEAD using the current Scala nightly. This would catch nearly all of the same Scala regressions that the current build catches.

Where that scheme breaks down is for dependencies that use CrossVersion.full(/CrossVersion.patch), such as kind-projector, scalameta, genjavadoc, at al. You can't build cats on a nightly such as Scala 2.13.7-bin-abcd123 without first publishing kind-projector for that same nightly. You can override the dependency to just use the 2.13.6 version of kind-projector, but there are times where we actually did change something in the compiler so the previous versions of things don't work anymore, and even if we didn't, there are situations involving transitive dependencies (often involving scalameta in particular) where getting everything to use the old versions is pretty hard.

So the new idea is one I don't think we've had before: we could cut the core community build down to only build compiler plugins. Then all downstream projects would pull all of their other dependencies from Maven Central, rather than using dbuild-built binaries.

This would have the following advantages:

  • It would be far less fragile and far easier to maintain.
  • Included projects would be far more up-to-date, on average. We wouldn't need to freeze and/or fork so many projects.
  • We could include any project we wanted, even if its dependencies aren't already in the build.

Note that if we do this, we could also consider publishing kind-projector, scalameta, genjavadoc, et al to a publicly available resolver. Then almost anyone who wants to test Scala 2 nightly builds in their own CI would be able to do so, whereas today, often they can't.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions