Skip to content

Backport: sbt-dotty: the binary version is 3 for Scala >= 3.0.0 #12084

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 8 commits into from
Apr 13, 2021
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
5 changes: 1 addition & 4 deletions .github/workflows/ci.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -348,12 +348,9 @@ jobs:
- name: Add SBT proxy repositories
run: cp -vf .github/workflows/repositories /root/.sbt/ ; true

- name: Test sbt 1.4.x
- name: Test sbt
run: ./project/scripts/sbt "sbt-dotty/scripted; sbt-community-build/scripted"

- name: Test sbt 1.5.x
run: ./project/scripts/sbt "set \`sbt-dotty\`/scriptedSbt := \"1.5.0-RC1\"; sbt-dotty/scripted sbt-dotty/*"

test_java8:
runs-on: [self-hosted, Linux]
container:
Expand Down
2 changes: 1 addition & 1 deletion community-build/community-projects/stdLib213
Submodule stdLib213 updated 705 files
26 changes: 15 additions & 11 deletions community-build/src/scala/dotty/communitybuild/projects.scala
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,12 @@ lazy val sbtPluginFilePath: String =
def log(msg: String) = println(Console.GREEN + msg + Console.RESET)

/** Executes shell command, returns false in case of error. */
def exec(projectDir: Path, binary: String, arguments: String*): Int =
def exec(projectDir: Path, binary: String, arguments: Seq[String], environment: Map[String, String]): Int =
import collection.JavaConverters._
val command = binary +: arguments
log(command.mkString(" "))
val builder = new ProcessBuilder(command: _*).directory(projectDir.toFile).inheritIO()
builder.environment.putAll(environment.asJava)
val process = builder.start()
val exitCode = process.waitFor()
exitCode
Expand All @@ -40,6 +42,7 @@ sealed trait CommunityProject:
val dependencies: List[CommunityProject]
val binaryName: String
val runCommandsArgs: List[String] = Nil
val environment: Map[String, String] = Map.empty

final val projectDir = communitybuildDir.resolve("community-projects").resolve(project)

Expand All @@ -53,7 +56,7 @@ sealed trait CommunityProject:
log(s"Publishing $project")
if publishCommand eq null then
throw RuntimeException(s"Publish command is not specified for $project. Project details:\n$this")
val exitCode = exec(projectDir, binaryName, (runCommandsArgs :+ publishCommand): _*)
val exitCode = exec(projectDir, binaryName, (runCommandsArgs :+ publishCommand), environment)
if exitCode != 0 then
throw RuntimeException(s"Publish command exited with code $exitCode for project $project. Project details:\n$this")
published = true
Expand All @@ -63,11 +66,11 @@ sealed trait CommunityProject:
log(s"Documenting $project")
if docCommand eq null then
throw RuntimeException(s"Doc command is not specified for $project. Project details:\n$this")
val exitCode = exec(projectDir, binaryName, (runCommandsArgs :+ docCommand): _*)
val exitCode = exec(projectDir, binaryName, (runCommandsArgs :+ docCommand), environment)
if exitCode != 0 then
throw RuntimeException(s"Doc command exited with code $exitCode for project $project. Project details:\n$this")

final def build(): Int = exec(projectDir, binaryName, buildCommands: _*)
final def build(): Int = exec(projectDir, binaryName, buildCommands, environment)

final def buildCommands = runCommandsArgs :+ testCommand

