diff --git a/build.sc b/build.sc index 5f387e1065..c48a19ff93 100644 --- a/build.sc +++ b/build.sc @@ -1039,6 +1039,7 @@ trait CliIntegration extends SbtModule with ScalaCliPublishModule with HasTests | |/** Build-time constants. Generated by mill. */ |object Constants { + | def scalaCliVersion = "${publishVersion()}" | def allJavaVersions = Seq(${Java.allJavaVersions.sorted.mkString(", ")}) | def bspVersion = "${Deps.bsp4j.dep.version}" | def bloopMinimumJvmVersion = ${Java.minimumBloopJava} diff --git a/modules/build/src/main/scala/scala/build/Build.scala b/modules/build/src/main/scala/scala/build/Build.scala index 493ddf3333..6eb7584d9e 100644 --- a/modules/build/src/main/scala/scala/build/Build.scala +++ b/modules/build/src/main/scala/scala/build/Build.scala @@ -1090,13 +1090,18 @@ object Build { ) else options + val params = value(options0.scalaParams) val scopeParams = if (scope == Scope.Main) Nil else Seq(scope.name) - buildClient.setProjectParams(scopeParams ++ value(options0.projectParams)) + val scalaCliVersionLog = + if options0.internal.logCliVersion then Seq(s"scala-cli ${Constants.version}") else Nil + buildClient.setProjectParams( + scopeParams ++ value(options0.projectParams) ++ scalaCliVersionLog + ) val classesDir0 = classesDir(inputs.workspace, inputs.projectName, scope) diff --git a/modules/cli/src/main/scala/scala/cli/commands/shared/LoggingOptions.scala b/modules/cli/src/main/scala/scala/cli/commands/shared/LoggingOptions.scala index 47a7834f5c..4a9fd5794b 100644 --- a/modules/cli/src/main/scala/scala/cli/commands/shared/LoggingOptions.scala +++ b/modules/cli/src/main/scala/scala/cli/commands/shared/LoggingOptions.scala @@ -20,7 +20,11 @@ final case class LoggingOptions( @Group(HelpGroup.Logging.toString) @Tag(tags.implementation) @HelpMessage("Use progress bars") - progress: Option[Boolean] = None + progress: Option[Boolean] = None, + @Group(HelpGroup.Logging.toString) + @Tag(tags.implementation) + @HelpMessage("Logs scala-cli version on project build") + logCliVersion: Boolean = false ) { // format: on diff --git a/modules/cli/src/main/scala/scala/cli/commands/shared/SharedOptions.scala b/modules/cli/src/main/scala/scala/cli/commands/shared/SharedOptions.scala index e5dbb62197..361b7955e2 100644 --- a/modules/cli/src/main/scala/scala/cli/commands/shared/SharedOptions.scala +++ b/modules/cli/src/main/scala/scala/cli/commands/shared/SharedOptions.scala @@ -441,7 +441,8 @@ final case class SharedOptions( strictBloopJsonCheck = strictBloopJsonCheck, interactive = Some(() => interactive), exclude = exclude.map(Positioned.commandLine), - offline = coursier.getOffline() + offline = coursier.getOffline(), + logCliVersion = logging.logCliVersion ), notForBloopOptions = bo.PostBuildOptions( scalaJsLinkerOptions = linkerOptions(js), diff --git a/modules/integration/src/test/scala/scala/cli/integration/CompileTestDefinitions.scala b/modules/integration/src/test/scala/scala/cli/integration/CompileTestDefinitions.scala index 23a3ccc5e5..c237c3f251 100644 --- a/modules/integration/src/test/scala/scala/cli/integration/CompileTestDefinitions.scala +++ b/modules/integration/src/test/scala/scala/cli/integration/CompileTestDefinitions.scala @@ -822,6 +822,33 @@ abstract class CompileTestDefinitions } } + test("logs the scala-cli version when the --log-cli-version option is used") { + val filename = "Main.scala" + val inputs = TestInputs( + os.rel / filename -> + """|object Main extends App { + | val msg: String = "1" + |} + |""".stripMargin + ) + inputs.fromRoot { root => + val result = os.proc(TestUtil.cli, "compile", ".", "--log-cli-version", extraOptions).call( + cwd = root, + check = false, + mergeErrIntoOut = true + ) + + assertEquals( + TestUtil.fullStableOutput(result), + s"""|Compiling project (Scala $actualScalaVersion, JVM (${Constants + .defaultGraalVMJavaVersion}), scala-cli ${Constants.scalaCliVersion}) + |Compiled project (Scala $actualScalaVersion, JVM (${Constants + .defaultGraalVMJavaVersion}), scala-cli ${Constants.scalaCliVersion})""".stripMargin + ) + + } + } + test("i3389") { val filename = "Main.scala" val inputs = TestInputs( diff --git a/modules/options/src/main/scala/scala/build/options/InternalOptions.scala b/modules/options/src/main/scala/scala/build/options/InternalOptions.scala index f9757edba7..c9d7501b1d 100644 --- a/modules/options/src/main/scala/scala/build/options/InternalOptions.scala +++ b/modules/options/src/main/scala/scala/build/options/InternalOptions.scala @@ -26,7 +26,8 @@ final case class InternalOptions( keepResolution: Boolean = false, extraSourceFiles: Seq[Positioned[os.Path]] = Nil, exclude: Seq[Positioned[String]] = Nil, - offline: Option[Boolean] = None + offline: Option[Boolean] = None, + logCliVersion: Boolean = false ) { def verbosityOrDefault: Int = verbosity.getOrElse(0) def strictBloopJsonCheckOrDefault: Boolean = diff --git a/website/docs/reference/cli-options.md b/website/docs/reference/cli-options.md index e92bdd4142..206274d2aa 100644 --- a/website/docs/reference/cli-options.md +++ b/website/docs/reference/cli-options.md @@ -721,6 +721,10 @@ Decrease logging verbosity Use progress bars +### `--log-cli-version` + +Logs scala-cli version on project build + ## Main class options Available in commands: diff --git a/website/docs/reference/scala-command/cli-options.md b/website/docs/reference/scala-command/cli-options.md index 0600d62471..e63d9efa2d 100644 --- a/website/docs/reference/scala-command/cli-options.md +++ b/website/docs/reference/scala-command/cli-options.md @@ -640,6 +640,12 @@ Decrease logging verbosity Use progress bars +### `--log-cli-version` + +`IMPLEMENTATION specific` per Scala Runner specification + +Logs scala-cli version on project build + ## Main class options Available in commands: diff --git a/website/docs/reference/scala-command/runner-specification.md b/website/docs/reference/scala-command/runner-specification.md index 9dd16292e5..878aed3d07 100644 --- a/website/docs/reference/scala-command/runner-specification.md +++ b/website/docs/reference/scala-command/runner-specification.md @@ -394,6 +394,10 @@ Aliases: `-q` Use progress bars +**--log-cli-version** + +Logs scala-cli version on project build + **--js-no-opt** Disable optimalisation for Scala.js, overrides `--js-mode` @@ -787,6 +791,10 @@ Aliases: `-q` Use progress bars +**--log-cli-version** + +Logs scala-cli version on project build + **--suppress-experimental-feature-warning** Suppress warnings about using experimental features @@ -1176,6 +1184,10 @@ Aliases: `-q` Use progress bars +**--log-cli-version** + +Logs scala-cli version on project build + **--js-no-opt** Disable optimalisation for Scala.js, overrides `--js-mode` @@ -1777,6 +1789,10 @@ Aliases: `-q` Use progress bars +**--log-cli-version** + +Logs scala-cli version on project build + **--js-no-opt** Disable optimalisation for Scala.js, overrides `--js-mode` @@ -2408,6 +2424,10 @@ Aliases: `-q` Use progress bars +**--log-cli-version** + +Logs scala-cli version on project build + **--js-no-opt** Disable optimalisation for Scala.js, overrides `--js-mode` @@ -3048,6 +3068,10 @@ Aliases: `-q` Use progress bars +**--log-cli-version** + +Logs scala-cli version on project build + **--js-no-opt** Disable optimalisation for Scala.js, overrides `--js-mode` @@ -3640,6 +3664,10 @@ Aliases: `-q` Use progress bars +**--log-cli-version** + +Logs scala-cli version on project build + **--js-no-opt** Disable optimalisation for Scala.js, overrides `--js-mode` @@ -4307,6 +4335,10 @@ Aliases: `-q` Use progress bars +**--log-cli-version** + +Logs scala-cli version on project build + **--js-no-opt** Disable optimalisation for Scala.js, overrides `--js-mode` @@ -4632,6 +4664,10 @@ Aliases: `-q` Use progress bars +**--log-cli-version** + +Logs scala-cli version on project build + **--suppress-experimental-feature-warning** Suppress warnings about using experimental features @@ -4987,6 +5023,10 @@ Aliases: `-q` Use progress bars +**--log-cli-version** + +Logs scala-cli version on project build + **--js-no-opt** Disable optimalisation for Scala.js, overrides `--js-mode` @@ -5316,6 +5356,10 @@ Aliases: `-q` Use progress bars +**--log-cli-version** + +Logs scala-cli version on project build + **--suppress-experimental-feature-warning** Suppress warnings about using experimental features @@ -5407,6 +5451,10 @@ Aliases: `-q` Use progress bars +**--log-cli-version** + +Logs scala-cli version on project build + **--suppress-experimental-feature-warning** Suppress warnings about using experimental features @@ -5486,6 +5534,10 @@ Aliases: `-q` Use progress bars +**--log-cli-version** + +Logs scala-cli version on project build + **--suppress-experimental-feature-warning** Suppress warnings about using experimental features @@ -5589,6 +5641,10 @@ Aliases: `-q` Use progress bars +**--log-cli-version** + +Logs scala-cli version on project build + **--suppress-experimental-feature-warning** Suppress warnings about using experimental features @@ -5950,6 +6006,10 @@ Aliases: `-q` Use progress bars +**--log-cli-version** + +Logs scala-cli version on project build + **--js-no-opt** Disable optimalisation for Scala.js, overrides `--js-mode` @@ -6279,6 +6339,10 @@ Aliases: `-q` Use progress bars +**--log-cli-version** + +Logs scala-cli version on project build + **--suppress-experimental-feature-warning** Suppress warnings about using experimental features @@ -6472,6 +6536,10 @@ Aliases: `-q` Use progress bars +**--log-cli-version** + +Logs scala-cli version on project build + **--suppress-experimental-feature-warning** Suppress warnings about using experimental features @@ -6551,6 +6619,10 @@ Aliases: `-q` Use progress bars +**--log-cli-version** + +Logs scala-cli version on project build + **--suppress-experimental-feature-warning** Suppress warnings about using experimental features