Skip to content

Commit 8d20222

Browse files
authored
Add additional packaging.graalvm* directives (#4225)
* Add additional packaging.graalvm* directives * Add tests for invalid packaging.graalvmJavaVersion
1 parent 8ed45ff commit 8d20222

3 files changed

Lines changed: 77 additions & 5 deletions

File tree

modules/build/src/test/scala/scala/build/tests/PackagingUsingDirectiveTests.scala

Lines changed: 38 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ class PackagingUsingDirectiveTests extends TestUtil.ScalaCliBuildSuite {
3434
}
3535
}
3636

37-
test("graalvm packaging") {
37+
test("graalvm packaging jvmId") {
3838
val inputs = TestInputs(
3939
os.rel / "p.sc" ->
4040
"""//> using packaging.packageType graalvm
@@ -51,6 +51,43 @@ class PackagingUsingDirectiveTests extends TestUtil.ScalaCliBuildSuite {
5151
}
5252
}
5353

54+
test("graalvm packaging valid javaVersion") {
55+
val inputs = TestInputs(
56+
os.rel / "p.sc" ->
57+
"""//> using packaging.packageType graalvm
58+
|//> using packaging.graalvmJavaVersion 23
59+
|//> using packaging.graalvmVersion 23.0.2
60+
|
61+
|def foo() = println("hello foo")
62+
|""".stripMargin
63+
)
64+
inputs.withLoadedBuild(buildOptions, buildThreads, bloopConfig) { (_, _, maybeBuild) =>
65+
val nativeImageOpt = maybeBuild.options.notForBloopOptions.packageOptions.nativeImageOptions
66+
expect(nativeImageOpt.jvmId == "graalvm-java23:23.0.2")
67+
}
68+
}
69+
70+
test("graalvm packaging invalid javaVersion") {
71+
val inputs = TestInputs(
72+
os.rel / "p.sc" ->
73+
"""//> using packaging.packageType graalvm
74+
|//> using packaging.graalvmJavaVersion 7
75+
|
76+
|def foo() = println("hello foo")
77+
|""".stripMargin
78+
)
79+
inputs.withBuild(buildOptions, buildThreads, bloopConfig) { (_, _, maybeBuild) =>
80+
maybeBuild match
81+
case Left(e) =>
82+
expect(
83+
e.message.contains("graalvm-java-version") &&
84+
e.message.contains("an integer greater than 7")
85+
)
86+
case Right(_) =>
87+
fail("Expected build to fail with invalid graalvmJavaVersion")
88+
}
89+
}
90+
5491
test("output") {
5592
val output = "foo"
5693
val inputs = TestInputs(

modules/directives/src/main/scala/scala/build/preprocessing/directives/Packaging.scala

Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,9 @@ import scala.util.Try
2424
@DirectiveExamples("//> using packaging.output foo")
2525
@DirectiveExamples("//> using packaging.provided org.apache.spark::spark-sql")
2626
@DirectiveExamples("//> using packaging.graalvmArgs --no-fallback")
27-
@DirectiveExamples("//> using packaging.graalvmJvmId graalvm-community:23.0.2")
27+
@DirectiveExamples("//> using packaging.graalvmVersion 17.0.9")
28+
@DirectiveExamples("//> using packaging.graalvmJavaVersion 17")
29+
@DirectiveExamples("//> using packaging.graalvmJvmId graalvm-java17:17.0.9")
2830
@DirectiveExamples("//> using packaging.dockerFrom openjdk:11")
2931
@DirectiveExamples("//> using packaging.dockerImageTag 1.0.0")
3032
@DirectiveExamples("//> using packaging.dockerImageRegistry virtuslab")
@@ -39,6 +41,9 @@ import scala.util.Try
3941
"""using packaging.packageType [package type]
4042
|using packaging.output [destination path]
4143
|using packaging.provided [module]
44+
|using packaging.graalvmVersion [graalvm version]
45+
|using packaging.graalvmJavaVersion [graalvm java version]
46+
|using packaging.graalvmJvmId [graalvm jvm id]
4247
|using packaging.graalvmArgs [args]
4348
|using packaging.dockerFrom [base docker image]
4449
|using packaging.dockerImageTag [image tag]
@@ -55,6 +60,10 @@ import scala.util.Try
5560
|
5661
|`//> using packaging.graalvmArgs` _args_
5762
|
63+
|`//> using packaging.graalvmVersion` _graalvm-version_
64+
|
65+
|`//> using packaging.graalvmJavaVersion` _graalvm-java-version_
66+
|
5867
|`//> using packaging.graalvmJvmId` _graalvm-jvm-id_
5968
|
6069
|`//> using packaging.dockerFrom` _base-docker-image_
@@ -79,6 +88,8 @@ final case class Packaging(
7988
output: Option[String] = None,
8089
provided: List[Positioned[String]] = Nil,
8190
graalvmArgs: List[Positioned[String]] = Nil,
91+
graalvmVersion: Option[String] = None,
92+
graalvmJavaVersion: Option[Positioned[String]] = None,
8293
graalvmJvmId: Option[String] = None,
8394
dockerFrom: Option[String] = None,
8495
dockerImageTag: Option[String] = None,
@@ -120,9 +131,23 @@ final case class Packaging(
120131
}
121132
.sequence
122133
.left.map(CompositeBuildException(_))
134+
val maybeGraalVMJavaVersion = graalvmJavaVersion
135+
.map { version =>
136+
version.value.toIntOption
137+
.filter(_ > 7)
138+
.toRight {
139+
new MalformedInputError(
140+
"graalvm-java-version",
141+
version.value,
142+
"an integer greater than 7",
143+
positions = version.positions
144+
)
145+
}
146+
}
147+
.sequence
123148

124-
val (packageTypeOpt, output0, provided0) = value {
125-
(maybePackageTypeOpt, maybeOutput, maybeProvided)
149+
val (packageTypeOpt, output0, provided0, graalVMJavaVersion0) = value {
150+
(maybePackageTypeOpt, maybeOutput, maybeProvided, maybeGraalVMJavaVersion)
126151
.traverseN
127152
.left.map(CompositeBuildException(_))
128153
}
@@ -162,6 +187,8 @@ final case class Packaging(
162187
extraDirectories = extraDirectories
163188
),
164189
nativeImageOptions = NativeImageOptions(
190+
graalvmVersion = graalvmVersion,
191+
graalvmJavaVersion = graalVMJavaVersion0,
165192
graalvmJvmId = graalvmJvmId,
166193
graalvmArgs = graalvmArgs
167194
)

website/docs/reference/directives.md

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -290,6 +290,10 @@ Set parameters for packaging
290290

291291
`//> using packaging.graalvmArgs` _args_
292292

293+
`//> using packaging.graalvmVersion` _graalvm-version_
294+
295+
`//> using packaging.graalvmJavaVersion` _graalvm-java-version_
296+
293297
`//> using packaging.graalvmJvmId` _graalvm-jvm-id_
294298

295299
`//> using packaging.dockerFrom` _base-docker-image_
@@ -316,7 +320,11 @@ Set parameters for packaging
316320

317321
`//> using packaging.graalvmArgs --no-fallback`
318322

319-
`//> using packaging.graalvmJvmId graalvm-community:23.0.2`
323+
`//> using packaging.graalvmVersion 17.0.9`
324+
325+
`//> using packaging.graalvmJavaVersion 17`
326+
327+
`//> using packaging.graalvmJvmId graalvm-java17:17.0.9`
320328

321329
`//> using packaging.dockerFrom openjdk:11`
322330

0 commit comments

Comments
 (0)