Skip to content

Commit 4cd066a

Browse files
committed
Add a --version option with compile-time SN version value embeddal
1 parent 86e7e33 commit 4cd066a

File tree

11 files changed

+59
-33
lines changed

11 files changed

+59
-33
lines changed

build.sbt

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
scalaVersion := "2.12.15"
22

3-
// TODO remove and settle for one version after release
3+
// TODO remove and settle for one newest after release
44
val nativeVersion = sys.env.get("SN_CLI_VERSION") match {
5-
case Some(value) => "0.4.1"
5+
case Some(value) => value
66
case None => "0.4.0"
77
}
88
val versionTag =
@@ -20,14 +20,17 @@ inThisBuild(
2020
)
2121

2222
lazy val cli = project
23-
.in(file(s"cli"))
23+
.in(file("cli"))
24+
.enablePlugins(BuildInfoPlugin)
2425
.settings(
2526
moduleName := "scala-native-cli",
2627
scalacOptions += "-Ywarn-unused:imports",
2728
libraryDependencies += "org.scala-native" %% "tools" % nativeVersion,
2829
libraryDependencies += "com.github.alexarchambault" %% "case-app" % "2.1.0-M10",
2930
libraryDependencies += "org.scalatest" %% "scalatest" % "3.1.1" % Test,
3031
assembly / assemblyJarName := "scala-native-cli.jar", // Used for integration tests.
32+
buildInfoKeys := Seq[BuildInfoKey]("nativeVersion" -> nativeVersion),
33+
buildInfoPackage := "scala.scalanative.cli.options",
3134
Compile / unmanagedSourceDirectories += baseDirectory.value / s"version_${versionTag}/src/main/scala",
3235
Test / unmanagedSourceDirectories += baseDirectory.value / s"version_${versionTag}/src/test/scala"
3336
)

cli/src/main/scala/scala/scalanative/cli/ScalaNativeCli.scala

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,16 +7,25 @@ import scala.scalanative.cli.utils.NativeConfigParserImplicits._
77
import scala.scalanative.cli.options.CliOptions
88
import caseapp.core.app.CaseApp
99
import caseapp.core.RemainingArgs
10+
import scala.scalanative.cli.options.BuildInfo
1011

