Skip to content

Commit 9061f30

Browse files
authored
Merge pull request #3055 from Gedochao/maintenance/envs-refactor
Add environment variable help under `--envs-help` & refactor environment variable usage
2 parents 11c2a28 + cbdafbf commit 9061f30

File tree

34 files changed

+307
-60
lines changed

34 files changed

+307
-60
lines changed

modules/build/src/main/scala/scala/build/ConsoleBloopBuildClient.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import java.nio.file.Paths
88

99
import scala.build.errors.Severity
1010
import scala.build.internal.WrapperParams
11-
import scala.build.internal.util.ConsoleUtils.ScalaCliConsole
11+
import scala.build.internals.ConsoleUtils.ScalaCliConsole
1212
import scala.build.options.Scope
1313
import scala.build.postprocessing.LineConversion.scalaLineToScLine
1414
import scala.collection.mutable

modules/build/src/main/scala/scala/build/Directories.scala

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import coursier.cache.shaded.dirs.{GetWinDirs, ProjectDirectories}
44

55
import scala.build.errors.ConfigDbException
66
import scala.build.internal.JniGetWinDirs
7+
import scala.build.internals.EnvVar
78
import scala.cli.config.ConfigDb
89
import scala.util.Properties
910

@@ -19,7 +20,7 @@ trait Directories {
1920
def cacheDir: os.Path
2021

2122
final def dbPath: os.Path =
22-
Option(System.getenv("SCALA_CLI_CONFIG"))
23+
EnvVar.ScalaCli.config.valueOpt
2324
.filter(_.trim.nonEmpty)
2425
.map(os.Path(_, os.pwd))
2526
.getOrElse(secretsDir / Directories.defaultDbFileName)
@@ -95,7 +96,7 @@ object Directories {
9596
SubDir(dir)
9697

9798
lazy val directories: Directories =
98-
Option(System.getenv("SCALA_CLI_HOME")).filter(_.trim.nonEmpty) match {
99+
EnvVar.ScalaCli.home.valueOpt.filter(_.trim.nonEmpty) match {
99100
case None =>
100101
scala.build.Directories.default()
101102
case Some(homeDir) =>

modules/build/src/main/scala/scala/build/internal/Runner.scala

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import java.nio.file.{Files, Path, Paths}
1212
import scala.build.EitherCps.{either, value}
1313
import scala.build.Logger
1414
import scala.build.errors._
15+
import scala.build.internals.EnvVar
1516
import scala.build.testrunner.{AsmTestRunner, TestRunner}
1617
import scala.util.{Failure, Properties, Success}
1718

@@ -191,12 +192,12 @@ object Runner {
191192
if (Paths.get(app).getNameCount >= 2) Some(asIs)
192193
else {
193194
def pathEntries =
194-
Option(System.getenv("PATH"))
195+
EnvVar.Misc.path.valueOpt
195196
.iterator
196197
.flatMap(_.split(File.pathSeparator).iterator)
197198
def pathSep =
198199
if (Properties.isWin)
199-
Option(System.getenv("PATHEXT"))
200+
EnvVar.Misc.pathExt.valueOpt
200201
.iterator
201202
.flatMap(_.split(File.pathSeparator).iterator)
202203
else Iterator("")

modules/build/src/main/scala/scala/build/internal/zip/WrappedZipInputStream.scala

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ package scala.build.internal.zip
33
import java.io.{Closeable, InputStream}
44
import java.util.zip.ZipEntry
55

6+
import scala.build.internals.EnvVar
7+
68
/*
79
* juz.ZipInputStream is buggy on Arch Linux from native images (CRC32 calculation issues,
810
* see oracle/graalvm#4479), so we use a custom ZipInputStream with disabled CRC32 calculation.
@@ -35,7 +37,7 @@ object WrappedZipInputStream {
3537
case "true" | "1" => true
3638
case _ => false
3739
}
38-
Option(System.getenv("SCALA_CLI_VENDORED_ZIS")).map(toBoolean)
40+
EnvVar.ScalaCli.vendoredZipInputStream.valueOpt.map(toBoolean)
3941
.orElse(sys.props.get("scala-cli.zis.vendored").map(toBoolean))
4042
.getOrElse(false)
4143
}

modules/build/src/test/scala/scala/build/tests/util/BloopServer.scala

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package scala.build.tests.util
33
import bloop.rifle.BloopRifleConfig
44
import coursier.cache.FileCache
55

6+
import scala.build.internals.EnvVar
67
import scala.build.{Bloop, Logger}
78
import scala.util.Properties
89

@@ -30,7 +31,7 @@ object BloopServer {
3031
// which can have issues with the directory of "java" in the PATH,
3132
// if it contains '+' or '%' IIRC.
3233
// So we hardcode the path to "java" here.
33-
Option(System.getenv("JAVA_HOME"))
34+
EnvVar.Java.javaHome.valueOpt
3435
.map(os.Path(_, os.pwd))
3536
.map(_ / "bin" / "java")
3637
.map(_.toString)

modules/cli/src/main/scala/scala/cli/ScalaCli.scala

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import java.util.Locale
1111

1212
import scala.build.Directories
1313
import scala.build.internal.Constants
14+
import scala.build.internals.EnvVar
1415
import scala.cli.config.{ConfigDb, Keys}
1516
import scala.cli.internal.Argv0
1617
import scala.cli.javaLauncher.JavaLauncherCli
@@ -45,7 +46,7 @@ object ScalaCli {
4546
powerEntry <- configDb.get(Keys.power).toOption
4647
power <- powerEntry
4748
} yield power
48-
val isPowerEnv = Option(System.getenv("SCALA_CLI_POWER")).flatMap(_.toBooleanOption)
49+
val isPowerEnv = EnvVar.ScalaCli.power.valueOpt.flatMap(_.toBooleanOption)
4950
val isPower = isPowerEnv.orElse(isPowerConfigDb).getOrElse(false)
5051
!isPower
5152
}
@@ -94,8 +95,8 @@ object ScalaCli {
9495
baos.toByteArray
9596
}
9697

97-
private def isCI = System.getenv("CI") != null
98-
private def printStackTraces = Option(System.getenv("SCALA_CLI_PRINT_STACK_TRACES"))
98+
private def isCI = EnvVar.Internal.ci.valueOpt.nonEmpty
99+
private def printStackTraces = EnvVar.ScalaCli.printStackTraces.valueOpt
99100
.map(_.toLowerCase(Locale.ROOT))
100101
.exists {
101102
case "true" | "1" => true
@@ -157,7 +158,7 @@ object ScalaCli {
157158
// for https://github.com/VirtusLab/scala-cli/issues/828
158159
System.err.println(
159160
s"""Running
160-
| export SCALA_CLI_VENDORED_ZIS=true
161+
| export ${EnvVar.ScalaCli.vendoredZipInputStream.name}=true
161162
|before running $fullRunnerName might fix the issue.
162163
|""".stripMargin
163164
)
@@ -209,7 +210,8 @@ object ScalaCli {
209210
}
210211

211212
// load java properties from JAVA_OPTS and JDK_JAVA_OPTIONS environment variables
212-
val javaOpts = sys.env.get("JAVA_OPTS").toSeq ++ sys.env.get("JDK_JAVA_OPTIONS").toSeq
213+
val javaOpts: Seq[String] =
214+
EnvVar.Java.javaOpts.valueOpt.toSeq ++ EnvVar.Java.jdkJavaOpts.valueOpt.toSeq
213215

214216
val ignoredJavaOpts =
215217
javaOpts
@@ -224,7 +226,8 @@ object ScalaCli {
224226
}.flatten
225227
if ignoredJavaOpts.nonEmpty then
226228
System.err.println(
227-
s"Warning: Only java properties are supported in JAVA_OPTS and JDK_JAVA_OPTIONS environment variables. Other options are ignored: ${ignoredJavaOpts.mkString(", ")}"
229+
s"Warning: Only java properties are supported in ${EnvVar.Java.javaOpts.name} and ${EnvVar
230+
.Java.jdkJavaOpts.name} environment variables. Other options are ignored: ${ignoredJavaOpts.mkString(", ")}"
228231
)
229232
}
230233

modules/cli/src/main/scala/scala/cli/commands/ScalaCommand.scala

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ import scala.build.errors.BuildException
2020
import scala.build.input.{ScalaCliInvokeData, SubCommand}
2121
import scala.build.internal.util.WarningMessages
2222
import scala.build.internal.{Constants, Runner}
23-
import scala.build.internals.FeatureType
23+
import scala.build.internals.{EnvVar, FeatureType}
2424
import scala.build.options.{BuildOptions, ScalacOpt, Scope}
2525
import scala.build.{Artifacts, Directories, Logger, Positioned, ReplArtifacts}
2626
import scala.cli.commands.default.LegacyScalaOptions
@@ -284,6 +284,11 @@ abstract class ScalaCommand[T <: HasGlobalOptions](implicit myParser: Parser[T],
284284
sys.exit(exitCode.orExit(logger))
285285
}
286286

287+
private def maybePrintEnvsHelp(options: T): Unit =
288+
if sharedOptions(options).exists(_.helpGroups.helpEnvs) then
289+
println(EnvVar.helpMessage(isPower = allowRestrictedFeatures))
290+
sys.exit(0)
291+
287292
override def helpFormat: HelpFormat = ScalaCliHelp.helpFormat
288293

289294
override val messages: Help[T] =
@@ -378,6 +383,7 @@ abstract class ScalaCommand[T <: HasGlobalOptions](implicit myParser: Parser[T],
378383
maybePrintSimpleScalacOutput(options, bo)
379384
maybePrintToolsHelp(options, bo)
380385
}
386+
maybePrintEnvsHelp(options)
381387
logger.flushExperimentalWarnings
382388
runCommand(options, remainingArgs, options.global.logging.logger)
383389
}

modules/cli/src/main/scala/scala/cli/commands/WatchUtil.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ package scala.cli.commands
22

33
import scala.annotation.tailrec
44
import scala.build.internal.StdInConcurrentReader
5-
import scala.build.internal.util.ConsoleUtils.ScalaCliConsole
5+
import scala.build.internals.ConsoleUtils.ScalaCliConsole
66

77
object WatchUtil {
88

modules/cli/src/main/scala/scala/cli/commands/addpath/AddPath.scala

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import coursier.env.{EnvironmentUpdate, ProfileUpdater}
66
import java.io.File
77

88
import scala.build.Logger
9+
import scala.build.internals.EnvVar
910
import scala.cli.CurrentParams
1011
import scala.cli.commands.{CustomWindowsEnvVarUpdater, ScalaCommand}
1112
import scala.util.Properties
@@ -16,7 +17,10 @@ object AddPath extends ScalaCommand[AddPathOptions] {
1617
override def runCommand(options: AddPathOptions, args: RemainingArgs, logger: Logger): Unit = {
1718
if args.all.isEmpty then logger.error("Nothing to do")
1819
else {
19-
val update = EnvironmentUpdate(Nil, Seq("PATH" -> args.all.mkString(File.pathSeparator)))
20+
val update = EnvironmentUpdate(
21+
Nil,
22+
Seq(EnvVar.Misc.path.name -> args.all.mkString(File.pathSeparator))
23+
)
2024
val didUpdate =
2125
if (Properties.isWin) {
2226
val updater = CustomWindowsEnvVarUpdater().withUseJni(Some(coursier.paths.Util.useJni()))

modules/cli/src/main/scala/scala/cli/commands/bsp/Bsp.scala

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import scala.build.*
99
import scala.build.bsp.{BspReloadableOptions, BspThreads}
1010
import scala.build.errors.BuildException
1111
import scala.build.input.Inputs
12+
import scala.build.internals.EnvVar
1213
import scala.build.options.{BuildOptions, Scope}
1314
import scala.cli.commands.ScalaCommand
1415
import scala.cli.commands.publish.ConfigUtil.*
@@ -63,7 +64,7 @@ object Bsp extends ScalaCommand[BspOptions] {
6364
.flatMap(_.get(Keys.power).toOption)
6465
.flatten
6566
.getOrElse(false)
66-
val envPowerMode = latestEnvs.get("SCALA_CLI_POWER").exists(_.toBoolean)
67+
val envPowerMode = latestEnvs.get(EnvVar.ScalaCli.power.name).exists(_.toBoolean)
6768
val launcherPowerArg = latestLauncherOptions.powerOptions.power
6869
val subCommandPowerArg = latestSharedOptions.powerOptions.power
6970
val latestPowerMode = configPowerMode || launcherPowerArg || subCommandPowerArg || envPowerMode
@@ -208,7 +209,7 @@ object Bsp extends ScalaCommand[BspOptions] {
208209
baseOptions.notForBloopOptions.addRunnerDependencyOpt.orElse(Some(false))
209210
)
210211
)
211-
val withEnvs = envs.get("JAVA_HOME")
212+
val withEnvs = envs.get(EnvVar.Java.javaHome.name)
212213
.filter(_ => withDefaults.javaOptions.javaHomeOpt.isEmpty)
213214
.map(javaHome =>
214215
withDefaults.copy(javaOptions =

0 commit comments

Comments
 (0)