Expand All @@ -86,6 +89,7 @@ final case class MillCommunityProject(
// uncomment once mill is released
// if ignoreDocs then null else s"$baseCommand.docJar"
override val runCommandsArgs = List("-i", "-D", s"dottyVersion=$compilerVersion")
override val environment = Map("MILL_VERSION" -> "0.9.6-16-a5da34")

final case class SbtCommunityProject(
project: String,
Expand All @@ -102,12 +106,12 @@ final case class SbtCommunityProject(
scalacOptions.map("\"" + _ + "\"").mkString("List(", ",", ")")

private val baseCommand =
"clean; set logLevel in Global := Level.Error; set updateOptions in Global ~= (_.withLatestSnapshots(false)); "
++ (if scalacOptions.isEmpty then "" else s"""set scalacOptions in Global ++= $scalacOptionsString;""")
"clean; set Global/logLevel := Level.Error; set Global/updateOptions ~= (_.withLatestSnapshots(false)); "
++ (if scalacOptions.isEmpty then "" else s"""set Global/scalacOptions ++= $scalacOptionsString;""")
++ s"++$compilerVersion!; "

override val testCommand =
"""set testOptions in Global += Tests.Argument(TestFramework("munit.Framework"), "+l"); """
"""set Global/testOptions += Tests.Argument(TestFramework("munit.Framework"), "+l"); """
++ s"$baseCommand$sbtTestCommand"

override val publishCommand =
Expand All @@ -124,7 +128,7 @@ final case class SbtCommunityProject(
case Some(ivyHome) => List(s"-Dsbt.ivy.home=$ivyHome")
case _ => Nil
extraSbtArgs ++ sbtProps ++ List(
"-sbt-version", "1.4.9",
"-sbt-version", "1.5.0",
"-Dsbt.supershell=false",
s"-Ddotty.communitybuild.dir=$communitybuildDir",
s"--addPluginSbtFile=$sbtPluginFilePath"
Expand All @@ -140,12 +144,12 @@ object projects:

private def forceDoc(projects: String*) =
projects.map(project =>
s""";set $project/Compile/doc/sources ++= ($project/Compile/doc/tastyFiles).value ;$project/doc"""
s""";set $project/Compile/doc/sources ++= ($project/Compile/doc/dotty.tools.sbtplugin.DottyPlugin.autoImport.tastyFiles).value ;$project/doc"""
).mkString(" ")

private def aggregateDoc(in: String)(projects: String*) =
val tastyFiles =
(in +: projects).map(p => s"($p/Compile/doc/tastyFiles).value").mkString(" ++ ")
(in +: projects).map(p => s"($p/Compile/doc/dotty.tools.sbtplugin.DottyPlugin.autoImport.tastyFiles).value").mkString(" ++ ")
s""";set $in/Compile/doc/sources ++= file("a.scala") +: ($tastyFiles) ;$in/doc"""

lazy val utest = MillCommunityProject(
Expand Down Expand Up @@ -512,7 +516,7 @@ object projects:

lazy val cats = SbtCommunityProject(
project = "cats",
sbtTestCommand = "set scalaJSStage in Global := FastOptStage;buildJVM;validateAllJS",
sbtTestCommand = "set Global/scalaJSStage := FastOptStage;buildJVM;validateAllJS",
sbtPublishCommand = "catsJVM/publishLocal;catsJS/publishLocal",
dependencies = List(discipline, disciplineMunit, scalacheck, simulacrumScalafixAnnotations),
scalacOptions = SbtCommunityProject.scalacOptions.filter(_ != "-Ysafe-init") // disable -Ysafe-init, due to -Xfatal-warning
Expand Down
6 changes: 6 additions & 0 deletions project/Build.scala
Original file line number Diff line number Diff line change
Expand Up @@ -1243,6 +1243,12 @@ object Build {
baseDirectory.value / "../language-server/src/dotty/tools/languageserver/config",
sbtTestDirectory := baseDirectory.value / "sbt-test",

// ensure that sbt-dotty is built with sbt 1.4
pluginCrossBuild / sbtVersion := "1.4.9",

// scritped tests are run with current sbt version
scriptedSbt := sbtVersion.value,

// The batch mode accidentally became the default with no way to disable
// it in sbt 1.4 (https://github.com/sbt/sbt/issues/5913#issuecomment-716003195).
// We enable it explicitly here to make it clear that we're using it.
Expand Down
2 changes: 1 addition & 1 deletion project/build.properties
Original file line number Diff line number Diff line change
@@ -1 +1 @@
sbt.version=1.4.9
sbt.version=1.5.0
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
## This failing test is pending because it will be solved by removing sbt-dotty

## Case 1: value class as parameter of method
$ copy-file changes/A0.scala src/main/scala/A.scala
$ copy-file changes/B0.scala src/main/scala/B.scala
Expand Down
9 changes: 4 additions & 5 deletions sbt-dotty/src/dotty/tools/sbtplugin/DottyPlugin.scala
Original file line number Diff line number Diff line change
Expand Up @@ -264,11 +264,10 @@ object DottyPlugin extends AutoPlugin {
scalaBinaryVersion := {
scalaVersion.value.split("[\\.-]").toList match {
case "0" :: minor :: _ => s"0.$minor"
case "3" :: minor :: patch :: suffix =>
s"3.$minor.$patch" + (suffix match {
case milestone :: _ => s"-$milestone"
case Nil => ""
})
case "3" :: "0" :: "0" :: milestone :: _ =>
s"3.0.0-$milestone"
case "3" :: _ =>
"3"
case _ => scalaBinaryVersion.value
}
},
Expand Down