Skip to content

Commit c630c2f

Browse files
Merge pull request #570 from alexarchambault/bump-scala
Update Scala to 2.13.8 and 3.1.1
2 parents 55a2096 + 6c59ba8 commit c630c2f

File tree

11 files changed

+130
-68
lines changed

11 files changed

+130
-68
lines changed

.github/workflows/ci.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -218,7 +218,7 @@ jobs:
218218
- name: Check native-image config format
219219
run: ./mill -i __.checkNativeImageConfFormat
220220
- name: Check Ammonite availability
221-
run: ./mill -i 'dummy.amm[_].resolvedRunIvyDeps.'
221+
run: ./mill -i 'dummy.amm[_].resolvedRunIvyDeps'
222222
- name: Scalafix check
223223
run: |
224224
./mill -i __.fix --check || (

build.sc

Lines changed: 3 additions & 2 deletions
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.0-M2`
33
import $ivy.`io.github.alexarchambault.mill::mill-native-image-upload:0.1.13`
4-
import $file.project.deps, deps.{Deps, Docker, Scala, TestDeps}
4+
import $file.project.deps, deps.{Deps, Docker, InternalDeps, Scala, TestDeps}
55
import $file.project.publish, publish.{ghOrg, ghName, ScalaCliPublishModule}
66
import $file.project.settings, settings.{
77
CliLaunchers,
@@ -273,6 +273,7 @@ class Build(val crossScalaVersion: String)
273273
| def jmhVersion = "1.29"
274274
|
275275
| def ammoniteVersion = "${Deps.ammonite.dep.version}"
276+
| def millVersion = "${InternalDeps.Versions.mill}"
276277
|
277278
| def defaultScalafmtVersion = "${Deps.scalafmtCli.dep.version}"
278279
|
@@ -439,7 +440,7 @@ trait CliIntegrationBase extends SbtModule with ScalaCliPublishModule with HasTe
439440
| def bspVersion = "${Deps.bsp4j.dep.version}"
440441
| def scala212 = "${Scala.scala212}"
441442
| def scala213 = "${Scala.scala213}"
442-
| def scalaSnapshot213 = "${Scala.scalaSnapshot213}"
443+
| def scalaSnapshot213 = "${TestDeps.scalaSnapshot213}"
443444
| def scala3 = "${Scala.scala3}"
444445
| def defaultScala = "${Scala.defaultUser}"
445446
| def bloopVersion = "${Deps.bloopConfig.dep.version}"

modules/build/src/main/scala/scala/build/Artifacts.scala

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ object Artifacts {
7676
addJvmRunner: Option[Boolean],
7777
addJvmTestRunner: Boolean,
7878
addJsTestBridge: Option[String],
79+
addNativeTestInterface: Option[String],
7980
addJmhDependencies: Option[String],
8081
scalaNativeCliVersion: Option[String],
8182
extraRepositories: Seq[String],
@@ -108,6 +109,9 @@ object Artifacts {
108109
else
109110
dep"org.scala-js:scalajs-test-bridge_2.13:$scalaJsVersion"
110111
}
112+
val nativeTestInterfaceDependencies = addNativeTestInterface.toSeq.map { scalaNativeVersion =>
113+
dep"org.scala-native::test-interface::$scalaNativeVersion"
114+
}
111115

112116
val jmhDependencies = addJmhDependencies.toSeq.map { version =>
113117
dep"org.openjdk.jmh:jmh-generator-bytecode:$version"
@@ -137,6 +141,7 @@ object Artifacts {
137141
jvmRunnerDependencies.map(Positioned.none(_)) ++
138142
jvmTestRunnerDependencies.map(Positioned.none(_)) ++
139143
jsTestBridgeDependencies.map(Positioned.none(_)) ++
144+
nativeTestInterfaceDependencies.map(Positioned.none(_)) ++
140145
jmhDependencies.map(Positioned.none(_))
141146

142147
val compilerArtifacts = value {

modules/build/src/main/scala/scala/build/Build.scala

Lines changed: 38 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -339,28 +339,40 @@ object Build {
339339
def classesDir(root: os.Path, projectName: String, scope: Scope): os.Path =
340340
classesRootDir(root, projectName) / scope.name
341341

342-
def scalaNativeSupported(options: BuildOptions, inputs: Inputs) = either {
343-
val scalaVersion = value(options.scalaParams).scalaVersion
344-
val nativeVersion = options.scalaNativeOptions.numeralVersion
345-
nativeVersion match {
346-
case Some(snNumeralVer) =>
347-
if (snNumeralVer < SNNumeralVersion(0, 4, 1) && Properties.isWin)
348-
false
349-
else if (scalaVersion.startsWith("3.0"))
350-
false
351-
else if (scalaVersion.startsWith("3"))
352-
snNumeralVer >= SNNumeralVersion(0, 4, 3)
353-
else if (scalaVersion.startsWith("2.13"))
354-
true
355-
else if (scalaVersion.startsWith("2.12"))
356-
inputs.sourceFiles().forall {
357-
case _: Inputs.AnyScript => false
358-
case _ => true
359-
}
360-
else false
361-
case None => false
342+
def scalaNativeSupported(
343+
options: BuildOptions,
344+
inputs: Inputs
345+
): Either[BuildException, Option[ScalaNativeCompatibilityError]] =
346+
either {
347+
val scalaVersion = value(options.scalaParams).scalaVersion
348+
val nativeVersion = options.scalaNativeOptions.numeralVersion
349+
val isCompatible = nativeVersion match {
350+
case Some(snNumeralVer) =>
351+
if (snNumeralVer < SNNumeralVersion(0, 4, 1) && Properties.isWin)
352+
false
353+
else if (scalaVersion.startsWith("3.0"))
354+
false
355+
else if (scalaVersion.startsWith("3"))
356+
snNumeralVer >= SNNumeralVersion(0, 4, 3)
357+
else if (scalaVersion.startsWith("2.13"))
358+
true
359+
else if (scalaVersion.startsWith("2.12"))
360+
inputs.sourceFiles().forall {
361+
case _: Inputs.AnyScript => false
362+
case _ => true
363+
}
364+
else false
365+
case None => false
366+
}
367+
if (isCompatible) None
368+
else
369+
Some(
370+
new ScalaNativeCompatibilityError(
371+
scalaVersion,
372+
options.scalaNativeOptions.finalVersion
373+
)
374+
)
362375
}
363-
}
364376

365377
def build(
366378
inputs: Inputs,
@@ -725,10 +737,11 @@ object Build {
725737
)
726738
)
727739

728-
if (options.platform.value == Platform.Native && !value(scalaNativeSupported(options, inputs)))
729-
value(Left(new ScalaNativeCompatibilityError()))
730-
else
731-
value(Right(0))
740+
if (options.platform.value == Platform.Native)
741+
value(scalaNativeSupported(options, inputs)) match {
742+
case None =>
743+
case Some(error) => value(Left(error))
744+
}
732745

733746
val (classesDir0, scalaParams, artifacts, project, updatedBloopConfig) = value {
734747
prepareBuild(
Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
package scala.build.errors
22

3-
final class ScalaNativeCompatibilityError
4-
extends BuildException(
5-
"""Used Scala Native version is incompatible the passed options.
6-
|Please try one of the following combinations:
7-
| Scala Native version >= 0.4.3 for Scala 3.1 (*.sc & *.scala files)
8-
| Scala Native version >= 0.4.0 for Scala 2.13 (*.sc & *.scala files)
9-
| Scala Native version >= 0.4.0 for Scala 2.12 (*.scala files)
10-
|Windows is supported since Scala Native 0.4.1.
11-
|""".stripMargin
3+
final class ScalaNativeCompatibilityError(
4+
val scalaVersion: String,
5+
val scalaNativeVersion: String
6+
) extends BuildException(
7+
s"""Used Scala Native version $scalaNativeVersion is incompatible with Scala $scalaVersion.
8+
|Please try one of the following combinations:
9+
| Scala Native version >= 0.4.3 for Scala 3.1 (*.sc & *.scala files)
10+
| Scala Native version >= 0.4.0 for Scala 2.13 (*.sc & *.scala files)
11+
| Scala Native version >= 0.4.0 for Scala 2.12 (*.scala files)
12+
|Windows is supported since Scala Native 0.4.1.
13+
|""".stripMargin
1214
)

modules/build/src/main/scala/scala/build/options/BuildOptions.scala

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -140,8 +140,17 @@ final case class BuildOptions(
140140
platform.value == Platform.JVM &&
141141
internalDependencies.addTestRunnerDependency
142142
private def addJsTestBridge: Option[String] =
143-
if (internalDependencies.addTestRunnerDependency) Some(scalaJsOptions.finalVersion)
143+
if (platform.value == Platform.JS && internalDependencies.addTestRunnerDependency)
144+
Some(scalaJsOptions.finalVersion)
144145
else None
146+
private def addNativeTestInterface: Option[String] = {
147+
val doAdd =
148+
platform.value == Platform.Native &&
149+
internalDependencies.addTestRunnerDependency &&
150+
Version("0.4.3").compareTo(Version(scalaNativeOptions.finalVersion)) <= 0
151+
if (doAdd) Some(scalaNativeOptions.finalVersion)
152+
else None
153+
}
145154

146155
lazy val finalCache = internal.cache.getOrElse(FileCache())
147156
// This might download a JVM if --jvm … is passed or no system JVM is installed
@@ -365,6 +374,7 @@ final case class BuildOptions(
365374
addJvmRunner = addRunnerDependency,
366375
addJvmTestRunner = addJvmTestRunner,
367376
addJsTestBridge = addJsTestBridge,
377+
addNativeTestInterface = addNativeTestInterface,
368378
addJmhDependencies = jmhOptions.addJmhDependencies,
369379
extraRepositories = finalRepositories,
370380
logger = logger

modules/build/src/test/scala/scala/build/tests/BuildTests.scala

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -214,14 +214,15 @@ class BuildTests extends munit.FunSuite {
214214
testInputs.withBuild(defaultOptions.enableNative, buildThreads, bloopConfig) {
215215
(_, _, maybeBuild) =>
216216
maybeBuild.orThrow.assertGeneratedEquals(
217-
"simple.class",
218-
"simple_sc.class",
219-
"simple$.nir",
220217
"simple$.class",
218+
"simple$.nir",
219+
"simple.class",
220+
"simple.nir",
221221
"simple_sc$$$Lambda$1.nir",
222222
"simple_sc$.class",
223-
"simple_sc$.nir"
224-
// "simple.nir", // not sure why Scala Native doesn't generate this one.
223+
"simple_sc$.nir",
224+
"simple_sc.class",
225+
"simple_sc.nir"
225226
)
226227
maybeBuild.orThrow.assertNoDiagnostics
227228
}

modules/build/src/test/scala/scala/build/tests/TestUtil.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@ object TestUtil {
1919
val generated0 = generated()
2020
assert(
2121
generated0.map(_.toString).toSet == expected.toSet, {
22-
pprint.log(generated0.map(_.toString))
23-
pprint.log(expected)
22+
pprint.log(generated0.map(_.toString).sorted)
23+
pprint.log(expected.sorted)
2424
""
2525
}
2626
)

modules/cli/src/main/scala/scala/cli/commands/Export.scala

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import coursier.util.{Artifact, Task}
66

77
import scala.build.EitherCps.{either, value}
88
import scala.build.errors.BuildException
9-
import scala.build.internal.CustomCodeWrapper
9+
import scala.build.internal.{Constants, CustomCodeWrapper}
1010
import scala.build.options.{BuildOptions, Scope}
1111
import scala.build.{CrossSources, Inputs, Logger, Os, Sources}
1212
import scala.cli.CurrentParams
@@ -65,11 +65,7 @@ object Export extends ScalaCommand[ExportOptions] {
6565
}
6666
val launchersTask = cache.logger.using(Task.gather.gather(launcherTasks))
6767
val launchers = launchersTask.unsafeRun()(cache.ec)
68-
Mill(
69-
"0.9.8",
70-
launchers,
71-
logger
72-
)
68+
Mill(Constants.millVersion, launchers, logger)
7369
}
7470

7571
def run(options: ExportOptions, args: RemainingArgs): Unit = {

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

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -140,13 +140,25 @@ abstract class RunTestDefinitions(val scalaVersionOpt: Option[String])
140140
os.rel / "a.sc" -> "println(1)"
141141
)
142142
)
143+
val nativeVersion = "0.4.2"
143144
inputs.fromRoot { root =>
144-
val output = os.proc(TestUtil.cli, extraOptions, "--native", "a.sc").call(
145+
val output = os.proc(
146+
TestUtil.cli,
147+
extraOptions,
148+
"--native",
149+
"a.sc",
150+
"--native-version",
151+
nativeVersion
152+
).call(
145153
cwd = root,
146154
check = false,
147155
stderr = os.Pipe
148156
).err.text().trim
149-
expect(output.contains("Used Scala Native version is incompatible the passed options"))
157+
expect(
158+
output.contains(
159+
s"Used Scala Native version $nativeVersion is incompatible with Scala $actualScalaVersion."
160+
)
161+
)
150162
}
151163
}
152164

@@ -501,7 +513,7 @@ abstract class RunTestDefinitions(val scalaVersionOpt: Option[String])
501513
|${tab}at Throws$$.main(Throws.scala:5)
502514
|$tab... 1 more
503515
|""".stripMargin.linesIterator.toVector
504-
else
516+
else if (actualScalaVersion.startsWith("3.0."))
505517
s"""Exception in thread main: java.lang.Exception: Caught exception during processing
506518
| at method main in Throws.scala:8$sp
507519
|
@@ -511,6 +523,16 @@ abstract class RunTestDefinitions(val scalaVersionOpt: Option[String])
511523
| at method main in Throws.scala:5$sp
512524
|
513525
|""".stripMargin.linesIterator.toVector
526+
else
527+
s"""Exception in thread "main" java.lang.Exception: Caught exception during processing
528+
|${tab}at Throws$$.main(Throws.scala:8)
529+
|${tab}at Throws.main(Throws.scala)
530+
|Caused by: java.lang.RuntimeException: nope
531+
|${tab}at scala.sys.package$$.error(package.scala:27)
532+
|${tab}at Throws$$.something(Throws.scala:3)
533+
|${tab}at Throws$$.main(Throws.scala:5)
534+
|$tab... 1 more
535+
|""".stripMargin.linesIterator.toVector
514536
if (exceptionLines != expectedLines) {
515537
pprint.log(exceptionLines)
516538
pprint.log(expectedLines)

0 commit comments

Comments
 (0)