Skip to content

Switch from graalvm-java17 to graalvm-community #3459

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

Draft
wants to merge 3 commits into
base: main
Choose a base branch
from
Draft
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
16 changes: 8 additions & 8 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -801,7 +801,7 @@ jobs:

generate-windows-launcher:
timeout-minutes: 120
runs-on: "windows-2019"
runs-on: "windows-2025"
steps:
- uses: actions/checkout@v4
with:
Expand Down Expand Up @@ -833,7 +833,7 @@ jobs:
native-windows-tests-1:
needs: generate-windows-launcher
timeout-minutes: 120
runs-on: "windows-2019"
runs-on: "windows-2025"
steps:
- uses: actions/checkout@v4
with:
Expand Down Expand Up @@ -874,7 +874,7 @@ jobs:
native-windows-tests-2:
needs: generate-windows-launcher
timeout-minutes: 120
runs-on: "windows-2019"
runs-on: "windows-2025"
steps:
- uses: actions/checkout@v4
with:
Expand Down Expand Up @@ -915,7 +915,7 @@ jobs:
native-windows-tests-3:
needs: generate-windows-launcher
timeout-minutes: 120
runs-on: "windows-2019"
runs-on: "windows-2025"
steps:
- uses: actions/checkout@v4
with:
Expand Down Expand Up @@ -956,7 +956,7 @@ jobs:
native-windows-tests-4:
needs: generate-windows-launcher
timeout-minutes: 120
runs-on: "windows-2019"
runs-on: "windows-2025"
steps:
- uses: actions/checkout@v4
with:
Expand Down Expand Up @@ -997,7 +997,7 @@ jobs:
native-windows-tests-5:
needs: generate-windows-launcher
timeout-minutes: 120
runs-on: "windows-2019"
runs-on: "windows-2025"
steps:
- uses: actions/checkout@v4
with:
Expand Down Expand Up @@ -1575,7 +1575,7 @@ jobs:

