From f40cfd3e8362902a5a46cb16ef13007a8e283a28 Mon Sep 17 00:00:00 2001 From: Piotr Chabelski Date: Fri, 24 Jan 2025 10:43:41 +0100 Subject: [PATCH 1/3] Switch `graalvm-java17` to `graalvm-community` 17.0.9 --- build.sc | 6 +++--- project/deps.sc | 9 +++++---- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/build.sc b/build.sc index d5b6db9674..05c64576ef 100644 --- a/build.sc +++ b/build.sc @@ -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}" @@ -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} |} @@ -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}" diff --git a/project/deps.sc b/project/deps.sc index be58790152..477f70c762 100644 --- a/project/deps.sc +++ b/project/deps.sc @@ -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" @@ -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 From c106c9568d671b9d5c9fe5dac591bed2524b433c Mon Sep 17 00:00:00 2001 From: Piotr Chabelski Date: Fri, 24 Jan 2025 11:18:52 +0100 Subject: [PATCH 2/3] Deprecate `--graalvm-java-version` (it's unnecessary with `graalvm-community` being the default) --- .../scala/cli/commands/package0/Package.scala | 5 +-- .../commands/package0/PackageOptions.scala | 34 +++++++++++++------ .../commands/package0/PackagerOptions.scala | 1 + .../packaging/NativeImageOptions.scala | 5 ++- website/docs/commands/package.md | 3 +- website/docs/reference/cli-options.md | 2 +- 6 files changed, 31 insertions(+), 19 deletions(-) diff --git a/modules/cli/src/main/scala/scala/cli/commands/package0/Package.scala b/modules/cli/src/main/scala/scala/cli/commands/package0/Package.scala index cd2fe6cb74..cb633a0e86 100644 --- a/modules/cli/src/main/scala/scala/cli/commands/package0/Package.scala +++ b/modules/cli/src/main/scala/scala/cli/commands/package0/Package.scala @@ -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) @@ -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)) ) diff --git a/modules/cli/src/main/scala/scala/cli/commands/package0/PackageOptions.scala b/modules/cli/src/main/scala/scala/cli/commands/package0/PackageOptions.scala index d42760ebc7..b20edb9437 100644 --- a/modules/cli/src/main/scala/scala/cli/commands/package0/PackageOptions.scala +++ b/modules/cli/src/main/scala/scala/cli/commands/package0/PackageOptions.scala @@ -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 @@ -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), @@ -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) @@ -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( diff --git a/modules/cli/src/main/scala/scala/cli/commands/package0/PackagerOptions.scala b/modules/cli/src/main/scala/scala/cli/commands/package0/PackagerOptions.scala index 82a92097b1..937f2807b1 100644 --- a/modules/cli/src/main/scala/scala/cli/commands/package0/PackagerOptions.scala +++ b/modules/cli/src/main/scala/scala/cli/commands/package0/PackagerOptions.scala @@ -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)") diff --git a/modules/options/src/main/scala/scala/build/options/packaging/NativeImageOptions.scala b/modules/options/src/main/scala/scala/build/options/packaging/NativeImageOptions.scala index 96ba0894b2..56fcfee169 100644 --- a/modules/options/src/main/scala/scala/build/options/packaging/NativeImageOptions.scala +++ b/modules/options/src/main/scala/scala/build/options/packaging/NativeImageOptions.scala @@ -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" } } diff --git a/website/docs/commands/package.md b/website/docs/commands/package.md index 0dc585248b..1df1790d0a 100644 --- a/website/docs/commands/package.md +++ b/website/docs/commands/package.md @@ -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 diff --git a/website/docs/reference/cli-options.md b/website/docs/reference/cli-options.md index 29897eb22d..d595e5ec90 100644 --- a/website/docs/reference/cli-options.md +++ b/website/docs/reference/cli-options.md @@ -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` From 0537e6724117c82012efb339a830ff619bf18ae9 Mon Sep 17 00:00:00 2001 From: Piotr Chabelski Date: Fri, 24 Jan 2025 13:44:08 +0100 Subject: [PATCH 3/3] Bump Windows runners to `windows-2025` on the CI --- .github/workflows/ci.yml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 17f799c3a3..5c7d5bf2df 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -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: @@ -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: @@ -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: @@ -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: @@ -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: @@ -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: @@ -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 @@ -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