Skip to content

Commit 5fcc579

Browse files
authored
Merge pull request #3650 from Gedochao/maintenance/bump-runners-to-3.3-lts
Update `runner` & `test-runner` to Scala 3.3.5 LTS (was 3.0.2)
2 parents af61dfa + 623ff3f commit 5fcc579

File tree

12 files changed

+151
-29
lines changed

12 files changed

+151
-29
lines changed

build.sc

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import $ivy.`com.lihaoyi::mill-contrib-bloop:$MILL_VERSION`
22
import $ivy.`io.get-coursier::coursier-launcher:2.1.24`
33
import $ivy.`io.github.alexarchambault.mill::mill-native-image-upload:0.1.29`
4-
import $file.project.deps, deps.{Deps, Docker, InternalDeps, Java, Scala, TestDeps}
4+
import $file.project.deps, deps.{Cli, Deps, Docker, InternalDeps, Java, Scala, TestDeps}
55
import $file.project.publish, publish.{ghOrg, ghName, ScalaCliPublishModule, organization}
66
import $file.project.settings, settings.{
77
CliLaunchers,
@@ -454,6 +454,7 @@ trait Core extends ScalaCliCrossSbtModule
454454
| def runnerOrganization = "${runner(Scala.runnerScala3).pomSettings().organization}"
455455
| def runnerModuleName = "${runner(Scala.runnerScala3).artifactName()}"
456456
| def runnerVersion = "${runner(Scala.runnerScala3).publishVersion()}"
457+
| def runnerLegacyVersion = "${Cli.runnerLegacyVersion}"
457458
| def runnerMainClass = "$runnerMainClass"
458459
|
459460
| def semanticDbPluginOrganization = "${Deps.semanticDbScalac.dep.module.organization
@@ -1060,6 +1061,9 @@ trait CliIntegration extends SbtModule with ScalaCliPublishModule with HasTests
10601061
| def maxAmmoniteScala213Version = "${Scala.maxAmmoniteScala213Version}"
10611062
| def maxAmmoniteScala3Version = "${Scala.maxAmmoniteScala3Version}"
10621063
| def maxAmmoniteScala3LtsVersion = "${Scala.maxAmmoniteScala3LtsVersion}"
1064+
| def legacyScala3Versions = Seq(${Scala.legacyScala3Versions.map(p =>
1065+
s"\"$p\""
1066+
).mkString(", ")})
10631067
| def scalaJsVersion = "${Scala.scalaJs}"
10641068
| def scalaJsCliVersion = "${Scala.scalaJsCli}"
10651069
| def scalaNativeVersion = "${Deps.Versions.scalaNative}"
@@ -1069,6 +1073,7 @@ trait CliIntegration extends SbtModule with ScalaCliPublishModule with HasTests
10691073
| def ammoniteVersion = "${Deps.ammonite.dep.version}"
10701074
| def defaultGraalVMJavaVersion = "${deps.graalVmJavaVersion}"
10711075
| def defaultGraalVMVersion = "${deps.graalVmVersion}"
1076+
| def runnerLegacyVersion = "${Cli.runnerLegacyVersion}"
10721077
| def scalaPyVersion = "${Deps.scalaPy.dep.version}"
10731078
| def scalaPyMaxScalaNative = "${Deps.Versions.maxScalaNativeForScalaPy}"
10741079
| def bloopVersion = "${Deps.bloopRifle.dep.version}"

modules/cli/src/main/scala/scala/cli/commands/fmt/FmtOptions.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import caseapp.*
44
import coursier.core.Version
55

66
import scala.build.EitherCps.{either, value}
7+
import scala.build.coursierVersion
78
import scala.build.errors.BuildException
89
import scala.build.internal.FetchExternalBinary
910
import scala.build.options.BuildOptions
@@ -16,7 +17,6 @@ import scala.cli.commands.shared.{
1617
SharedOptions
1718
}
1819
import scala.cli.commands.{Constants, tags}
19-
import scala.cli.coursierVersion
2020
import scala.util.Properties
2121

2222
// format: off

modules/cli/src/main/scala/scala/cli/commands/repl/Repl.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ import scala.cli.config.{ConfigDb, Keys}
3737
import scala.cli.packaging.Library
3838
import scala.cli.util.ArgHelpers.*
3939
import scala.cli.util.ConfigDbUtils
40-
import scala.cli.{CurrentParams, ScalaCli, coursierVersion}
40+
import scala.cli.{CurrentParams, ScalaCli}
4141
import scala.jdk.CollectionConverters.*
4242
import scala.util.Properties
4343

modules/cli/src/main/scala/scala/cli/commands/run/Run.scala

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import scala.build.errors.{BuildException, CompositeBuildException}
1616
import scala.build.input.{Inputs, ScalaCliInvokeData, SubCommand}
1717
import scala.build.internal.{Constants, Runner, ScalaJsLinkerConfig}
1818
import scala.build.internals.ConsoleUtils.ScalaCliConsole
19+
import scala.build.internals.ConsoleUtils.ScalaCliConsole.warnPrefix
1920
import scala.build.internals.EnvVar
2021
import scala.build.options.{BuildOptions, JavaOpt, PackageType, Platform, ScalacOpt, Scope}
2122
import scala.cli.CurrentParams
@@ -103,6 +104,7 @@ object Run extends ScalaCommand[RunOptions] with BuildCommandHelpers {
103104
addRunnerDependencyOpt = baseOptions.notForBloopOptions.addRunnerDependencyOpt.orElse {
104105
runMode(options) match {
105106
case _: RunMode.Spark | RunMode.HadoopJar =>
107+
logger.debug(s"$warnPrefix Skipping the runner dependency when running Spark/Hadoop.")
106108
Some(false)
107109
case RunMode.Default => None
108110
}

modules/cli/src/main/scala/scala/cli/package.scala

Lines changed: 0 additions & 7 deletions
This file was deleted.
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package scala.build
2+
3+
import coursier.core.Version
4+
5+
extension (s: String) def coursierVersion: Version = Version(s)

modules/integration/src/test/scala/scala/cli/integration/RunTestDefinitions.scala

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2400,4 +2400,18 @@ abstract class RunTestDefinitions
24002400
expect(res.out.trim() == expectedOutput)
24012401
}
24022402
}
2403+
2404+
test(
2405+
s"run a simple hello world with the runner module on the classpath and Scala $actualScalaVersion"
2406+
) {
2407+
val expectedMessage = "Hello, world!"
2408+
val legacyRunnerWarning = "Defaulting to a legacy runner module version"
2409+
TestInputs(os.rel / "script.sc" -> s"""println("$expectedMessage")""")
2410+
.fromRoot { root =>
2411+
val res = os.proc(TestUtil.cli, "run", ".", "--runner", extraOptions)
2412+
.call(cwd = root, stderr = os.Pipe)
2413+
expect(res.out.trim() == expectedMessage)
2414+
expect(!res.err.trim().contains(legacyRunnerWarning))
2415+
}
2416+
}
24032417
}

