sbt-typelevel icon indicating copy to clipboard operation
sbt-typelevel copied to clipboard

tlIsScala3 may not be set correctly within GIthub Workflow commands

Open quincyjo opened this issue 11 months ago • 0 comments

So I have a project that cross-compiles to Scala 2.13 and Scala 3.X. However, the Circe model is set to only compile to Scala 2.13 because at the time Circe did not yet have a Scala 3 release. In between working on the project was the change in the Gihub workers which dropped SBT and so I updated sbt-typelevel from 0.6.4 to 0.7.6 for the workflows to be generated with setup-sbt.

However, after pushing up some new commits, I had the workflows fail because they are trying to build or check binaries for Scala 3 for the braid-circe project.

The build.sbt as done for sbt-typelevel 0.6.4 is here: https://github.com/quincyjo/braid/blob/a34aec3e2b9f1f2cb9a4ba7000eae69e35fe667d/build.sbt And the one which passed binary check but failed to compile Scala 3 tests by adding scalaCrossVersions to the problematic project is here: https://github.com/quincyjo/braid/blob/044a5edf016d007500ea378b02bc603c332f9591/build.sbt

The workflow failed to check binary compact when running +mimaFindBinaryIssues. I tried adding a crossScalaVersions including only 2.13 and it fixed that but the Scala 3 test workflow fails while compiling the Circe model to Scala 3. After digging around with a bunch of testing I found out that tlIsScala3 is not being set correctly with how the workflow is being generated. Specifically demonstrated below within SBT:

sbt:root> ++ 3
[info] Setting Scala version to 3.3.1 on 6 projects.
[info] Excluded 5 projects, run ++ 3 -v for more details.
[info] Reapplying settings...
[info] set current project to root (in build file:/home/quincyjo/Projects/braid/)
sbt:root> tlIsScala3
[info] operations / tlIsScala3
[info]  true
[info] core / tlIsScala3
[info]  true
[info] play / tlIsScala3
[info]  true
[info] circe / tlIsScala3
[info]  false
[info] json4s / tlIsScala3
[info]  true
[info] tlIsScala3
[info]  false
sbt:root> ++ 3 tlIsScala3
[info] Setting Scala version to 3.3.1 on 6 projects.
[info] Excluded 5 projects, run ++ 3 -v for more details.
[info] Reapplying settings...
[info] set current project to root (in build file:/home/quincyjo/Projects/braid/)
[info] core / tlIsScala3
[info]  true
[info] operations / tlIsScala3
[info]  true
[info] play / tlIsScala3
[info]  true
[info] json4s / tlIsScala3
[info]  true
sbt:root> 

The above shows that when ++ 3 tlIsScala3 is ran that the circe project is being skipped but when tlIsScala3 is ran after switching to Scala 3 with ++ 3 that it is not being skipped.

The Continuous Integration / Test (ubuntu-22.04, 3, temurin@11, rootJVM) workflow is running the following, which fails while trying to compile braid-circe to Scala 3.

sbt 'project rootJVM' '++ 3' test

While running this instead works fine because tlIsScala3 works as I expected and skips the project correctly:

sbt 'project rootJVM' '++ 3 test'

It may also be worth noting that running +test also works fine, and compiles and tests all projects across 2.13 and 3 with correctly skipping braid-circe during Scala 3.

I may be setting this controlled cross-compilation up incorrectly, and I can also probably sidestep this now because circe-core now has Scala 3 artifacts. I tried changing skip properties, dependencies, and explicitly stating scalaCrossVersions for the project, but I could never get both +mimaFindBinaryIssues and sbt 'project rootJVM' '++ 3' test to run successfully. And generating the workflows with just including test within the ++ 3 command would fix this issue, if using tlIsScala3 to skip a project in this way is intended.

PS: Yes I noticed that ScalaTest was being included as a compilation dependency and was fixing that in 0.1.1.

quincyjo avatar Feb 04 '25 19:02 quincyjo