Skip to content
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

Add non-regression test for forced Scala versions #1889

Closed
Closed
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
3 changes: 2 additions & 1 deletion modules/build/src/main/scala/scala/build/Build.scala
Original file line number Diff line number Diff line change
Expand Up @@ -883,7 +883,8 @@ object Build {
scalaVersion = params.scalaVersion,
scalaBinaryVersion = params.scalaBinaryVersion,
scalacOptions = scalacOptions.toSeq.map(_.value),
compilerClassPath = scalaArtifacts.compilerClassPath
compilerClassPath = scalaArtifacts.compilerClassPath,
bridgeJarsOpt = scalaArtifacts.bridgeJarsOpt
)
Some(compilerParams)

Expand Down
6 changes: 4 additions & 2 deletions modules/build/src/main/scala/scala/build/Project.scala
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,8 @@ final case class Project(
val scalaConfigOpt = scalaCompiler.map { scalaCompiler0 =>
bloopScalaConfig("org.scala-lang", "scala-compiler", scalaCompiler0.scalaVersion).copy(
options = updateScalacOptions(scalaCompiler0.scalacOptions).map(_.value),
jars = scalaCompiler0.compilerClassPath.map(_.toNIO).toList
jars = scalaCompiler0.compilerClassPath.map(_.toNIO).toList,
bridgeJars = scalaCompiler0.bridgeJarsOpt.map(_.map(_.toNIO).toList)
)
}
baseBloopProject(
Expand Down Expand Up @@ -228,6 +229,7 @@ object Project {
options = Nil,
jars = Nil,
analysis = None,
setup = None
setup = None,
bridgeJars = None
)
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,6 @@ final case class ScalaCompilerParams(
scalaVersion: String,
scalaBinaryVersion: String,
scalacOptions: Seq[String],
compilerClassPath: Seq[os.Path]
compilerClassPath: Seq[os.Path],
bridgeJarsOpt: Option[Seq[os.Path]]
)
Original file line number Diff line number Diff line change
Expand Up @@ -129,4 +129,41 @@ class RunTestsDefault extends RunTestDefinitions(scalaVersionOpt = None) {
}
}

test("Force Scala version") {
val sv = "3.2.2-SNAPSHOT"
val inputs = TestInputs(
os.rel / "Hello.scala" ->
s"""//> using scala "$sv!"
|
|@main
|def hello(): Unit =
| println(s"Hello from Scala $sv")
|""".stripMargin
)
inputs.fromRoot { root =>
val repo = root / "repo"
for {
name <- Seq("scala3-library_3", "scala3-compiler_3", "tasty-core_3", "scala3-sbt-bridge")
ext <- Seq("pom", "jar")
} {
val strPath = os.proc(
TestUtil.cs,
"get",
s"https://repo1.maven.org/maven2/org/scala-lang/$name/3.3.0-RC1-bin-20230120-d6cc101-NIGHTLY/$name-3.3.0-RC1-bin-20230120-d6cc101-NIGHTLY.$ext"
)
.call(cwd = root)
.out.trim()
os.copy(
os.Path(strPath, root),
repo / "org" / "scala-lang" / name / sv / s"$name-$sv.$ext",
createFolders = true
)
}
val res = os.proc(TestUtil.cli, "run", "Hello.scala", "-r", repo.toNIO.toUri.toASCIIString)
.call(cwd = root)
val output = res.out.trim()
expect(output == s"Hello from Scala $sv")
}
}

}
27 changes: 26 additions & 1 deletion modules/options/src/main/scala/scala/build/Artifacts.scala
Original file line number Diff line number Diff line change
Expand Up @@ -134,6 +134,15 @@ object Artifacts {
val compilerDependenciesMessage =
s"Downloading Scala ${scalaArtifactsParams.params.scalaVersion} compiler"

val bridgeDependenciesOpt =
Option.when(scalaArtifactsParams.params.scalaVersion.startsWith("3.")) {
Seq(
dep"org.scala-lang:scala3-sbt-bridge:${scalaArtifactsParams.params.scalaVersion}"
)
}
val bridgeDependenciesMessage =
s"Downloading Scala ${scalaArtifactsParams.params.scalaVersion} bridge"

val compilerPlugins0 = value {
scalaArtifactsParams.compilerPlugins
.map { posDep =>
Expand Down Expand Up @@ -165,6 +174,21 @@ object Artifacts {
).left.flatMap(_.maybeRecoverWithDefault(Seq.empty, maybeRecoverOnError))
}

val bridgeJarsOpt = bridgeDependenciesOpt match {
case None => None
case Some(bridgeDependencies) =>
val jars = value {
artifacts(
Positioned.none(bridgeDependencies),
allExtraRepositories,
Some(scalaArtifactsParams.params),
logger,
cache.withMessage(bridgeDependenciesMessage)
).left.flatMap(_.maybeRecoverWithDefault(Seq.empty, maybeRecoverOnError))
}.map(_._2)
Some(jars)
}

def fetchedArtifactToPath(fetched: Fetch.Result): Seq[os.Path] =
fetched.fullDetailedArtifacts.collect { case (_, _, _, Some(f)) => os.Path(f, Os.pwd) }

Expand Down Expand Up @@ -265,7 +289,8 @@ object Artifacts {
scalaNativeCli,
internalDependencies,
scalapyDependencies,
scalaArtifactsParams.params
scalaArtifactsParams.params,
bridgeJarsOpt
)
Some(scala)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,8 @@ final case class ScalaArtifacts(
scalaNativeCli: Seq[os.Path],
internalDependencies: Seq[AnyDependency],
extraDependencies: Seq[AnyDependency],
params: ScalaParameters
params: ScalaParameters,
bridgeJarsOpt: Option[Seq[os.Path]]
) {

lazy val compilerClassPath: Seq[os.Path] =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -258,6 +258,8 @@ final case class BuildOptions(
val svOpt: Option[String] = scalaOptions.scalaVersion match {
case Some(MaybeScalaVersion(None)) =>
None
case Some(MaybeScalaVersion(Some(svInput))) if svInput.endsWith("!") =>
Some(svInput.stripSuffix("!"))
case Some(MaybeScalaVersion(Some(svInput))) =>
val sv = value {
svInput match {
Expand Down