modules/integration/src/test/scala/scala/cli/integration/RunTestsDefault.scala

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,4 +187,22 @@ class RunTestsDefault extends RunTestDefinitions
187187
}
188188
}
189189
}
190+
191+
for {
192+
scalaVersion <- TestUtil.legacyScalaVersionsOnePerMinor
193+
expectedMessage = "Hello, world!"
194+
expectedWarning =
195+
s"Defaulting to a legacy runner module version: ${Constants.runnerLegacyVersion}"
196+
}
197+
test(
198+
s"run a simple hello world with the runner module on the classpath and Scala $scalaVersion (legacy)"
199+
) {
200+
TestInputs(os.rel / "script.sc" -> s"""println("$expectedMessage")""").fromRoot { root =>
201+
val res =
202+
os.proc(TestUtil.cli, "run", ".", "-S", scalaVersion, TestUtil.extraOptions, "--runner")
203+
.call(cwd = root, stderr = os.Pipe)
204+
expect(res.out.trim() == expectedMessage)
205+
expect(res.err.trim().contains(expectedWarning))
206+
}
207+
}
190208
}

modules/integration/src/test/scala/scala/cli/integration/TestTestsDefault.scala

Lines changed: 33 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import com.eed3si9n.expecty.Expecty.expect
55
import java.io.File
66

