name: API Gateway (Java Spring Boot) on: push: paths: - 'services/api-gateway/**' - '.gitea/workflows/api-gateway.yml' pull_request: paths: - 'services/api-gateway/**' env: REGISTRY: gitea.example.com IMAGE_PREFIX: labfusion SERVICE_NAME: api-gateway jobs: test: runs-on: [self-hosted] env: RUNNER_TOOL_CACHE: /toolcache defaults: run: working-directory: ./services/api-gateway strategy: matrix: java-version: [17, 21] steps: - name: Checkout code uses: actions/checkout@v4 - name: Set up JDK ${{ matrix.java-version }} uses: actions/setup-java@v4 with: java-version: ${{ matrix.java-version }} distribution: 'temurin' cache: maven - name: Make Maven wrapper executable run: chmod +x ./mvnw - name: Verify Maven installation run: ./mvnw --version - name: Cache Maven dependencies uses: actions/cache@v4 with: path: | ~/.m2/repository ~/.m2/wrapper key: maven-${{ runner.os }}-${{ matrix.java-version }}-${{ hashFiles('**/pom.xml') }} restore-keys: | maven-${{ runner.os }}-${{ matrix.java-version }}- maven-${{ runner.os }}- maven- fail-on-cache-miss: false - name: Validate POM run: ./mvnw validate - name: Compile code run: ./mvnw compile - name: Run unit tests run: ./mvnw test - name: Check test reports run: | echo "Checking for test report files..." if [ -d "target/surefire-reports" ]; then echo "Surefire reports directory exists" ls -la target/surefire-reports/ if [ -n "$(find target/surefire-reports -name '*.xml' -type f)" ]; then echo "✅ Found test report XML files" else echo "⚠️ No XML files found in surefire-reports" fi else echo "❌ Surefire reports directory does not exist" fi - name: Generate test report uses: dorny/test-reporter@v1 if: always() && (success() || failure()) continue-on-error: true with: name: Maven Tests (Java ${{ matrix.java-version }}) path: target/surefire-reports/*.xml reporter: java-junit - name: Run code quality checks run: | ./mvnw spotbugs:check ./mvnw checkstyle:check ./mvnw pmd:check - name: Generate code coverage run: ./mvnw jacoco:report - name: Upload coverage to Codecov uses: codecov/codecov-action@v3 with: file: ./services/api-gateway/target/site/jacoco/jacoco.xml flags: api-gateway name: api-gateway-coverage build: runs-on: [self-hosted] needs: test env: RUNNER_TOOL_CACHE: /toolcache defaults: run: working-directory: ./services/api-gateway steps: - name: Checkout code uses: actions/checkout@v4 - name: Set up JDK 17 uses: actions/setup-java@v4 with: java-version: '17' distribution: 'temurin' cache: maven - name: Make Maven wrapper executable run: chmod +x ./mvnw - name: Verify Maven installation run: ./mvnw --version - name: Cache Maven dependencies uses: actions/cache@v4 with: path: | ~/.m2/repository ~/.m2/wrapper key: maven-${{ runner.os }}-${{ hashFiles('**/pom.xml') }} restore-keys: | maven-${{ runner.os }}- maven- fail-on-cache-miss: false - name: Build application run: ./mvnw clean package -DskipTests - name: Build Docker image (test only) run: docker build -t api-gateway:test . security: runs-on: [self-hosted] needs: build