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

Extract used Java versions to constants #3087

Merged
merged 1 commit into from
Aug 12, 2024
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
8 changes: 7 additions & 1 deletion build.sc
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import $ivy.`com.lihaoyi::mill-contrib-bloop:$MILL_VERSION`
import $ivy.`io.get-coursier::coursier-launcher:2.1.10`
import $ivy.`io.github.alexarchambault.mill::mill-native-image-upload:0.1.25`
import $file.project.deps, deps.{Deps, Docker, InternalDeps, Scala, TestDeps}
import $file.project.deps, deps.{Deps, Docker, InternalDeps, Java, Scala, TestDeps}
import $file.project.publish, publish.{ghOrg, ghName, ScalaCliPublishModule, organization}
import $file.project.settings, settings.{
CliLaunchers,
Expand Down Expand Up @@ -459,6 +459,10 @@ trait Core extends ScalaCliCrossSbtModule
| def typelevelToolkitDefaultVersion = "${Deps.typelevelToolkitVersion}"
| def typelevelToolkitMaxScalaNative = "${Deps.Versions.maxScalaNativeForTypelevelToolkit}"
|
| def minimumBloopJavaVersion = ${Java.minimumBloopJava}
| def minimumInternalJavaVersion = ${Java.minimumInternalJava}
| def defaultJavaVersion = ${Java.defaultJava}
|
| def defaultScalaVersion = "${Scala.defaultUser}"
| def defaultScala212Version = "${Scala.scala212}"
| def defaultScala213Version = "${Scala.scala213}"
Expand Down Expand Up @@ -809,6 +813,8 @@ trait Cli extends CrossSbtModule with ProtoBuildModule with CliLaunchers
|/** Build-time constants. Generated by mill. */
|object Constants {
| def defaultScalaVersion = "${Scala.defaultUser}"
| def defaultJavaVersion = ${Java.defaultJava}
| def minimumBloopJavaVersion = ${Java.minimumBloopJava}
| def scalaJsVersion = "${Scala.scalaJs}"
| def scalaJsCliVersion = "${Scala.scalaJsCli}"
| def scalaNativeVersion = "${Deps.nativeTools.dep.version}"
Expand Down
15 changes: 8 additions & 7 deletions modules/cli/src/main/scala/scala/cli/ScalaCli.scala
Original file line number Diff line number Diff line change
Expand Up @@ -138,14 +138,15 @@ object ScalaCli {
}

e match {
case _: UnsupportedClassVersionError if javaMajorVersion < 17 =>
warnRequiresJava17()
case _: UnsupportedClassVersionError
if javaMajorVersion < Constants.minimumBloopJavaVersion =>
warnRequiresMinimumBloopJava()
case _: NoClassDefFoundError
if isJava17ClassName(e.getMessage) &&
CurrentParams.verbosity <= 1 &&
javaMajorVersion < 16 =>
javaMajorVersion < Constants.minimumInternalJavaVersion =>
// Actually Java >= 16 here, but let's recommend a LTS version…
warnRequiresJava17()
warnRequiresMinimumBloopJava()
case _: FailedToStartServerException =>
System.err.println(
s"""Running
Expand All @@ -169,9 +170,9 @@ object ScalaCli {
else sys.exit(1)
}

private def warnRequiresJava17(): Unit =
private def warnRequiresMinimumBloopJava(): Unit =
System.err.println(
s"Java >= 17 is required to run $fullRunnerName (found Java $javaMajorVersion)"
s"Java >= ${Constants.minimumBloopJavaVersion} is required to run $fullRunnerName (found Java $javaMajorVersion)"
)

def loadJavaProperties(cwd: os.Path) = {
Expand Down Expand Up @@ -250,7 +251,7 @@ object ScalaCli {
val newArgs = powerArgs ++ finalScalaRunnerArgs ++ args0
LauncherCli.runAndExit(ver, launcherOpts, newArgs)
case _ if
javaMajorVersion < 17
javaMajorVersion < Constants.minimumBloopJavaVersion
&& sys.props.get("scala-cli.kind").exists(_.startsWith("jvm")) =>
JavaLauncherCli.runAndExit(args)
case None =>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import bloop.rifle.internal.Operations
import bloop.rifle.{BloopRifle, BloopRifleConfig, BloopThreads}
import caseapp.core.RemainingArgs

import scala.build.internal.OsLibc
import scala.build.internal.{Constants, OsLibc}
import scala.build.{Directories, Logger}
import scala.cli.CurrentParams
import scala.cli.commands.ScalaCommand
Expand Down Expand Up @@ -38,7 +38,7 @@ object Bloop extends ScalaCommand[BloopOptions] {
val javaHomeInfo = opts.compilationServer.bloopJvm
.map(JvmUtils.downloadJvm(_, options))
.getOrElse {
JvmUtils.getJavaCmdVersionOrHigher(17, options)
JvmUtils.getJavaCmdVersionOrHigher(Constants.minimumBloopJavaVersion, options)
}.orExit(logger)

opts.compilationServer.bloopRifleConfig(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ object New extends ScalaCommand[NewOptions] {

val buildOptions = BuildOptions(
javaOptions = JavaOptions(
jvmIdOpt = Some(OsLibc.baseDefaultJvm(OsLibc.jvmIndexOs, "17")).map(Positioned.none)
jvmIdOpt = Some(OsLibc.defaultJvm(OsLibc.jvmIndexOs)).map(Positioned.none)
)
)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import caseapp.*
import com.github.plokhotnyuk.jsoniter_scala.core.*
import com.github.plokhotnyuk.jsoniter_scala.macros.*
import coursier.cache.FileCache
import coursier.core.{Version => Ver}
import coursier.core.Version as Ver
import coursier.util.Task

import java.io.File
Expand All @@ -15,6 +15,7 @@ import java.util.Random

import scala.build.internal.Util
import scala.build.{Bloop, Logger, Os}
import scala.cli.commands.Constants
import scala.cli.commands.bloop.BloopJson
import scala.cli.commands.shared.*
import scala.cli.internal.Pid
Expand Down Expand Up @@ -86,7 +87,7 @@ final case class SharedCompilationServerOptions(
bloopGlobalOptionsFile: Option[String] = None,

@Group(HelpGroup.CompilationServer.toString)
@HelpMessage("JVM to use to start Bloop (e.g. 'system|11', 'temurin:17', …)")
@HelpMessage(s"JVM to use to start Bloop (e.g. 'system|${Constants.minimumBloopJavaVersion}', 'temurin:21', …)")
@Hidden
bloopJvm: Option[String] = None,

Expand Down Expand Up @@ -276,7 +277,7 @@ final case class SharedCompilationServerOptions(
javaOpts =
(if (bloopDefaultJavaOpts) baseConfig.javaOpts
else Nil) ++ bloopJavaOpt ++ bloopDefaultJvmOptions(logger).getOrElse(Nil),
minimumBloopJvm = javaV.getOrElse(17),
minimumBloopJvm = javaV.getOrElse(Constants.minimumBloopJavaVersion),
retainedBloopVersion = retainedBloopVersion
)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -568,7 +568,7 @@ final case class SharedOptions(
.orElse {
for (javaHome <- options.javaHomeLocationOpt()) yield {
val (javaHomeVersion, javaHomeCmd) = OsLibc.javaHomeVersion(javaHome.value)
if (javaHomeVersion >= 17)
if (javaHomeVersion >= Constants.minimumBloopJavaVersion)
BuildOptions.JavaHomeInfo(javaHome.value, javaHomeCmd, javaHomeVersion)
else defaultJvmHome
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -295,9 +295,8 @@ final case class MavenProjectDescriptor(
sourcesTest: Sources
): Either[BuildException, MavenProject] = {
val jdk =
optionsMain.javaOptions.jvmIdOpt.map(_.value).getOrElse(
"17"
) // todo: get from constants for default jdk
optionsMain.javaOptions.jvmIdOpt.map(_.value)
.getOrElse(Constants.defaultJavaVersion.toString)
val projectChunks = Seq(
sources(sourcesMain, sourcesTest),
javaOptionsSettings(optionsMain),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ object JavaLauncherCli {

val buildOptions = BuildOptions(
javaOptions = JavaOptions(
jvmIdOpt = Some(OsLibc.baseDefaultJvm(OsLibc.jvmIndexOs, "17")).map(Positioned.none)
jvmIdOpt = Some(OsLibc.defaultJvm(OsLibc.jvmIndexOs)).map(Positioned.none)
)
)
val launcherKind = sys.props.get("scala-cli.kind") match {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ object LauncherCli {

val buildOptions = BuildOptions(
javaOptions = JavaOptions(
jvmIdOpt = Some(OsLibc.baseDefaultJvm(OsLibc.jvmIndexOs, "17")).map(Positioned.none)
jvmIdOpt = Some(OsLibc.defaultJvm(OsLibc.jvmIndexOs)).map(Positioned.none)
)
)

Expand Down
10 changes: 4 additions & 6 deletions modules/core/src/main/scala/scala/build/internals/OsLibc.scala
Original file line number Diff line number Diff line change
Expand Up @@ -61,20 +61,18 @@ object OsLibc {
else default
}

private def defaultJvmVersion = "17"

def baseDefaultJvm(os: String, jvmVersion: String): String = {
def java17OrHigher = Try(jvmVersion.takeWhile(_.isDigit).toInt)
def bloomMinimumJavaOrHigher = Try(jvmVersion.takeWhile(_.isDigit).toInt)
.toOption
.forall(_ >= 17)
.forall(_ >= Constants.minimumBloopJavaVersion)
if (os == "linux-musl") s"liberica:$jvmVersion" // zulu could work too
else if (java17OrHigher) s"temurin:$jvmVersion"
else if (bloomMinimumJavaOrHigher) s"temurin:$jvmVersion"
else if (Os.isArmArchitecture) s"zulu:$jvmVersion" // adopt doesn't support Java 8 on macOS arm
else s"temurin:$jvmVersion"
}

def defaultJvm(os: String): String =
baseDefaultJvm(os, defaultJvmVersion)
baseDefaultJvm(os, Constants.defaultJavaVersion.toString)

def javaVersion(javaCmd: String): Int = {
val javaVersionOutput = os.proc(javaCmd, "-version").call(
Expand Down
14 changes: 11 additions & 3 deletions project/deps.sc
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
import mill._, scalalib._
import Deps.Versions
import mill._
import scalalib._

object Scala {
def scala212 = "2.12.19"
Expand Down Expand Up @@ -69,6 +71,12 @@ object Scala {
}
}

object Java {
def minimumBloopJava = 17
def minimumInternalJava = 16
def defaultJava = minimumBloopJava
}

// Dependencies used in integration test fixtures
object TestDeps {
def pprint = Deps.pprint
Expand Down Expand Up @@ -108,7 +116,7 @@ object Deps {
def maxScalaNativeForMillExport = scalaNative04
def scalaPackager = "0.1.29"
def signingCli = "0.2.3"
def signingCliJvmVersion = 17
def signingCliJvmVersion = Java.defaultJava
def javaSemanticdb = "0.10.0"
def javaClassName = "0.1.3"
def bloop = "2.0.0-RC1"
Expand Down Expand Up @@ -233,7 +241,7 @@ object Deps {
}

def graalVmVersion = "22.3.1"
def graalVmJavaVersion = 17
def graalVmJavaVersion = Java.defaultJava
def graalVmJvmId = s"graalvm-java$graalVmJavaVersion:$graalVmVersion"

def csDockerVersion = Deps.Versions.coursierCli
Expand Down
2 changes: 1 addition & 1 deletion website/docs/reference/cli-options.md
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,7 @@ Bloop global options file
### `--bloop-jvm`

[Internal]
JVM to use to start Bloop (e.g. 'system|11', 'temurin:17', …)
JVM to use to start Bloop (e.g. 'system|17', 'temurin:21', …)

### `--bloop-working-dir`

Expand Down
2 changes: 1 addition & 1 deletion website/docs/reference/scala-command/cli-options.md
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,7 @@ Bloop global options file

`IMPLEMENTATION specific` per Scala Runner specification

JVM to use to start Bloop (e.g. 'system|11', 'temurin:17', …)
JVM to use to start Bloop (e.g. 'system|17', 'temurin:21', …)

### `--bloop-working-dir`

Expand Down
20 changes: 10 additions & 10 deletions website/docs/reference/scala-command/runner-specification.md
Original file line number Diff line number Diff line change
Expand Up @@ -494,7 +494,7 @@ Bloop global options file

**--bloop-jvm**

JVM to use to start Bloop (e.g. 'system|11', 'temurin:17', …)
JVM to use to start Bloop (e.g. 'system|17', 'temurin:21', …)

**--bloop-working-dir**

Expand Down Expand Up @@ -1257,7 +1257,7 @@ Bloop global options file

**--bloop-jvm**

JVM to use to start Bloop (e.g. 'system|11', 'temurin:17', …)
JVM to use to start Bloop (e.g. 'system|17', 'temurin:21', …)

**--bloop-working-dir**

Expand Down Expand Up @@ -1852,7 +1852,7 @@ Bloop global options file

**--bloop-jvm**

JVM to use to start Bloop (e.g. 'system|11', 'temurin:17', …)
JVM to use to start Bloop (e.g. 'system|17', 'temurin:21', …)

**--bloop-working-dir**

Expand Down Expand Up @@ -2471,7 +2471,7 @@ Bloop global options file

**--bloop-jvm**

JVM to use to start Bloop (e.g. 'system|11', 'temurin:17', …)
JVM to use to start Bloop (e.g. 'system|17', 'temurin:21', …)

**--bloop-working-dir**

Expand Down Expand Up @@ -3099,7 +3099,7 @@ Bloop global options file

**--bloop-jvm**

JVM to use to start Bloop (e.g. 'system|11', 'temurin:17', …)
JVM to use to start Bloop (e.g. 'system|17', 'temurin:21', …)

**--bloop-working-dir**

Expand Down Expand Up @@ -3685,7 +3685,7 @@ Bloop global options file

**--bloop-jvm**

JVM to use to start Bloop (e.g. 'system|11', 'temurin:17', …)
JVM to use to start Bloop (e.g. 'system|17', 'temurin:21', …)

**--bloop-working-dir**

Expand Down Expand Up @@ -4346,7 +4346,7 @@ Bloop global options file

**--bloop-jvm**

JVM to use to start Bloop (e.g. 'system|11', 'temurin:17', …)
JVM to use to start Bloop (e.g. 'system|17', 'temurin:21', …)

**--bloop-working-dir**

Expand Down Expand Up @@ -5014,7 +5014,7 @@ Bloop global options file

**--bloop-jvm**

JVM to use to start Bloop (e.g. 'system|11', 'temurin:17', …)
JVM to use to start Bloop (e.g. 'system|17', 'temurin:21', …)

**--bloop-working-dir**

Expand Down Expand Up @@ -5947,7 +5947,7 @@ Bloop global options file

**--bloop-jvm**

JVM to use to start Bloop (e.g. 'system|11', 'temurin:17', …)
JVM to use to start Bloop (e.g. 'system|17', 'temurin:21', …)

**--bloop-working-dir**

Expand Down Expand Up @@ -6226,7 +6226,7 @@ Bloop global options file

**--bloop-jvm**

JVM to use to start Bloop (e.g. 'system|11', 'temurin:17', …)
JVM to use to start Bloop (e.g. 'system|17', 'temurin:21', …)

**--bloop-working-dir**

Expand Down
Loading