77
import scala.cli.integration.Constants.munitVersion
8+
import scala.cli.integration.TestUtil.StringOps
89

910
class TestTestsDefault extends TestTestDefinitions with TestDefault {
1011
test("Pure Java with Scala tests") {
@@ -62,11 +63,39 @@ class TestTestsDefault extends TestTestDefinitions with TestDefault {
6263
).fromRoot { root =>
6364
val output = os.proc(TestUtil.cli, "test", extraOptions, ".", "--cross", "--power")
6465
.call(cwd = root).out.text()
65-
def countOccurrences(a: String, b: String): Int =
66-
if (b.isEmpty) 0 // Avoid infinite splitting
67-
else a.sliding(b.length).count(_ == b)
6866
expect(output.contains(expectedMessage))
69-
expect(countOccurrences(output, expectedMessage) == crossVersions.length)
67+
expect(output.countOccurrences(expectedMessage) == crossVersions.length)
7068
}
7169
}
70+
71+
for {
72+
scalaVersion <- TestUtil.legacyScalaVersionsOnePerMinor
73+
expectedMessage = "Hello, world!"
74+
expectedWarning =
75+
s"Defaulting to a legacy test-runner module version: ${Constants.runnerLegacyVersion}"
76+
}
77+
test(s"run a simple test with Scala $scalaVersion (legacy)") {
78+
TestInputs(os.rel / "example.test.scala" ->
79+
// using JUnit to work around TASTy and macro incompatibilities
80+
s"""//> using dep com.novocode:junit-interface:0.11
81+
|import org.junit.Test
82+
|
83+
|class MyTests {
84+
| @Test
85+
| def foo(): Unit = {
86+
| assert(2 + 2 == 4)
87+
| println("$expectedMessage")
88+
| }
89+
|}
90+
|""".stripMargin).fromRoot { root =>
91+
val res =
92+
os.proc(TestUtil.cli, "test", ".", "-S", scalaVersion, TestUtil.extraOptions)
93+
.call(cwd = root, stderr = os.Pipe)
94+
val out = res.out.trim()
95+
expect(out.contains(expectedMessage))
96+
val err = res.err.trim()
97+
expect(err.contains(expectedWarning))
98+
expect(err.countOccurrences(expectedWarning) == 1)
99+
}
100+
}
72101
}

modules/integration/src/test/scala/scala/cli/integration/TestUtil.scala

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,9 @@ object TestUtil {
2727
val cli: Seq[String] = cliCommand(cliPath)
2828
val ltsEqualsNext: Boolean = Constants.scala3Lts equals Constants.scala3Next
2929

30+
lazy val legacyScalaVersionsOnePerMinor: Seq[String] =
31+
Constants.legacyScala3Versions.sorted.reverse.distinctBy(_.split('.').take(2).mkString("."))
32+
3033
def cliCommand(cliPath: String): Seq[String] =
3134
if (isNativeCli)
3235
Seq(cliPath)
@@ -367,4 +370,10 @@ object TestUtil {
367370
Thread.sleep(200L)
368371
if (proc.isAlive()) proc.destroyForcibly()
369372
}
373+
374+
implicit class StringOps(a: String) {
375+
def countOccurrences(b: String): Int =
376+
if (b.isEmpty) 0 // Avoid infinite splitting
377+
else a.sliding(b.length).count(_ == b)
378+
}
370379
}

0 commit comments

Comments
 (0)