Skip to content

Commit dbba5e5

Browse files
authored
feat(plugin): new generate-graalvm-metadata Maven goal (#1759)
### 📝 Description Create new `GenerateGraalVmMetadataMojo` that introduces new `generate-graalvm-metadata` goal. New goal generates GraalVM reachability metadata for `graphql-kotlin` servers. Usage (this only generates metadata, in order to generate native image you will also need to configure `org.graalvm.buildtools:native-maven-plugin`, see example integration) ```xml <plugin> <groupId>com.expediagroup</groupId> <artifactId>graphql-kotlin-maven-plugin</artifactId> <version>${graphql-kotlin.version}</version> <executions> <execution> <goals> <goal>generate-graalvm-metadata</goal> </goals> <configuration> <!-- list of packages that can contain our GraphQL schema --> <packages>com.expediagroup.graalvm</packages> <!-- application main class name --> <mainClassName>com.example.ApplicationKt</mainClassName> </configuration> </execution> </executions> </plugin> ``` ### 🔗 Related Issues Corresponding Gradle plugin PR -> #1743
1 parent 2bbc501 commit dbba5e5

File tree

43 files changed

+1195
-162
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

43 files changed

+1195
-162
lines changed

.github/workflows/graalvm-integration.yml

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
name: GraaLVM Integration Tests
1+
name: GraalVM Integration Tests
22

33
on:
44
workflow_call:
@@ -20,7 +20,7 @@ jobs:
2020
working-directory: integration/graalvm
2121
strategy:
2222
matrix:
23-
server: ['ktor-graalvm-server']
23+
server: ['ktor-graalvm-server', 'maven-graalvm-server']
2424

2525
steps:
2626
- name: Checkout Repository
@@ -40,20 +40,23 @@ jobs:
4040
- name: Set up Gradle cache
4141
uses: gradle/gradle-build-action@v2
4242

43-
- name: Build server
44-
run: ./gradlew :${server}:build :${server}:nativeCompile
43+
- name: Build native image
44+
id: build_server
45+
run: |
46+
./gradlew :${server}:buildGraalVmNativeImage
47+
echo "NATIVE_IMAGE=$(echo "${server}/build/native/nativeCompile/${server}")" >> $GITHUB_OUTPUT
4548
env:
4649
server: ${{ matrix.server }}
4750

48-
- name: Build and start the native image
51+
- name: Start the native image
4952
id: start_server
5053
run: |
5154
set -x
5255
echo "starting server"
53-
./${server}/build/native/nativeCompile/${server} &
56+
./${nativeImage} &
5457
echo "SERVER_PID=$(echo $!)" >> $GITHUB_OUTPUT
5558
env:
56-
server: ${{ matrix.server }}
59+
nativeImage: ${{ steps.build_server.outputs.NATIVE_IMAGE }}
5760

5861
- name: Integration Test
5962
run: |

buildSrc/src/main/kotlin/com.expediagroup.graphql.conventions.gradle.kts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import org.gradle.accessors.dm.LibrariesForLibs
22
import org.jetbrains.dokka.gradle.DokkaTask
33
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
4-
import java.time.Duration
54
import java.time.Instant
65

76
plugins {

integration/graalvm/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,4 +17,5 @@ allprojects {
1717
project.ext[key.toString()] = value
1818
}
1919
}
20+
project.version = project.ext["version"]!!
2021
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
2+
3+
@Suppress("DSL_SCOPE_VIOLATION") // TODO: remove once KTIJ-19369 / Gradle#22797 is fixed
4+
plugins {
5+
alias(libs.plugins.kotlin.jvm)
6+
`maven-publish`
7+
}
8+
9+
dependencies {
10+
implementation("com.expediagroup", "graphql-kotlin-server")
11+
implementation("com.expediagroup", "graphql-kotlin-hooks-provider")
12+
}
13+
14+
tasks.withType<KotlinCompile> {
15+
kotlinOptions.jvmTarget = "17"
16+
}
17+
18+
// required for maven test
19+
publishing {
20+
publications {
21+
create<MavenPublication>("maven") {
22+
from(components["java"])
23+
}
24+
}
25+
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
* limitations under the License.
1515
*/
1616

17-
package com.expediagroup.graalvm.ktor.hooks
17+
package com.expediagroup.graalvm.hooks
1818

1919
import com.expediagroup.graphql.generator.hooks.SchemaGeneratorHooks
2020
import com.expediagroup.graphql.plugin.schema.hooks.SchemaGeneratorHooksProvider
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
* limitations under the License.
1515
*/
1616

17-
package com.expediagroup.graalvm.ktor.schema
17+
package com.expediagroup.graalvm.schema
1818

1919
import com.expediagroup.graphql.generator.scalars.ID
2020
import com.expediagroup.graphql.server.operations.Query
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,9 @@
1414
* limitations under the License.
1515
*/
1616

17-
package com.expediagroup.graalvm.ktor.schema
17+
package com.expediagroup.graalvm.schema
1818

19-
import com.expediagroup.graalvm.ktor.schema.dataloader.EXAMPLE_LOADER
19+
import com.expediagroup.graalvm.schema.dataloader.EXAMPLE_LOADER
2020
import com.expediagroup.graphql.generator.scalars.ID
2121
import com.expediagroup.graphql.server.operations.Query
2222
import graphql.schema.DataFetchingEnvironment
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
* limitations under the License.
1515
*/
1616

17-
package com.expediagroup.graalvm.ktor.schema
17+
package com.expediagroup.graalvm.schema
1818

1919
import com.expediagroup.graphql.server.operations.Mutation
2020

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
* limitations under the License.
1515
*/
1616

17-
package com.expediagroup.graalvm.ktor.schema
17+
package com.expediagroup.graalvm.schema
1818

1919
import com.expediagroup.graphql.server.operations.Query
2020
import java.util.UUID
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
* limitations under the License.
1515
*/
1616

17-
package com.expediagroup.graalvm.ktor.schema
17+
package com.expediagroup.graalvm.schema
1818

1919
import com.expediagroup.graphql.server.operations.Query
2020

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
* limitations under the License.
1515
*/
1616

17-
package com.expediagroup.graalvm.ktor.schema
17+
package com.expediagroup.graalvm.schema
1818

1919
import com.expediagroup.graphql.server.operations.Query
2020
import graphql.GraphqlErrorBuilder
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
* limitations under the License.
1515
*/
1616

17-
package com.expediagroup.graalvm.ktor.schema
17+
package com.expediagroup.graalvm.schema
1818

1919
import com.expediagroup.graphql.generator.scalars.ID
2020
import com.expediagroup.graphql.server.operations.Query
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
* limitations under the License.
1515
*/
1616

17-
package com.expediagroup.graalvm.ktor.schema
17+
package com.expediagroup.graalvm.schema
1818

1919
import com.expediagroup.graphql.server.operations.Query
2020

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,10 @@
1414
* limitations under the License.
1515
*/
1616

17-
package com.expediagroup.graalvm.ktor.schema
17+
package com.expediagroup.graalvm.schema
1818

19-
import com.expediagroup.graalvm.ktor.schema.model.InputOnly
20-
import com.expediagroup.graalvm.ktor.schema.model.OutputOnly
19+
import com.expediagroup.graalvm.schema.model.InputOnly
20+
import com.expediagroup.graalvm.schema.model.OutputOnly
2121
import com.expediagroup.graphql.server.operations.Query
2222

2323
/**
Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,14 @@
1414
* limitations under the License.
1515
*/
1616

17-
package com.expediagroup.graalvm.ktor.schema
17+
package com.expediagroup.graalvm.schema
1818

19-
import com.expediagroup.graalvm.ktor.schema.model.ExampleInterface
20-
import com.expediagroup.graalvm.ktor.schema.model.ExampleUnion
21-
import com.expediagroup.graalvm.ktor.schema.model.FirstImpl
22-
import com.expediagroup.graalvm.ktor.schema.model.FirstUnionMember
23-
import com.expediagroup.graalvm.ktor.schema.model.SecondImpl
24-
import com.expediagroup.graalvm.ktor.schema.model.SecondUnionMember
19+
import com.expediagroup.graalvm.schema.model.ExampleInterface
20+
import com.expediagroup.graalvm.schema.model.ExampleUnion
21+
import com.expediagroup.graalvm.schema.model.FirstImpl
22+
import com.expediagroup.graalvm.schema.model.FirstUnionMember
23+
import com.expediagroup.graalvm.schema.model.SecondImpl
24+
import com.expediagroup.graalvm.schema.model.SecondUnionMember
2525
import com.expediagroup.graphql.server.operations.Query
2626
import kotlin.random.Random
2727

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
* limitations under the License.
1515
*/
1616

17-
package com.expediagroup.graalvm.ktor.schema
17+
package com.expediagroup.graalvm.schema
1818

1919
import com.expediagroup.graphql.server.operations.Query
2020
import java.util.UUID
Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,11 @@
1414
* limitations under the License.
1515
*/
1616

17-
package com.expediagroup.graalvm.ktor.schema
17+
package com.expediagroup.graalvm.schema
1818

19-
import com.expediagroup.graalvm.ktor.schema.model.InputAndOutput
20-
import com.expediagroup.graalvm.ktor.schema.model.InputOnly
21-
import com.expediagroup.graalvm.ktor.schema.model.OutputOnly
19+
import com.expediagroup.graalvm.schema.model.InputAndOutput
20+
import com.expediagroup.graalvm.schema.model.InputOnly
21+
import com.expediagroup.graalvm.schema.model.OutputOnly
2222
import com.expediagroup.graphql.server.operations.Query
2323

2424
/**
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
* limitations under the License.
1515
*/
1616

17-
package com.expediagroup.graalvm.ktor.schema.dataloader
17+
package com.expediagroup.graalvm.schema.dataloader
1818

1919
import com.expediagroup.graphql.dataloader.KotlinDataLoader
2020
import com.expediagroup.graphql.generator.scalars.ID
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
* limitations under the License.
1515
*/
1616

17-
package com.expediagroup.graalvm.ktor.schema.model
17+
package com.expediagroup.graalvm.schema.model
1818

1919
import com.expediagroup.graphql.generator.scalars.ID
2020
import java.util.UUID
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
* limitations under the License.
1515
*/
1616

17-
package com.expediagroup.graalvm.ktor.schema.model
17+
package com.expediagroup.graalvm.schema.model
1818

1919
import java.util.UUID
2020
import kotlin.random.Random
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
* limitations under the License.
1515
*/
1616

17-
package com.expediagroup.graalvm.ktor.schema.model
17+
package com.expediagroup.graalvm.schema.model
1818

1919
import kotlin.random.Random
2020

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,6 @@
1414
* limitations under the License.
1515
*/
1616

17-
package com.expediagroup.graalvm.ktor.schema.model
17+
package com.expediagroup.graalvm.schema.model
1818

1919
data class InputOnly(val id: Int)
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
* limitations under the License.
1515
*/
1616

17-
package com.expediagroup.graalvm.ktor.schema.model
17+
package com.expediagroup.graalvm.schema.model
1818

1919
import kotlin.random.Random
2020

Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
com.expediagroup.graalvm.hooks.CustomHooksProvider

integration/graalvm/ktor-graalvm-server/build.gradle.kts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ plugins {
1111

1212
dependencies {
1313
implementation("com.expediagroup", "graphql-kotlin-ktor-server")
14-
implementation("com.expediagroup", "graphql-kotlin-hooks-provider")
14+
implementation(projects.commonGraalvmServer)
1515
implementation(libs.logback)
1616
implementation(libs.ktor.server.cio)
1717
testImplementation(libs.junit.api)
@@ -48,6 +48,11 @@ graalvmNative {
4848

4949
graphql {
5050
graalVm {
51-
packages = listOf("com.expediagroup.graalvm.ktor")
51+
packages = listOf("com.expediagroup.graalvm")
5252
}
5353
}
54+
55+
tasks.register("buildGraalVmNativeImage") {
56+
dependsOn("build")
57+
dependsOn("nativeCompile")
58+
}

integration/graalvm/ktor-graalvm-server/src/main/kotlin/com/expediagroup/graalvm/ktor/Application.kt

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -16,28 +16,28 @@
1616

1717
package com.expediagroup.graalvm.ktor
1818

19+
import com.expediagroup.graalvm.hooks.CustomHooks
1920
import com.expediagroup.graalvm.ktor.context.CustomContextFactory
20-
import com.expediagroup.graalvm.ktor.hooks.CustomHooks
21-
import com.expediagroup.graalvm.ktor.schema.ArgumentQuery
22-
import com.expediagroup.graalvm.ktor.schema.AsyncQuery
23-
import com.expediagroup.graalvm.ktor.schema.BasicMutation
2421
import com.expediagroup.graalvm.ktor.schema.ContextualQuery
25-
import com.expediagroup.graalvm.ktor.schema.CustomScalarQuery
26-
import com.expediagroup.graalvm.ktor.schema.EnumQuery
27-
import com.expediagroup.graalvm.ktor.schema.ErrorQuery
28-
import com.expediagroup.graalvm.ktor.schema.IdQuery
29-
import com.expediagroup.graalvm.ktor.schema.model.ExampleInterface
30-
import com.expediagroup.graalvm.ktor.schema.model.ExampleUnion
31-
import com.expediagroup.graalvm.ktor.schema.InnerClassQuery
32-
import com.expediagroup.graalvm.ktor.schema.ListQuery
33-
import com.expediagroup.graalvm.ktor.schema.PolymorphicQuery
34-
import com.expediagroup.graalvm.ktor.schema.ScalarQuery
35-
import com.expediagroup.graalvm.ktor.schema.TypesQuery
36-
import com.expediagroup.graalvm.ktor.schema.dataloader.ExampleDataLoader
37-
import com.expediagroup.graalvm.ktor.schema.model.FirstImpl
38-
import com.expediagroup.graalvm.ktor.schema.model.FirstUnionMember
39-
import com.expediagroup.graalvm.ktor.schema.model.SecondImpl
40-
import com.expediagroup.graalvm.ktor.schema.model.SecondUnionMember
22+
import com.expediagroup.graalvm.schema.ArgumentQuery
23+
import com.expediagroup.graalvm.schema.AsyncQuery
24+
import com.expediagroup.graalvm.schema.BasicMutation
25+
import com.expediagroup.graalvm.schema.CustomScalarQuery
26+
import com.expediagroup.graalvm.schema.EnumQuery
27+
import com.expediagroup.graalvm.schema.ErrorQuery
28+
import com.expediagroup.graalvm.schema.IdQuery
29+
import com.expediagroup.graalvm.schema.InnerClassQuery
30+
import com.expediagroup.graalvm.schema.ListQuery
31+
import com.expediagroup.graalvm.schema.PolymorphicQuery
32+
import com.expediagroup.graalvm.schema.ScalarQuery
33+
import com.expediagroup.graalvm.schema.TypesQuery
34+
import com.expediagroup.graalvm.schema.dataloader.ExampleDataLoader
35+
import com.expediagroup.graalvm.schema.model.ExampleInterface
36+
import com.expediagroup.graalvm.schema.model.ExampleUnion
37+
import com.expediagroup.graalvm.schema.model.FirstImpl
38+
import com.expediagroup.graalvm.schema.model.FirstUnionMember
39+
import com.expediagroup.graalvm.schema.model.SecondImpl
40+
import com.expediagroup.graalvm.schema.model.SecondUnionMember
4141
import com.expediagroup.graphql.dataloader.KotlinDataLoaderRegistryFactory
4242
import com.expediagroup.graphql.server.ktor.GraphQL
4343
import com.expediagroup.graphql.server.ktor.graphQLGetRoute
@@ -53,7 +53,7 @@ fun main() {
5353
embeddedServer(CIO, port = 8080, host = "0.0.0.0") {
5454
install(GraphQL) {
5555
schema {
56-
packages = listOf("com.expediagroup.graalvm.ktor")
56+
packages = listOf("com.expediagroup.graalvm")
5757
queries = listOf(
5858
ArgumentQuery(),
5959
AsyncQuery(),

integration/graalvm/ktor-graalvm-server/src/main/resources/META-INF/services/com.expediagroup.graphql.plugin.schema.hooks.SchemaGeneratorHooksProvider

Lines changed: 0 additions & 1 deletion
This file was deleted.

integration/graalvm/ktor-graalvm-server/src/test/kotlin/com/expediagroup/graalvm/ktor/schema/TypesQueryTest.kt

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,22 @@
1+
/*
2+
* Copyright 2023 Expedia, Inc
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* https://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
116
package com.expediagroup.graalvm.ktor.schema
217

3-
import com.expediagroup.graalvm.ktor.schema.model.InputOnly
18+
import com.expediagroup.graalvm.schema.TypesQuery
19+
import com.expediagroup.graalvm.schema.model.InputOnly
420
import com.expediagroup.graphql.server.ktor.GraphQL
521
import com.expediagroup.graphql.server.ktor.graphQLPostRoute
622
import com.expediagroup.graphql.server.types.GraphQLRequest
@@ -25,7 +41,7 @@ class TypesQueryTest {
2541
application {
2642
install(GraphQL) {
2743
schema {
28-
packages = listOf("com.expediagroup.graalvm.ktor.schema")
44+
packages = listOf("com.expediagroup.graalvm")
2945
queries = listOf(TypesQuery())
3046
typeHierarchy = emptyMap()
3147
}
Binary file not shown.

0 commit comments

Comments
 (0)