diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index acbd357..31f5828 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -106,10 +106,10 @@ jobs: run: chmod +x gradlew - name: Start CI Docker Compose services - run: ./gradlew composeUp -Pci + run: ./gradlew ciComposeUp -Pci - name: Run tests - run: ./gradlew test -x composeUp --no-daemon + run: ./gradlew test -x ciComposeUp -Pci --no-daemon - name: Upload test reports if: always() diff --git a/build.gradle.kts b/build.gradle.kts index 881f8de..6dd53d6 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,3 +1,4 @@ +import com.avast.gradle.dockercompose.ComposeExtension import org.jlleitschuh.gradle.ktlint.KtlintExtension val ktorVersion: Provider = providers.gradleProperty("ktor_version") @@ -49,29 +50,42 @@ tasks.withType().configureEach { useJUnitPlatform() } -dockerCompose { - val composeFile = - 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") +configure { + createNested("test").apply { + useComposeFiles.set(listOf("docker/docker-compose-test.yaml")) + 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 { - dependsOn("composeUp") - dockerCompose.useComposeFiles.set(listOf("docker/docker-compose-test.yaml")) - dockerCompose.setProjectName("event-demo-test") + if (project.hasProperty("ci")) { + dependsOn("ciComposeUp") + } else { + dependsOn("testComposeUp") + } } - tasks.named("run") { - dependsOn("composeUp") - dockerCompose.useComposeFiles.set(listOf("docker/docker-compose-test.yaml")) - dockerCompose.setProjectName("event-demo-dev") + dependsOn("devComposeUp") +} +tasks.composeUp { + dependsOn("copyEnv") +} +tasks.named("devComposeUp") { + dependsOn("copyEnv") +} +tasks.named("testComposeUp") { + dependsOn("copyEnv") +} +tasks.named("ciComposeUp") { + dependsOn("copyEnv") } tasks.register("copyEnv") { @@ -89,10 +103,12 @@ tasks.register("copyEnv") { } } val files = - listOf( - File("docker/pgadmin.secret"), - File("docker/postgresql.secret"), - ) + buildList { + add(File("docker/postgresql.secret")) + if (!project.hasProperty("ci")) { + add(File("docker/pgadmin.secret")) + } + } outputs.files(*files.toTypedArray()) doLast { files.forEach { @@ -102,9 +118,6 @@ tasks.register("copyEnv") { } } } -tasks.composeUp { - dependsOn("copyEnv") -} dependencies { implementation("io.ktor:ktor-server-core-jvm") diff --git a/docker/docker-compose-ci.yaml b/docker/docker-compose-ci.yaml index 4e7dcfb..7681110 100644 --- a/docker/docker-compose-ci.yaml +++ b/docker/docker-compose-ci.yaml @@ -1,6 +1,4 @@ -name: event-demo-test +name: event-demo-ci include: - path: - - parts/docker-compose-databases.yaml - - parts/docker-compose-databases-expose.yaml - - parts/docker-compose-traefik.yaml \ No newline at end of file + - parts/docker-compose-databases.yaml \ No newline at end of file diff --git a/docker/docker-compose-dev.yaml b/docker/docker-compose-dev.yaml new file mode 100644 index 0000000..4bf8ca4 --- /dev/null +++ b/docker/docker-compose-dev.yaml @@ -0,0 +1,4 @@ +name: event-demo-test +include: + - path: + - docker-compose-test.yaml \ No newline at end of file diff --git a/docker/parts/docker-compose-databases.yaml b/docker/parts/docker-compose-databases.yaml index 1479687..8f1d81a 100644 --- a/docker/parts/docker-compose-databases.yaml +++ b/docker/parts/docker-compose-databases.yaml @@ -24,8 +24,6 @@ services: environment: POSTGRES_PASSWORD_FILE: /run/secrets/postgresql_password POSTGRES_USER: event-demo - secrets: - - postgresql_password healthcheck: test: ["CMD-SHELL", "sh -c 'pg_isready -U event-demo'"] interval: 1s @@ -33,6 +31,7 @@ services: retries: 10 volumes: - postgresql_data:/var/lib/postgresql + - ../postgresql.secret:/run/secrets/postgresql_password:ro rabbitmq: image: rabbitmq:4-management-alpine @@ -47,10 +46,6 @@ services: volumes: - rabbitmq_data:/var/lib/rabbitmq/ -secrets: - postgresql_password: - file: ../postgresql.secret - volumes: redis_data: redisinsight_data: