Skip to content

Commit 3a51056

Browse files
authored
Refactored structure and more Kotlin examples (#42)
* Cleanup CI * Directory refactoring * Refactored GraalVM examples Updated and fixed parallel build due to GraalVM plugin issue in build.gradle Improved and reinforced grouping.gradle and settings.gradle Updated CI * Cleanup * Improved README.md * Added more Kotlin examples * Cleanup * Added README.md * Downgrade JDK to 21 * Downgrade JDK to 21 * Reinforce CI * Changed Cassandra test extension for Scylla for better performance Updated testcontainers-extensions version Minor fixes * Try downgrade GraalVM plugin * Cleanup * Limit workers for CI * Disable parallel for Github cause it always fail there * Disable parallel for Github cause it always fail there * Minor cleanup * Minor cleanup * Fixed native configs * Added full Kotlin tests Updated test dependencies Code style * Fixed dep for zeebe * Fixed root containers * Cleanup * Fixes * Fixes * Separated * Minor cleanup * Minor cleanup and dep fix * Added test driver * Reinforced and improved and fixed and cleanup * Kafka as separate * Cleanup
1 parent 162eb11 commit 3a51056

1,245 files changed

Lines changed: 21542 additions & 792 deletions

File tree

Some content is hidden

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

.github/workflows/test-master.yml

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,18 +6,23 @@ on:
66
- "master"
77

88
jobs:
9-
test:
9+
build-tests:
1010
runs-on: ubuntu-latest
1111
strategy:
1212
matrix:
13-
task: [ "database", "client", "server", "graalvm", "kotlin", "other" ]
14-
name: Running tests for ${{ matrix.task }}
13+
java: [ "21" ]
14+
type: [ "Examples" ]
15+
lang: [ "Java", "Kotlin" ]
16+
feature: [ "Database", "Client", "Server", "Graalvm", "Kafka", "Other" ]
17+
name: Pull Request Java ${{ matrix.java }} for ${{ matrix.type }}-${{ matrix.lang }}-${{ matrix.feature }}
18+
env:
19+
GRADLE_TASK_SUFFIX: ${{ matrix.type }}${{ matrix.lang }}${{ matrix.feature }}
1520
steps:
1621
- uses: actions/checkout@v4
1722
- name: JDK setup
1823
uses: actions/setup-java@v4
1924
with:
20-
java-version: "17"
25+
java-version: ${{ matrix.java }}
2126
distribution: "adopt"
2227

2328
- name: Gradle setup
@@ -26,11 +31,11 @@ jobs:
2631
cache-read-only: ${{ github.ref != 'refs/heads/master' }}
2732
gradle-home-cache-cleanup: ${{ github.ref == 'refs/heads/master' }}
2833

29-
- name: Gradle classes
30-
run: "./gradlew classes-${{ matrix.task }} --scan"
34+
- name: Gradle build classes
35+
run: "./gradlew classes${{ env.GRADLE_TASK_SUFFIX }} --no-daemon --no-parallel --scan --stacktrace"
3136

32-
- name: Gradle tests classes
33-
run: "./gradlew testClasses-${{ matrix.task }} --scan"
37+
- name: Gradle build test classes
38+
run: "./gradlew testClasses${{ env.GRADLE_TASK_SUFFIX }} --no-daemon --no-parallel --scan --stacktrace"
3439

35-
- name: Gradle tests
36-
run: "./gradlew test-${{ matrix.task }} jacocoTestReport --no-parallel --scan"
40+
- name: Gradle run tests
41+
run: "./gradlew test${{ env.GRADLE_TASK_SUFFIX }} --no-daemon --no-parallel --scan --stacktrace"

.github/workflows/test-pr.yml

Lines changed: 13 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,13 @@ jobs:
1717
runs-on: ubuntu-latest
1818
strategy:
1919
matrix:
20-
java: [ "17" ]
21-
task: [ "database", "client", "server", "graalvm", "kotlin", "other" ]
22-
name: Pull Request Java ${{ matrix.java }} for ${{ matrix.task }}
20+
java: [ "21" ]
21+
type: [ "Examples" ]
22+
lang: [ "Java", "Kotlin" ]
23+
feature: [ "Database", "Client", "Server", "Graalvm", "Kafka", "Other" ]
24+
name: Pull Request Java ${{ matrix.java }} for ${{ matrix.type }}-${{ matrix.lang }}-${{ matrix.feature }}
25+
env:
26+
GRADLE_TASK_SUFFIX: ${{ matrix.type }}${{ matrix.lang }}${{ matrix.feature }}
2327
steps:
2428
- uses: actions/checkout@v4
2529
- name: JDK setup
@@ -34,18 +38,11 @@ jobs:
3438
cache-read-only: ${{ github.ref != 'refs/heads/master' }}
3539
gradle-home-cache-cleanup: ${{ github.ref == 'refs/heads/master' }}
3640

37-
- name: Gradle classes
38-
run: "./gradlew classes-${{ matrix.task }} --scan"
41+
- name: Gradle build classes
42+
run: "./gradlew classes${{ env.GRADLE_TASK_SUFFIX }} --no-daemon --no-parallel --scan --stacktrace"
3943

40-
- name: Gradle tests classes
41-
run: "./gradlew testClasses-${{ matrix.task }} --scan"
44+
- name: Gradle build test classes
45+
run: "./gradlew testClasses${{ env.GRADLE_TASK_SUFFIX }} --no-daemon --no-parallel --scan --stacktrace"
4246

43-
- name: Gradle tests
44-
run: "./gradlew test-${{ matrix.task }} jacocoTestReport --no-parallel --scan"
45-
46-
- name: Report tests
47-
if: ${{ matrix.java }} == "17"
48-
uses: EnricoMi/publish-unit-test-result-action@v2
49-
with:
50-
files: |
51-
**/test-results/**/*.xml
47+
- name: Gradle run tests
48+
run: "./gradlew test${{ env.GRADLE_TASK_SUFFIX }} --no-daemon --no-parallel --scan --stacktrace"

README.md

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,21 @@
11
[![Maven Central](https://img.shields.io/maven-central/v/ru.tinkoff.kora/common.svg)](https://central.sonatype.com/artifact/ru.tinkoff.kora/common)
22
[![GitHub Action](https://github.com/kora-projects/kora-examples/workflows/Build%20Master/badge.svg)](https://github.com/kora-projects/kora-examples/actions?query=workflow%3A%22Build%20Master%22++)
33

4-
# Kora examples
4+
# Kora Examples
55

6-
В данном репозитории собраны примеры сервисов использующих различные модули [фреймворка Kora](https://kora-projects.github.io/kora-docs/ru/).
6+
В данном репозитории собраны примеры сервисов, использующих различные модули [фреймворка Kora](https://kora-projects.github.io/kora-docs/ru/).
77
Каждый Gradle модуль является независимым сервисом.
88

99
Здесь можно посмотреть на реализации модулей фреймворка Kora на Java и Kotlin языках, протестировать их функционал,
1010
использовать примеры как пособие по начальному погружению в Kora.
1111
[Хотите знать больше?](https://kora-projects.github.io/kora-docs/ru/)
1212

13+
## Где находятся примеры
14+
15+
- Java: [`examples/java`](examples/java)
16+
- Kotlin: [`examples/kotlin`](examples/kotlin)
17+
- GraalVM: [`examples/graalvm`](examples/graalvm)
18+
1319
[Описание](https://kora-projects.github.io/kora-docs/ru/) | [Документация](https://kora-projects.github.io/kora-docs/ru/documentation/general/) | [Ознакомление](https://kora-projects.github.io/kora-docs/ru/examples/hello-world/)
1420

1521
---
@@ -21,4 +27,10 @@ Here you can look at implementations of Kora framework modules in Java and Kotli
2127
use the examples as a guide for initial immersion in Kora.
2228
[Would you like to know more?](https://kora-projects.github.io/kora-docs/en/)
2329

30+
## Where examples are located
31+
32+
- Java: [`examples/java`](examples/java)
33+
- Kotlin: [`examples/kotlin`](examples/kotlin)
34+
- GraalVM: [`examples/graalvm`](examples/graalvm)
35+
2436
[Home](https://kora-projects.github.io/kora-docs/en/) | [Documentation](https://kora-projects.github.io/kora-docs/en/documentation/general/) | [Hello World](https://kora-projects.github.io/kora-docs/en/examples/hello-world/)

build.gradle

Lines changed: 39 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
1+
import org.gradle.api.services.BuildService
2+
import org.gradle.api.services.BuildServiceParameters
3+
14
plugins {
25
id "com.diffplug.spotless" version "6.19.0"
36
id "com.asarkar.gradle.build-time-tracker" version "4.3.0"
4-
id "org.graalvm.buildtools.native" version "0.11.1" apply false // or dependsOn fails in graalvm examples
7+
id "org.graalvm.buildtools.native" version "0.11.5" apply false // or dependsOn fails in graalvm examples
58
id "org.jetbrains.kotlin.jvm" version "1.9.25" apply false
69
id "org.jetbrains.kotlin.kapt" version "1.9.25" apply false
710
}
@@ -12,14 +15,42 @@ version = koraVersion
1215
repositories {
1316
mavenLocal()
1417
mavenCentral()
15-
maven { url "https://central.sonatype.com/repository/maven-snapshots" }
18+
maven { url = "https://central.sonatype.com/repository/maven-snapshots" }
19+
}
20+
21+
def maxParallelWorkers = providers.environmentVariable("MAX_PARALLEL_WORKERS")
22+
if (maxParallelWorkers.isPresent()) {
23+
def maxParallelWorkersValue = maxParallelWorkers.get().trim()
24+
if (!maxParallelWorkersValue.isInteger()) {
25+
throw new GradleException("MAX_PARALLEL_WORKERS must be a positive integer, but was '${maxParallelWorkers.get()}'")
26+
}
27+
28+
def maxParallelWorkersCount = maxParallelWorkersValue.toInteger()
29+
if (maxParallelWorkersCount < 1) {
30+
throw new GradleException("MAX_PARALLEL_WORKERS must be a positive integer, but was '${maxParallelWorkers.get()}'")
31+
}
32+
33+
gradle.startParameter.maxWorkerCount = maxParallelWorkersCount
34+
}
35+
36+
// plugin was attempted without an exclusive lock - https://github.com/graalvm/native-build-tools/issues/760
37+
abstract class GraalVmBuildLock implements BuildService<BuildServiceParameters.None> {}
38+
39+
def graalVmBuildLock = gradle.sharedServices.registerIfAbsent("graalVmBuildLock", GraalVmBuildLock) {
40+
maxParallelUsages = 1
1641
}
1742

1843
subprojects {
1944
if (!project.childProjects.isEmpty()) {
2045
return
2146
}
2247

48+
if (project.path.startsWith(":examples:graalvm:")) {
49+
tasks.configureEach {
50+
usesService(graalVmBuildLock)
51+
}
52+
}
53+
2354
apply plugin: "java"
2455
apply plugin: "com.asarkar.gradle.build-time-tracker"
2556

@@ -43,7 +74,7 @@ subprojects {
4374
repositories {
4475
mavenLocal()
4576
mavenCentral()
46-
maven { url "https://central.sonatype.com/repository/maven-snapshots" }
77+
maven { url = "https://central.sonatype.com/repository/maven-snapshots" }
4778
}
4879

4980
configurations {
@@ -54,7 +85,11 @@ subprojects {
5485
}
5586
}
5687

57-
task allDeps(type: DependencyReportTask) {}
88+
tasks.withType(JavaCompile).configureEach {
89+
options.compilerArgs.add("-Xlint:-processing")
90+
}
91+
92+
tasks.register("allDeps", DependencyReportTask)
5893
}
5994

6095
apply from: "${project.rootDir}/grouping.gradle"

examples/graalvm/README.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
# Kora GraalVM examples
2+
3+
Kora GraalVM examples show Java services configured for native image builds with Kora.
4+
5+
| Example | Description | Kora modules |
6+
| --- | --- | --- |
7+
| [`kora-java-graalvm-crud-cassandra`](kora-java-graalvm-crud-cassandra) | Native CRUD HTTP service backed by Cassandra and Redis cache. | [CassandraDatabaseModule](https://kora-projects.github.io/kora-docs/ru/documentation/database-cassandra/), [RedisCacheModule](https://kora-projects.github.io/kora-docs/ru/documentation/cache/), [UndertowHttpServerModule](https://kora-projects.github.io/kora-docs/ru/documentation/http-server/), [ResilientModule](https://kora-projects.github.io/kora-docs/ru/documentation/resilient/), [ValidationModule](https://kora-projects.github.io/kora-docs/ru/documentation/validation/), [JsonModule](https://kora-projects.github.io/kora-docs/ru/documentation/json/), [MetricsModule](https://kora-projects.github.io/kora-docs/ru/documentation/metrics/), [OpenApiManagementModule](https://kora-projects.github.io/kora-docs/ru/documentation/openapi-management/) |
8+
| [`kora-java-graalvm-crud-jdbc`](kora-java-graalvm-crud-jdbc) | Native CRUD HTTP service backed by JDBC and Caffeine cache. | [JdbcDatabaseModule](https://kora-projects.github.io/kora-docs/ru/documentation/database-jdbc/), [CaffeineCacheModule](https://kora-projects.github.io/kora-docs/ru/documentation/cache/), [UndertowHttpServerModule](https://kora-projects.github.io/kora-docs/ru/documentation/http-server/), [ResilientModule](https://kora-projects.github.io/kora-docs/ru/documentation/resilient/), [ValidationModule](https://kora-projects.github.io/kora-docs/ru/documentation/validation/), [JsonModule](https://kora-projects.github.io/kora-docs/ru/documentation/json/), [MetricsModule](https://kora-projects.github.io/kora-docs/ru/documentation/metrics/), [OpenApiManagementModule](https://kora-projects.github.io/kora-docs/ru/documentation/openapi-management/) |
9+
| [`kora-java-graalvm-crud-r2dbc`](kora-java-graalvm-crud-r2dbc) | Native CRUD HTTP service backed by R2DBC and Caffeine cache. | [R2dbcDatabaseModule](https://kora-projects.github.io/kora-docs/ru/documentation/database-r2dbc/), [CaffeineCacheModule](https://kora-projects.github.io/kora-docs/ru/documentation/cache/), [UndertowHttpServerModule](https://kora-projects.github.io/kora-docs/ru/documentation/http-server/), [ResilientModule](https://kora-projects.github.io/kora-docs/ru/documentation/resilient/), [ValidationModule](https://kora-projects.github.io/kora-docs/ru/documentation/validation/), [JsonModule](https://kora-projects.github.io/kora-docs/ru/documentation/json/), [MetricsModule](https://kora-projects.github.io/kora-docs/ru/documentation/metrics/), [OpenApiManagementModule](https://kora-projects.github.io/kora-docs/ru/documentation/openapi-management/) |
10+
| [`kora-java-graalvm-crud-vertx`](kora-java-graalvm-crud-vertx) | Native CRUD HTTP service backed by Vert.x SQL client and Caffeine cache. | [VertxDatabaseModule](https://kora-projects.github.io/kora-docs/ru/documentation/database-vertx/), [CaffeineCacheModule](https://kora-projects.github.io/kora-docs/ru/documentation/cache/), [UndertowHttpServerModule](https://kora-projects.github.io/kora-docs/ru/documentation/http-server/), [ResilientModule](https://kora-projects.github.io/kora-docs/ru/documentation/resilient/), [ValidationModule](https://kora-projects.github.io/kora-docs/ru/documentation/validation/), [JsonModule](https://kora-projects.github.io/kora-docs/ru/documentation/json/), [MetricsModule](https://kora-projects.github.io/kora-docs/ru/documentation/metrics/), [OpenApiManagementModule](https://kora-projects.github.io/kora-docs/ru/documentation/openapi-management/) |
11+
| [`kora-java-graalvm-kafka`](kora-java-graalvm-kafka) | Native Kafka service. | [KafkaModule](https://kora-projects.github.io/kora-docs/ru/documentation/kafka/) |
File renamed without changes.
File renamed without changes.

kora-java-graalvm-crud-cassandra/build.gradle renamed to examples/graalvm/kora-java-graalvm-crud-cassandra/build.gradle

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,15 @@ plugins {
1212
id "application"
1313

1414
id "org.openapi.generator" version "7.14.0"
15-
id "com.gradleup.shadow" version "9.2.2"
16-
id "org.graalvm.buildtools.native" version "0.11.1"
15+
id "com.gradleup.shadow" version "9.4.1"
16+
id "org.graalvm.buildtools.native"
17+
}
18+
19+
java {
20+
toolchain {
21+
languageVersion = JavaLanguageVersion.of(21)
22+
vendor = JvmVendorSpec.ADOPTIUM
23+
}
1724
}
1825

1926
configurations {
@@ -49,14 +56,9 @@ dependencies {
4956

5057
testImplementation "org.mockito:mockito-core:5.18.0"
5158
testImplementation "ru.tinkoff.kora:test-junit5"
52-
testImplementation "io.goodforgod:testcontainers-extensions-cassandra:0.12.2"
53-
testImplementation "io.goodforgod:testcontainers-extensions-redis:0.12.2"
54-
testImplementation "org.testcontainers:junit-jupiter:1.19.8"
55-
}
56-
57-
java {
58-
sourceCompatibility = JavaVersion.VERSION_17
59-
targetCompatibility = JavaVersion.VERSION_17
59+
testImplementation "io.goodforgod:testcontainers-extensions-scylla:0.13.1"
60+
testImplementation "io.goodforgod:testcontainers-extensions-redis:0.13.1"
61+
testImplementation "org.testcontainers:junit-jupiter:1.21.4"
6062
}
6163

6264
application {
@@ -122,9 +124,7 @@ shadowJar {
122124
}
123125
}
124126

125-
artifacts {
126-
archives shadowJar
127-
}
127+
assemble.dependsOn shadowJar
128128

129129
test {
130130
dependsOn tasks.shadowJar
@@ -140,9 +140,9 @@ test {
140140

141141
useJUnitPlatform()
142142
testLogging {
143-
showStandardStreams(true)
143+
showStandardStreams = true
144144
events("passed", "skipped", "failed")
145-
exceptionFormat("full")
145+
exceptionFormat = "full"
146146
}
147147

148148
exclude("**/\$*")
@@ -158,8 +158,8 @@ test {
158158
}
159159

160160
compileJava {
161-
options.encoding("UTF-8")
162-
options.incremental(true)
161+
options.encoding = "UTF-8"
162+
options.incremental = true
163163
options.fork = false
164164
}
165165

kora-java-graalvm-crud-cassandra/docker-compose.yml renamed to examples/graalvm/kora-java-graalvm-crud-cassandra/docker-compose.yml

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,6 @@ services:
44
restart: unless-stopped
55
ports:
66
- '5432:5432'
7-
8-
9-
107
# Можно закомментировать секцию application и использовать docker-compose
118
# как окружения для запуска сервиса через gradle run
129
application:

kora-java-graalvm-crud-cassandra/gradle.properties renamed to examples/graalvm/kora-java-graalvm-crud-cassandra/gradle.properties

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,3 @@ redisPort=6379
1313
redisDatabase=0
1414
redisUser=default
1515
redisPassword=redis
16-

0 commit comments

Comments
 (0)