1 Commits
Author SHA1 Message Date
flecomte 9bffcd3267 chore: fix postgresql.secret in ci
Tests / build (push) Successful in 6m11s
Tests / test (push) Failing after 14m7s
Tests / lint (push) Successful in 14m37s
2026-07-31 20:19:04 +02:00
10 changed files with 49 additions and 55 deletions
+1 -4
View File
@@ -105,11 +105,8 @@ jobs:
- name: Grant execute permission to Gradle wrapper - name: Grant execute permission to Gradle wrapper
run: chmod +x gradlew run: chmod +x gradlew
- name: Start CI Docker Compose services
run: ./gradlew ciComposeUp -Pci
- name: Run tests - name: Run tests
run: ./gradlew test -x ciComposeUp -Pci --no-daemon run: ./gradlew test --no-daemon
- name: Upload test reports - name: Upload test reports
if: always() if: always()
+24 -37
View File
@@ -1,4 +1,3 @@
import com.avast.gradle.dockercompose.ComposeExtension
import org.jlleitschuh.gradle.ktlint.KtlintExtension import org.jlleitschuh.gradle.ktlint.KtlintExtension
val ktorVersion: Provider<String> = providers.gradleProperty("ktor_version") val ktorVersion: Provider<String> = providers.gradleProperty("ktor_version")
@@ -50,42 +49,29 @@ tasks.withType<Test>().configureEach {
useJUnitPlatform() useJUnitPlatform()
} }
configure<ComposeExtension> { dockerCompose {
createNested("test").apply { val composeFile =
useComposeFiles.set(listOf("docker/docker-compose-test.yaml")) if (project.hasProperty("ci")) {
// Use docker-compose-ci.yaml for the CI
"docker/docker-compose-ci.yaml"
} else {
// Use docker-compose-test.yaml for local tests
"docker/docker-compose-test.yaml"
}
useComposeFiles.set(listOf(composeFile))
setProjectName("event-demo-test") setProjectName("event-demo-test")
} }
createNested("dev").apply {
useComposeFiles.set(listOf("docker/docker-compose-dev.yaml"))
setProjectName("event-demo-dev")
}
createNested("ci").apply {
useComposeFiles.set(listOf("docker/docker-compose-ci.yaml"))
setProjectName("event-demo-ci")
}
}
tasks.test { tasks.test {
if (project.hasProperty("ci")) { dependsOn("composeUp")
dependsOn("ciComposeUp") dockerCompose.useComposeFiles.set(listOf("docker/docker-compose-test.yaml"))
} else { dockerCompose.setProjectName("event-demo-test")
dependsOn("testComposeUp")
}
} }
tasks.named("run") { tasks.named("run") {
dependsOn("devComposeUp") dependsOn("composeUp")
} dockerCompose.useComposeFiles.set(listOf("docker/docker-compose-test.yaml"))
tasks.composeUp { dockerCompose.setProjectName("event-demo-dev")
dependsOn("copyEnv")
}
tasks.named("devComposeUp") {
dependsOn("copyEnv")
}
tasks.named("testComposeUp") {
dependsOn("copyEnv")
}
tasks.named("ciComposeUp") {
dependsOn("copyEnv")
} }
tasks.register<Copy>("copyEnv") { tasks.register<Copy>("copyEnv") {
@@ -103,12 +89,10 @@ tasks.register<Copy>("copyEnv") {
} }
} }
val files = val files =
buildList { listOf(
add(File("docker/postgresql.secret")) File("docker/pgadmin.secret"),
if (!project.hasProperty("ci")) { File("docker/postgresql.secret"),
add(File("docker/pgadmin.secret")) )
}
}
outputs.files(*files.toTypedArray()) outputs.files(*files.toTypedArray())
doLast { doLast {
files.forEach { files.forEach {
@@ -118,6 +102,9 @@ tasks.register<Copy>("copyEnv") {
} }
} }
} }
tasks.composeUp {
dependsOn("copyEnv")
}
dependencies { dependencies {
implementation("io.ktor:ktor-server-core-jvm") implementation("io.ktor:ktor-server-core-jvm")
+2 -1
View File
@@ -1,5 +1,6 @@
name: event-demo-ci name: event-demo-test
include: include:
- path: - path:
- parts/docker-compose-databases.yaml - parts/docker-compose-databases.yaml
- parts/docker-compose-databases-expose.yaml - parts/docker-compose-databases-expose.yaml
- parts/docker-compose-traefik.yaml
-4
View File
@@ -1,4 +0,0 @@
name: event-demo-test
include:
- path:
- docker-compose-test.yaml
+6 -1
View File
@@ -24,6 +24,8 @@ services:
environment: environment:
POSTGRES_PASSWORD_FILE: /run/secrets/postgresql_password POSTGRES_PASSWORD_FILE: /run/secrets/postgresql_password
POSTGRES_USER: event-demo POSTGRES_USER: event-demo
secrets:
- postgresql_password
healthcheck: healthcheck:
test: ["CMD-SHELL", "sh -c 'pg_isready -U event-demo'"] test: ["CMD-SHELL", "sh -c 'pg_isready -U event-demo'"]
interval: 1s interval: 1s
@@ -31,7 +33,6 @@ services:
retries: 10 retries: 10
volumes: volumes:
- postgresql_data:/var/lib/postgresql - postgresql_data:/var/lib/postgresql
- ../postgresql.secret:/run/secrets/postgresql_password:ro
rabbitmq: rabbitmq:
image: rabbitmq:4-management-alpine image: rabbitmq:4-management-alpine
@@ -46,6 +47,10 @@ services:
volumes: volumes:
- rabbitmq_data:/var/lib/rabbitmq/ - rabbitmq_data:/var/lib/rabbitmq/
secrets:
postgresql_password:
file: ../postgresql.secret
volumes: volumes:
redis_data: redis_data:
redisinsight_data: redisinsight_data:
@@ -37,8 +37,16 @@ abstract class GameEventManager(
return this return this
} }
protected inline fun <reified G : Game> Game.isStatusOrFail(message: String): G = protected fun <G : Game> Game.isStatusOrFail(
this as? G ?: throw CommandException(message) kClass: KClass<G>,
message: String,
): G {
if (kClass.isInstance(this)) {
return this as G
} else {
throw CommandException(message)
}
}
protected fun <T> retry( protected fun <T> retry(
mapAttempts: Int = 5, mapAttempts: Int = 5,
@@ -20,7 +20,7 @@ class JoinTheGameHandler(
retry { retry {
command command
.getGame() .getGame()
.isStatusOrFail<GameCreated>("The game is started") .isStatusOrFail(GameCreated::class, "The game is started")
.userJoinTheGame( .userJoinTheGame(
userId = command.userId, userId = command.userId,
name = user.username, name = user.username,
@@ -16,7 +16,7 @@ class PlayCardHandler(
override fun handle(command: PlayCardCommand) { override fun handle(command: PlayCardCommand) {
command command
.getGame() .getGame()
.isStatusOrFail<GameStarted>("The game is not started") .isStatusOrFail(GameStarted::class, "The game is not started")
.playTheCard( .playTheCard(
card = command.payload.card, card = command.payload.card,
playerId = command.payload.playerId, playerId = command.payload.playerId,
@@ -16,7 +16,7 @@ class ReadyToPlayHandler(
override fun handle(command: ReadyToPlayCommand) { override fun handle(command: ReadyToPlayCommand) {
command command
.getGame() .getGame()
.isStatusOrFail<GameCreated>("The game is started") .isStatusOrFail(GameCreated::class, "The game is started")
.setReadyPlayer(command.payload.playerId) .setReadyPlayer(command.payload.playerId)
.saveEvents() .saveEvents()
.publishEvents() .publishEvents()
@@ -18,7 +18,7 @@ class TakeCartFromDrawPileHandler(
override fun handle(command: TakeCartFromDrawPileCommand) { override fun handle(command: TakeCartFromDrawPileCommand) {
command command
.getGame() .getGame()
.isStatusOrFail<GameStarted>("The game is not started") .isStatusOrFail(GameStarted::class, "The game is not started")
.playerTakeCartFromDrawPile(command.payload.playerId, 1) .playerTakeCartFromDrawPile(command.payload.playerId, 1)
.saveEvents() .saveEvents()
.publishEvents() .publishEvents()