vc-redist:
timeout-minutes: 15
runs-on: "windows-2019"
runs-on: "windows-2025"
if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name == 'Virtuslab/scala-cli'
steps:
- uses: actions/checkout@v4
Expand Down Expand Up @@ -1874,7 +1874,7 @@ jobs:
needs:
- launchers
- publish
runs-on: "windows-2019"
runs-on: "windows-2025"
if: startsWith(github.ref, 'refs/tags/v') && github.repository == 'VirtusLab/scala-cli'
steps:
- uses: actions/checkout@v4
Expand Down
6 changes: 3 additions & 3 deletions build.sc
Original file line number Diff line number Diff line change
Expand Up @@ -513,7 +513,7 @@ trait Core extends ScalaCliCrossSbtModule
| def maxScalacArgumentsCount = 5000
|
| def defaultGraalVMJavaVersion = ${deps.graalVmJavaVersion}
| def defaultGraalVMVersion = "${deps.graalVmVersion}"
| def defaultGraalVMVersion = "${deps.graalVmCommunityVersion}"
|
| def scalaCliSigningOrganization = "${Deps.signingCli.dep.module.organization.value}"
| def scalaCliSigningName = "${Deps.signingCli.dep.module.name.value}"
Expand Down Expand Up @@ -865,7 +865,7 @@ trait Cli extends CrossSbtModule with ProtoBuildModule with CliLaunchers
| def ammoniteVersionForScala3Lts = "${Deps.Versions.ammoniteForScala3Lts}"
| def defaultScalafmtVersion = "${Deps.scalafmtCli.dep.version}"
| def defaultGraalVMJavaVersion = "${deps.graalVmJavaVersion}"
| def defaultGraalVMVersion = "${deps.graalVmVersion}"
| def defaultGraalVMVersion = "${deps.graalVmCommunityVersion}"
| def scalaPyVersion = "${Deps.scalaPy.dep.version}"
| def signingCliJvmVersion = ${Deps.Versions.signingCliJvmVersion}
|}
Expand Down Expand Up @@ -1065,7 +1065,7 @@ trait CliIntegration extends SbtModule with ScalaCliPublishModule with HasTests
| def semanticDbJavacPluginVersion = "${Deps.semanticDbJavac.dep.version}"
| def ammoniteVersion = "${Deps.ammonite.dep.version}"
| def defaultGraalVMJavaVersion = "${deps.graalVmJavaVersion}"
| def defaultGraalVMVersion = "${deps.graalVmVersion}"
| def defaultGraalVMVersion = "${deps.graalVmCommunityVersion}"
| def scalaPyVersion = "${Deps.scalaPy.dep.version}"
| def scalaPyMaxScalaNative = "${Deps.Versions.maxScalaNativeForScalaPy}"
| def bloopVersion = "${Deps.bloopRifle.dep.version}"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ object Package extends ScalaCommand[PackageOptions] with BuildCommandHelpers {
override def sharedOptions(options: PackageOptions): Option[SharedOptions] = Some(options.shared)
override def scalaSpecificationLevel = SpecificationLevel.RESTRICTED
override def buildOptions(options: PackageOptions): Option[BuildOptions] =
Some(options.baseBuildOptions.orExit(options.shared.logger))
Some(options.baseBuildOptions(options.shared.logger).orExit(options.shared.logger))
override def runCommand(options: PackageOptions, args: RemainingArgs, logger: Logger): Unit = {
val inputs = options.shared.inputs(args.remaining).orExit(logger)
CurrentParams.workspaceOpt = Some(inputs.workspace)
Expand Down Expand Up @@ -166,7 +166,8 @@ object Package extends ScalaCommand[PackageOptions] with BuildCommandHelpers {
}

def finalBuildOptions(options: PackageOptions): BuildOptions = {
val initialOptions = options.finalBuildOptions.orExit(options.shared.logger)
val initialOptions =
options.finalBuildOptions(options.shared.logger).orExit(options.shared.logger)
val finalBuildOptions = initialOptions.copy(scalaOptions =
initialOptions.scalaOptions.copy(defaultScalaVersion = Some(defaultScalaVersion))
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import scala.build.compiler.{ScalaCompilerMaker, SimpleScalaCompilerMaker}
import scala.build.errors.{BuildException, CompositeBuildException, ModuleFormatError}
import scala.build.options.*
import scala.build.options.packaging.*
import scala.build.{BuildThreads, Positioned}
import scala.build.{BuildThreads, Logger, Positioned}
import scala.cli.commands.package0.PackageOptions
import scala.cli.commands.shared.*
import scala.cli.commands.tags
Expand Down Expand Up @@ -177,7 +177,7 @@ final case class PackageOptions(
.sequence
.left.map(CompositeBuildException(_))

def baseBuildOptions: Either[BuildException, BuildOptions] = either {
def baseBuildOptions(logger: Logger): Either[BuildException, BuildOptions] = either {
val baseOptions = value(shared.buildOptions())
baseOptions.copy(
mainClass = mainClass.mainClass.filter(_.nonEmpty),
Expand Down Expand Up @@ -222,13 +222,25 @@ final case class PackageOptions(
cmd = packager.dockerCmd,
isDockerEnabled = Some(docker)
),
nativeImageOptions = NativeImageOptions(
graalvmJvmId = packager.graalvmJvmId.map(_.trim).filter(_.nonEmpty),
graalvmJavaVersion = packager.graalvmJavaVersion.filter(_ > 0),
graalvmVersion = packager.graalvmVersion.map(_.trim).filter(_.nonEmpty),
graalvmArgs =
packager.graalvmArgs.map(_.trim).filter(_.nonEmpty).map(Positioned.commandLine)
),
nativeImageOptions = {
val graalVmVersion = packager.graalvmVersion.map(_.trim).filter(_.nonEmpty)
val graalVmJavaVersion = packager.graalvmJvmId.map(_.trim)
for {
vmVersion <- graalVmVersion
javaVersion <- graalVmJavaVersion
if !vmVersion.startsWith(javaVersion)
} logger.message(
s"""GraalVM Java major version ($javaVersion) does not match GraalVM version ($vmVersion).
|GraalVM version should start with the Java major version to be used.""".stripMargin
)
NativeImageOptions(
graalvmJvmId = packager.graalvmJvmId.map(_.trim).filter(_.nonEmpty),
graalvmJavaVersion = packager.graalvmJavaVersion.filter(_ > 0),
graalvmVersion = graalVmVersion,
graalvmArgs =
packager.graalvmArgs.map(_.trim).filter(_.nonEmpty).map(Positioned.commandLine)
)
},
useDefaultScaladocOptions = defaultScaladocOptions
),
addRunnerDependencyOpt = Some(false)
Expand All @@ -241,8 +253,8 @@ final case class PackageOptions(
)
}

def finalBuildOptions: Either[BuildException, BuildOptions] = either {
val baseOptions = value(baseBuildOptions)
def finalBuildOptions(logger: Logger): Either[BuildException, BuildOptions] = either {
val baseOptions = value(baseBuildOptions(logger))
baseOptions.copy(
notForBloopOptions = baseOptions.notForBloopOptions.copy(
packageOptions = baseOptions.notForBloopOptions.packageOptions.copy(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -144,6 +144,7 @@ final case class PackagerOptions(
@ValueDescription("java-major-version")
@Tag(tags.restricted)
@Tag(tags.inShortHelp)
@Tag(tags.deprecated("graalvmJavaVersion"))
graalvmJavaVersion: Option[Int] = None,
@Group(HelpGroup.NativeImage.toString)
@HelpMessage(s"GraalVM version to use to build GraalVM native images (${Constants.defaultGraalVMVersion} by default)")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,8 @@ final case class NativeImageOptions(
) {
lazy val jvmId: String =
graalvmJvmId.getOrElse {
val javaVersion = graalvmJavaVersion.getOrElse(Constants.defaultGraalVMJavaVersion)
val version = graalvmVersion.getOrElse(Constants.defaultGraalVMVersion)
s"graalvm-java$javaVersion:$version"
val version = graalvmVersion.getOrElse(Constants.defaultGraalVMVersion)
s"graalvm-community:$version"
}
}

Expand Down
9 changes: 5 additions & 4 deletions project/deps.sc
Original file line number Diff line number Diff line change
Expand Up @@ -248,7 +248,7 @@ object Deps {
.exclude(("org.scala-lang.modules", "scala-collection-compat_2.13"))
def slf4jNop = ivy"org.slf4j:slf4j-nop:2.0.16"
def sttp = ivy"com.softwaremill.sttp.client3:core_2.13:3.10.3"
def svm = ivy"org.graalvm.nativeimage:svm:$graalVmVersion"
def svm = ivy"org.graalvm.nativeimage:svm:$graalSvmVersion"
def swoval = ivy"com.swoval:file-tree-views:2.1.12"
def testInterface = ivy"org.scala-sbt:test-interface:1.0"
val toolkitVersion = "0.6.0"
Expand All @@ -268,9 +268,10 @@ object Deps {
def scalafixInterfaces = ivy"ch.epfl.scala:scalafix-interfaces:${Versions.scalafix}"
}

def graalVmVersion = "22.3.1"
def graalVmJavaVersion = Java.defaultJava
def graalVmJvmId = s"graalvm-java$graalVmJavaVersion:$graalVmVersion"
def graalVmJavaVersion = Java.defaultJava
def graalVmCommunityVersion = s"$graalVmJavaVersion.0.9"
def graalSvmVersion = "22.3.1"
def graalVmJvmId = s"graalvm-community:$graalVmCommunityVersion"

def csDockerVersion = Deps.Versions.coursierCli

Expand Down
3 changes: 1 addition & 2 deletions website/docs/commands/package.md
Original file line number Diff line number Diff line change
Expand Up @@ -286,8 +286,7 @@ Note that Scala CLI automatically downloads and unpacks a GraalVM distribution
using the [JVM management capabilities of coursier](https://get-coursier.io/docs/cli-java).

Several options can be passed to adjust the GraalVM version used by Scala CLI:
- `--graalvm-jvm-id` accepts a JVM identifier, such as `graalvm-java17:22.0.0` or `graalvm-java17:21` (short versions accepted).
- `--graalvm-java-version` makes it possible to specify only a target Java version, such as `11` or `17` (note that only specific Java versions may be supported by the default GraalVM version that Scala CLI picks)
- `--graalvm-jvm-id` accepts a JVM identifier, such as `graalvm-community:17.0.9` or `graalvm-java17:23.0.2`.
- `--graalvm-version` makes it possible to specify only a GraalVM version, such as `22.0.0` or `21` (short versions accepted)
- `--graalvm-args` makes it possible to pass args to GraalVM version

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 @@ -978,7 +978,7 @@ GraalVM Java major version to use to build GraalVM native images (17 by default)

### `--graalvm-version`

GraalVM version to use to build GraalVM native images (22.3.1 by default)
GraalVM version to use to build GraalVM native images (17.0.9 by default)

### `--graalvm-jvm-id`

Expand Down
Loading