Skip to content

Update Scala 3 LTS to 3.3.5 #3466

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Jan 29, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
97 changes: 50 additions & 47 deletions build.sc
Original file line number Diff line number Diff line change
Expand Up @@ -504,6 +504,7 @@ trait Core extends ScalaCliCrossSbtModule
| def scala3NextRcVersion = "${Scala.scala3NextRc}"
| def scala3NextPrefix = "${Scala.scala3NextPrefix}"
| def scala3LtsPrefix = "${Scala.scala3LtsPrefix}"
| def scala3Lts = "${Scala.scala3Lts}"
|
| def workspaceDirName = "$workspaceDirName"
| def projectFileName = "$projectFileName"
Expand Down Expand Up @@ -833,12 +834,13 @@ trait Cli extends CrossSbtModule with ProtoBuildModule with CliLaunchers
|
|/** Build-time constants. Generated by mill. */
|object Constants {
| def pythonInterfaceOrg = "${Deps.pythonInterface.dep.module.organization.value}"
| def pythonInterfaceName = "${Deps.pythonInterface.dep.module.name.value}"
| def pythonInterfaceVersion = "${Deps.pythonInterface.dep.version}"
| def launcherTypeResourcePath = "${launcherTypeResourcePath.toString}"
| def defaultFilesResourcePath = "$defaultFilesResourcePath"
| def maxAmmoniteScala3Version = "${Scala.maxAmmoniteScala3Version}"
| def pythonInterfaceOrg = "${Deps.pythonInterface.dep.module.organization.value}"
| def pythonInterfaceName = "${Deps.pythonInterface.dep.module.name.value}"
| def pythonInterfaceVersion = "${Deps.pythonInterface.dep.version}"
| def launcherTypeResourcePath = "${launcherTypeResourcePath.toString}"
| def defaultFilesResourcePath = "$defaultFilesResourcePath"
| def maxAmmoniteScala3Version = "${Scala.maxAmmoniteScala3Version}"
| def maxAmmoniteScala3LtsVersion = "${Scala.maxAmmoniteScala3LtsVersion}"
|}
|""".stripMargin
if (!os.isFile(dest) || os.read(dest) != code)
Expand Down Expand Up @@ -1034,51 +1036,52 @@ trait CliIntegration extends SbtModule with ScalaCliPublishModule with HasTests
|
|/** Build-time constants. Generated by mill. */
|object Constants {
| def allJavaVersions = Seq(${Java.allJavaVersions.sorted.mkString(", ")})
| def bspVersion = "${Deps.bsp4j.dep.version}"
| def bloopMinimumJvmVersion = ${Java.minimumBloopJava}
| def minimumInternalJvmVersion = ${Java.minimumInternalJava}
| def defaultJvmVersion = ${Java.defaultJava}
| def scala212 = "${Scala.scala212}"
| def scala213 = "${Scala.scala213}"
| def scalaSnapshot213 = "${TestDeps.scalaSnapshot213}"
| def scala3LtsPrefix = "${Scala.scala3LtsPrefix}"
| def scala3Lts = "${Scala.scala3Lts}"
| def scala3NextPrefix = "${Scala.scala3NextPrefix}"
| def scala3NextRc = "${Scala.scala3NextRc}"
| def scala3NextRcAnnounced = "${Scala.scala3NextRcAnnounced}"
| def scala3Next = "${Scala.scala3Next}"
| def scala3NextAnnounced = "${Scala.scala3NextAnnounced}"
| def defaultScala = "${Scala.defaultUser}"
| def defaultScalafmtVersion = "${Deps.scalafmtCli.dep.version}"
| def maxAmmoniteScala212Version = "${Scala.maxAmmoniteScala212Version}"
| def maxAmmoniteScala213Version = "${Scala.maxAmmoniteScala213Version}"
| def maxAmmoniteScala3Version = "${Scala.maxAmmoniteScala3Version}"
| def scalaJsVersion = "${Scala.scalaJs}"
| def scalaJsCliVersion = "${Scala.scalaJsCli}"
| def scalaNativeVersion = "${Deps.Versions.scalaNative}"
| def scalaNativeVersion04 = "${Deps.Versions.scalaNative04}"
| def scalaNativeVersion05 = "${Deps.Versions.scalaNative05}"
| def allJavaVersions = Seq(${Java.allJavaVersions.sorted.mkString(", ")})
| def bspVersion = "${Deps.bsp4j.dep.version}"
| def bloopMinimumJvmVersion = ${Java.minimumBloopJava}
| def minimumInternalJvmVersion = ${Java.minimumInternalJava}
| def defaultJvmVersion = ${Java.defaultJava}
| def scala212 = "${Scala.scala212}"
| def scala213 = "${Scala.scala213}"
| def scalaSnapshot213 = "${TestDeps.scalaSnapshot213}"
| def scala3LtsPrefix = "${Scala.scala3LtsPrefix}"
| def scala3Lts = "${Scala.scala3Lts}"
| def scala3NextPrefix = "${Scala.scala3NextPrefix}"
| def scala3NextRc = "${Scala.scala3NextRc}"
| def scala3NextRcAnnounced = "${Scala.scala3NextRcAnnounced}"
| def scala3Next = "${Scala.scala3Next}"
| def scala3NextAnnounced = "${Scala.scala3NextAnnounced}"
| def defaultScala = "${Scala.defaultUser}"
| def defaultScalafmtVersion = "${Deps.scalafmtCli.dep.version}"
| def maxAmmoniteScala212Version = "${Scala.maxAmmoniteScala212Version}"
| def maxAmmoniteScala213Version = "${Scala.maxAmmoniteScala213Version}"
| def maxAmmoniteScala3Version = "${Scala.maxAmmoniteScala3Version}"
| def maxAmmoniteScala3LtsVersion = "${Scala.maxAmmoniteScala3LtsVersion}"
| def scalaJsVersion = "${Scala.scalaJs}"
| def scalaJsCliVersion = "${Scala.scalaJsCli}"
| def scalaNativeVersion = "${Deps.Versions.scalaNative}"
| def scalaNativeVersion04 = "${Deps.Versions.scalaNative04}"
| def scalaNativeVersion05 = "${Deps.Versions.scalaNative05}"
| def semanticDbJavacPluginVersion = "${Deps.semanticDbJavac.dep.version}"
| def ammoniteVersion = "${Deps.ammonite.dep.version}"
| def defaultGraalVMJavaVersion = "${deps.graalVmJavaVersion}"
| def defaultGraalVMVersion = "${deps.graalVmVersion}"
| def scalaPyVersion = "${Deps.scalaPy.dep.version}"
| def scalaPyMaxScalaNative = "${Deps.Versions.maxScalaNativeForScalaPy}"
| def bloopVersion = "${Deps.bloopRifle.dep.version}"
| def pprintVersion = "${TestDeps.pprint.dep.version}"
| def munitVersion = "${TestDeps.munit.dep.version}"
| def dockerTestImage = "${Docker.testImage}"
| def dockerAlpineTestImage = "${Docker.alpineTestImage}"
| def authProxyTestImage = "${Docker.authProxyTestImage}"
| def mostlyStaticDockerfile = "${mostlyStaticDockerfile.toString.replace(
| def ammoniteVersion = "${Deps.ammonite.dep.version}"
| def defaultGraalVMJavaVersion = "${deps.graalVmJavaVersion}"
| def defaultGraalVMVersion = "${deps.graalVmVersion}"
| def scalaPyVersion = "${Deps.scalaPy.dep.version}"
| def scalaPyMaxScalaNative = "${Deps.Versions.maxScalaNativeForScalaPy}"
| def bloopVersion = "${Deps.bloopRifle.dep.version}"
| def pprintVersion = "${TestDeps.pprint.dep.version}"
| def munitVersion = "${TestDeps.munit.dep.version}"
| def dockerTestImage = "${Docker.testImage}"
| def dockerAlpineTestImage = "${Docker.alpineTestImage}"
| def authProxyTestImage = "${Docker.authProxyTestImage}"
| def mostlyStaticDockerfile = "${mostlyStaticDockerfile.toString.replace(
"\\",
"\\\\"
)}"
| def cs = "${settings.cs().replace("\\", "\\\\")}"
| def workspaceDirName = "$workspaceDirName"
| def libsodiumVersion = "${deps.libsodiumVersion}"
| def dockerArchLinuxImage = "${TestDeps.archLinuxImage}"
| def cs = "${settings.cs().replace("\\", "\\\\")}"
| def workspaceDirName = "$workspaceDirName"
| def libsodiumVersion = "${deps.libsodiumVersion}"
| def dockerArchLinuxImage = "${TestDeps.archLinuxImage}"
|
| def toolkitVersion = "${Deps.toolkitVersion}"
| def toolkitVersionForNative04 = "${Deps.toolkitVersionForNative04}"
Expand Down
62 changes: 37 additions & 25 deletions modules/cli/src/main/scala/scala/cli/commands/repl/Repl.scala
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ import scala.build.errors.{
import scala.build.input.Inputs
import scala.build.internal.{Constants, Runner}
import scala.build.options.ScalacOpt.noDashPrefixes
import scala.build.options.{BuildOptions, JavaOpt, MaybeScalaVersion, Scope}
import scala.build.options.{BuildOptions, JavaOpt, MaybeScalaVersion, ScalaVersionUtil, Scope}
import scala.cli.commands.publish.ConfigUtil.*
import scala.cli.commands.run.Run.{
maybePrintSimpleScalacOutput,
Expand Down Expand Up @@ -54,10 +54,15 @@ object Repl extends ScalaCommand[ReplOptions] with BuildCommandHelpers {
override def sharedOptions(options: ReplOptions): Option[SharedOptions] = Some(options.shared)

override def buildOptions(ops: ReplOptions): Some[BuildOptions] =
Some(buildOptions0(ops, scala.cli.internal.Constants.maxAmmoniteScala3Version))
Some(buildOptions0(
ops,
scala.cli.internal.Constants.maxAmmoniteScala3Version,
scala.cli.internal.Constants.maxAmmoniteScala3LtsVersion
))
private[commands] def buildOptions0(
ops: ReplOptions,
maxAmmoniteScalaVer: String
maxAmmoniteScalaVer: String,
maxAmmoniteScalaLtsVer: String
): BuildOptions = {
import ops.*
import ops.sharedRepl.*
Expand All @@ -66,29 +71,36 @@ object Repl extends ScalaCommand[ReplOptions] with BuildCommandHelpers {

val ammoniteVersionOpt = ammoniteVersion.map(_.trim).filter(_.nonEmpty)
val baseOptions = shared.buildOptions().orExit(logger)

val maybeDowngradedScalaVersion = {
val isDefaultAmmonite = ammonite.contains(true) && ammoniteVersionOpt.isEmpty
extension (s: MaybeScalaVersion)
private def isLts: Boolean = s.versionOpt
.exists(v =>
v.startsWith(Constants.scala3LtsPrefix) ||
ScalaVersionUtil.scala3Lts.contains(v.toLowerCase)
)
baseOptions.scalaOptions.scalaVersion match
case Some(s)
if isDefaultAmmonite && s.isLts && s.versionOpt
.exists(_.coursierVersion > maxAmmoniteScalaLtsVer.coursierVersion) =>
logger.message(
s"Scala ${s.versionOpt.getOrElse(Constants.scala3Lts)} is not yet supported with this version of Ammonite"
)
logger.message(s"Defaulting to Scala $maxAmmoniteScalaLtsVer")
Some(MaybeScalaVersion(maxAmmoniteScalaLtsVer))
case None
if isDefaultAmmonite && maxAmmoniteScalaVer.coursierVersion < defaultScalaVersion.coursierVersion =>
logger.message(
s"Scala $defaultScalaVersion is not yet supported with this version of Ammonite"
)
logger.message(s"Defaulting to Scala $maxAmmoniteScalaVer")
Some(MaybeScalaVersion(maxAmmoniteScalaVer))
case s => s
}

baseOptions.copy(
scalaOptions = baseOptions.scalaOptions.copy(
scalaVersion = baseOptions.scalaOptions.scalaVersion
.orElse {
val shouldDowngrade = {
def needsDowngradeForAmmonite = {
import coursier.core.Version
Version(maxAmmoniteScalaVer) < Version(defaultScalaVersion)
}
ammonite.contains(true) &&
ammoniteVersionOpt.isEmpty &&
needsDowngradeForAmmonite
}
if (shouldDowngrade) {
logger.message(
s"Scala $defaultScalaVersion is not yet supported with this version of Ammonite"
)
logger.message(s"Defaulting to Scala $maxAmmoniteScalaVer")
Some(MaybeScalaVersion(maxAmmoniteScalaVer))
}
else None
}
),
scalaOptions = baseOptions.scalaOptions.copy(scalaVersion = maybeDowngradedScalaVersion),
javaOptions = baseOptions.javaOptions.copy(
javaOpts =
baseOptions.javaOptions.javaOpts ++
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
package scala.cli.commands.tests

import com.eed3si9n.expecty.Expecty.{assert => expect}
import com.eed3si9n.expecty.Expecty.assert as expect

import scala.build.internal.Constants
import scala.cli.commands.repl.{Repl, ReplOptions, SharedReplOptions}
import scala.cli.commands.shared.{SharedOptions, SharedPythonOptions}

Expand All @@ -26,8 +27,9 @@ class ReplOptionsTests extends munit.FunSuite {
ammonite = Some(true)
)
)
val maxVersion = "3.1.3"
val buildOptions = Repl.buildOptions0(replOptions, maxVersion)
val maxVersion = "3.1.3"
val maxLtsVersion = Constants.scala3Lts
val buildOptions = Repl.buildOptions0(replOptions, maxVersion, maxLtsVersion)
expect(buildOptions.scalaOptions.scalaVersion.flatMap(_.versionOpt).contains(maxVersion))
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -155,21 +155,12 @@ trait CompileScalacCompatTestDefinitions { _: CompileTestDefinitions =>
.call(cwd = root, check = false, stderr = os.Pipe)
expect(scalacRes.exitCode == cliRes.exitCode)
val scalacResErr = scalacRes.err.trim()
if (sv != Constants.scala3Lts) {
// TODO run this check for LTS when -Wconf gets fixed there
val cliResErr =
cliRes.err.trim().linesIterator.toList
// skip potentially irrelevant logs
.dropWhile(_.contains("Check"))
.mkString(System.lineSeparator())
expect(cliResErr == scalacResErr)
}
else expect(
TestUtil.removeAnsiColors(cliRes.err.trim())
.contains(
"method oldMethod in object WConfExample is deprecated since 1.0.0: This method will be removed"
)
)
val cliResErr =
cliRes.err.trim().linesIterator.toList
// skip potentially irrelevant logs
.dropWhile(_.contains("Check"))
.mkString(System.lineSeparator())
expect(cliResErr == scalacResErr)
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,10 @@ trait ReplAmmoniteTestDefinitions { _: ReplTestDefinitions =>
if s.startsWith("2.13") &&
Constants.maxAmmoniteScala213Version.coursierVersion < s.coursierVersion =>
Constants.maxAmmoniteScala213Version
case s
if s.startsWith(Constants.scala3LtsPrefix) &&
Constants.maxAmmoniteScala3LtsVersion.coursierVersion < s.coursierVersion =>
Constants.maxAmmoniteScala3LtsVersion
case s
if s.startsWith("3") &&
Constants.maxAmmoniteScala3Version.coursierVersion < s.coursierVersion =>
Expand All @@ -28,7 +32,10 @@ trait ReplAmmoniteTestDefinitions { _: ReplTestDefinitions =>
}

def actualMaxAmmoniteScalaVersion: String =
if (actualScalaVersion.startsWith("3")) Constants.maxAmmoniteScala3Version
if (actualScalaVersion.startsWith(Constants.scala3LtsPrefix))
Constants.maxAmmoniteScala3LtsVersion
else if (actualScalaVersion.startsWith(Constants.scala3NextPrefix))
Constants.maxAmmoniteScala3Version
else if (actualScalaVersion.startsWith("2.13")) Constants.maxAmmoniteScala213Version
else Constants.maxAmmoniteScala212Version

Expand Down
9 changes: 5 additions & 4 deletions project/deps.sc
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ object Scala {
def scala213 = "2.13.16"
def runnerScala3 = "3.0.2" // the newest version that is compatible with all Scala 3.x versions
def scala3LtsPrefix = "3.3" // used for the LTS version tags
def scala3Lts = s"$scala3LtsPrefix.4" // the LTS version currently used in the build
def scala3Lts = s"$scala3LtsPrefix.5" // the LTS version currently used in the build
def scala3NextPrefix = "3.6"
def scala3Next = s"$scala3NextPrefix.3" // the newest/next version of Scala
def scala3NextAnnounced =
Expand Down Expand Up @@ -54,9 +54,10 @@ object Scala {
(0 until max35).map(i => s"3.5.$i") ++ Seq(scala3Next)
}

def maxAmmoniteScala212Version = scala212
def maxAmmoniteScala213Version = "2.13.14"
def maxAmmoniteScala3Version = "3.5.1"
def maxAmmoniteScala212Version = scala212
def maxAmmoniteScala213Version = "2.13.14"
def maxAmmoniteScala3Version = "3.5.1"
def maxAmmoniteScala3LtsVersion = "3.3.4"
lazy val listMaxAmmoniteScalaVersion =
Seq(maxAmmoniteScala212Version, maxAmmoniteScala213Version, maxAmmoniteScala3Version)
lazy val listAllAmmonite = {
Expand Down