name: Integration Tests on: push: branches: [ main, develop ] pull_request: branches: [ main, develop ] jobs: integration-tests: runs-on: ubuntu-latest services: postgres: image: postgres:16-alpine env: POSTGRES_USER: meldestelle POSTGRES_PASSWORD: meldestelle POSTGRES_DB: meldestelle ports: - 5432:5432 options: >- --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5 redis: image: redis:7-alpine ports: - 6379:6379 options: >- --health-cmd "redis-cli ping" --health-interval 10s --health-timeout 5s --health-retries 5 keycloak: image: quay.io/keycloak/keycloak:23.0 env: KEYCLOAK_ADMIN: admin KEYCLOAK_ADMIN_PASSWORD: admin KC_DB: postgres KC_DB_URL: jdbc:postgresql://postgres:5432/keycloak KC_DB_USERNAME: meldestelle KC_DB_PASSWORD: meldestelle ports: - 8180:8080 options: >- --health-cmd "curl --fail http://localhost:8080/health/ready || exit 1" --health-interval 10s --health-timeout 5s --health-retries 5 --health-start-period 30s zookeeper: image: confluentinc/cp-zookeeper:7.5.0 env: ZOOKEEPER_CLIENT_PORT: 2181 ports: - 2181:2181 options: >- --health-cmd "nc -z localhost 2181 || exit 1" --health-interval 10s --health-timeout 5s --health-retries 3 --health-start-period 10s kafka: image: confluentinc/cp-kafka:7.5.0 env: KAFKA_BROKER_ID: 1 KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181 KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:29092,PLAINTEXT_HOST://localhost:9092 KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1 ports: - 9092:9092 options: >- --health-cmd "kafka-topics --bootstrap-server localhost:9092 --list || exit 1" --health-interval 10s --health-timeout 5s --health-retries 3 --health-start-period 30s zipkin: image: openzipkin/zipkin:2 ports: - 9411:9411 options: >- --health-cmd "wget -q -O - http://localhost:9411/health || exit 1" --health-interval 10s --health-timeout 5s --health-retries 3 --health-start-period 10s steps: - uses: actions/checkout@v3 - name: Set up JDK 21 uses: actions/setup-java@v3 with: java-version: 21 distribution: 'temurin' cache: 'gradle' - name: Setup Gradle uses: gradle/gradle-build-action@v2 with: gradle-version: wrapper cache-read-only: ${{ github.ref != 'refs/heads/main' && github.ref != 'refs/heads/develop' }} cache-overwrite-existing: true gradle-home-cache-includes: | caches notifications jdks wrapper - name: Grant execute permission for gradlew run: chmod +x gradlew - name: Run integration tests run: ./gradlew integrationTest --no-daemon --parallel env: # Environment variables for Redis connection REDIS_HOST: localhost REDIS_PORT: 6379 # Spring profile for integration tests SPRING_PROFILES_ACTIVE: integration-test - name: Upload test reports uses: actions/upload-artifact@v3 if: always() with: name: integration-test-reports path: | **/build/reports/tests/integrationTest/ **/build/test-results/integrationTest/ retention-days: 7