1112
object ScalaNativeCli extends CaseApp[CliOptions] {
1213

1314
def run(options: CliOptions, args: RemainingArgs) = {
14-
val positionalArgs = args.all
15-
val buildOptionsMaybe = ConfigConverter.convert(options, positionalArgs)
15+
if (options.misc.version) {
16+
println(BuildInfo.nativeVersion)
17+
} else {
18+
println(scala.scalanative.cli.options.BuildInfo.nativeVersion)
19+
val positionalArgs = args.all
20+
val buildOptionsMaybe = ConfigConverter.convert(options, positionalArgs)
1621

17-
buildOptionsMaybe.map { buildOptions =>
18-
Scope { implicit scope =>
19-
Build.build(buildOptions.config, buildOptions.outpath)
22+
buildOptionsMaybe match {
23+
case Left(thrown) =>
24+
System.err.println(thrown.getMessage())
25+
case Right(buildOptions) =>
26+
Scope { implicit scope =>
27+
Build.build(buildOptions.config, buildOptions.outpath)
28+
}
2029
}
2130
}
2231
}

cli/src/main/scala/scala/scalanative/cli/options/CliOptions.scala

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,5 +11,7 @@ case class CliOptions(
1111
@Recurse
1212
nativeConfig: NativeConfigOptions,
1313
@Recurse
14-
logger: LoggerOptions
14+
logger: LoggerOptions,
15+
@Recurse
16+
misc: MiscOptions
1517
)
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package scala.scalanative.cli.options
2+
3+
import caseapp.HelpMessage
4+
import caseapp.Group
5+
6+
case class MiscOptions(
7+
@Group("Help")
8+
@HelpMessage("Print scala-native-cli version and exit")
9+
val version: Boolean = false
10+
)

cli/src/test/scala/scala/scalanative/cli/ConfigConverterTest.scala

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,19 +11,22 @@ import scala.scalanative.build.GC
1111
import scala.scalanative.cli.utils.NativeConfigParserImplicits
1212
import scala.scalanative.build.Mode
1313
import scala.scalanative.build.LTO
14+
import scala.scalanative.cli.options.MiscOptions
1415

1516
class ConfigConverterTest extends AnyFlatSpec {
1617
val dummyLoggerOptions = LoggerOptions()
1718
val dummyNativeConfigOptions = NativeConfigOptions()
1819
val dummyConfigOptions = ConfigOptions()
20+
val dummyMiscOptions = MiscOptions()
1921

2022
val dummyArguments =
2123
Seq("$Main", "A.nir", "B.nir")
2224

2325
val dummyCliOptions = CliOptions(
2426
config = dummyConfigOptions,
2527
nativeConfig = dummyNativeConfigOptions,
26-
logger = dummyLoggerOptions
28+
logger = dummyLoggerOptions,
29+
misc = dummyMiscOptions
2730
)
2831

2932
"ArgParser" should "parse default options" in {
@@ -70,7 +73,8 @@ class ConfigConverterTest extends AnyFlatSpec {
7073
NativeConfigOptions(gc =
7174
NativeConfigParserImplicits.gcParser(None, gcString).right.get
7275
),
73-
dummyLoggerOptions
76+
dummyLoggerOptions,
77+
dummyMiscOptions
7478
)
7579
val config =
7680
ConfigConverter.convert(options, dummyArguments).right.get.config
@@ -89,7 +93,8 @@ class ConfigConverterTest extends AnyFlatSpec {
8993
NativeConfigOptions(mode =
9094
NativeConfigParserImplicits.modeParser(None, modeString).right.get
9195
),
92-
dummyLoggerOptions
96+
dummyLoggerOptions,
97+
dummyMiscOptions
9398
)
9499
val config =
95100
ConfigConverter.convert(options, dummyArguments).right.get.config
@@ -107,7 +112,8 @@ class ConfigConverterTest extends AnyFlatSpec {
107112
NativeConfigOptions(lto =
108113
NativeConfigParserImplicits.ltoParser(None, ltoString).right.get
109114
),
110-
dummyLoggerOptions
115+
dummyLoggerOptions,
116+
dummyMiscOptions
111117
)
112118
val config =
113119
ConfigConverter.convert(options, dummyArguments).right.get.config
@@ -131,7 +137,8 @@ class ConfigConverterTest extends AnyFlatSpec {
131137
clang = Some(clangString),
132138
clangPP = Some(clangPPString)
133139
),
134-
dummyLoggerOptions
140+
dummyLoggerOptions,
141+
dummyMiscOptions
135142
)
136143

137144
val nativeConfig =

cli/version_0.4.0/src/main/scala/scala/scalanative/cli/options/NativeVersion.scala

Lines changed: 0 additions & 5 deletions
This file was deleted.

cli/version_newer/src/main/scala/scala/scalanative/cli/options/NativeVersion.scala

Lines changed: 0 additions & 5 deletions
This file was deleted.

project/plugins.sbt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
11
addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "1.0.0")
2+
addSbtPlugin("com.eed3si9n" % "sbt-buildinfo" % "0.10.0")

scala-native-cli-integration-test-runner/src/main/scala/scala/scalanative/cli/testplugin/ScalaNativeCliTestRunnerPlugin.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ object ScalaNativeCliTestRunnerPlugin extends AutoPlugin {
1616
object autoImport {
1717
val nativeVersion = System.getProperty("scala-native-cli-native-version")
1818

19-
val runTest = inputKey[Unit](
19+
val runCli = inputKey[Unit](
2020
"Runs scala-native-cli with classpath and selected other options via cli arguments"
2121
)
2222
}

scala-native-cli-integration-test-runner/src/main/scala/scala/scalanative/cli/testplugin/TestRunnerPluginInternal.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ object TestRunnerPluginInternal {
3030
inConfig(Compile)(configSettings)
3131

3232
lazy val configSettings: Seq[Setting[_]] = Seq(
33-
runTest := {
33+
runCli := {
3434
val args = spaceDelimited("<arg>").parsed
3535

3636
val classpath = fullClasspath.value.map(_.data.toString())

0 commit comments

Comments
 (0)