fix : SpringDoc과 Spring AI 간 의존성 충돌 해결 #19
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # 워크플로우 이름 | |
| name: Spring CI/CD Pipeline (Develop) | |
| # develop 브랜치 PR에서만 실행 | |
| on: | |
| pull_request: | |
| branches: | |
| - develop | |
| paths: | |
| - 'src/**' | |
| - 'build.gradle*' | |
| - 'settings.gradle*' | |
| - 'gradle/**' | |
| - 'Dockerfile' | |
| - '.github/workflows/**' | |
| jobs: | |
| # ================================== | |
| # CI: Test and Build and Push Docker Image | |
| # ================================== | |
| ci: | |
| runs-on: ubuntu-latest | |
| steps: | |
| # 1. 소스 코드 체크아웃 | |
| - name: Checkout source code | |
| uses: actions/checkout@v4 | |
| # 2. JDK 21 설치 | |
| - name: Set up JDK 21 | |
| uses: actions/setup-java@v4 | |
| with: | |
| java-version: '21' | |
| distribution: 'temurin' | |
| # 3. Gradle 캐시 설정 | |
| - name: Cache Gradle packages | |
| uses: actions/cache@v4 | |
| with: | |
| path: | | |
| ~/.gradle/caches | |
| ~/.gradle/wrapper | |
| key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} | |
| restore-keys: | | |
| ${{ runner.os }}-gradle- | |
| # 4. gradlew 실행 권한 부여 | |
| - name: Grant execute permission for gradlew | |
| run: chmod +x ./gradlew | |
| # 5. application-secrets.yml 생성 | |
| - name: Generate application-secrets.yml | |
| run: | | |
| mkdir -p src/main/resources | |
| echo "${{ secrets.APPLICATION_SECRET_YML }}" > src/main/resources/application-secrets.yml | |
| echo "OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}" >> src/main/resources/application-secrets.yml | |
| echo "spring.cloud.aws.region.static: ${{ secrets.AWS_REGION }}" >> src/main/resources/application-secrets.yml | |
| echo "spring.cloud.aws.credentials.access-key: ${{ secrets.AWS_ACCESS_KEY_ID }}" >> src/main/resources/application-secrets.yml | |
| echo "spring.cloud.aws.credentials.secret-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}" >> src/main/resources/application-secrets.yml | |
| echo "spring.cloud.aws.s3.bucket: ${{ secrets.AWS_S3_BUCKET_NAME }}" >> src/main/resources/application-secrets.yml | |
| echo "spring.cloud.aws.stack : false" >> src/main/resources/application-secrets.yml | |
| # 6. application-secrets-server.yml 생성 | |
| - name: Generate application-secrets-server.yml | |
| run: | | |
| mkdir -p src/main/resources | |
| echo "${{ secrets.APPLICATION_SECRET_SERVER_YML }}" > src/main/resources/application-secrets-server.yml | |
| echo "OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}" >> src/main/resources/application-secrets-server.yml | |
| # 7. Gradle 테스트 실행 | |
| - name: Test with Gradle | |
| run: ./gradlew test | |
| # 8. 테스트 결과 요약 출력 | |
| - name: Show test results | |
| run: | | |
| echo "==== Test Results ====" | |
| if compgen -G "build/test-results/test/TEST-*.xml" > /dev/null; then | |
| total=$(grep '<testcase ' build/test-results/test/TEST-*.xml | wc -l) | |
| failed=$(grep -h '<failure' build/test-results/test/TEST-*.xml | wc -l) | |
| error=$(grep -h '<error' build/test-results/test/TEST-*.xml | wc -l) | |
| passed=$((total - failed - error)) | |
| echo "Total tests: $total" | |
| echo "Passed tests: $passed" | |
| echo "Failed tests: $failed" | |
| echo "Errored tests: $error" | |
| else | |
| echo "No test results found." | |
| fi | |
| # 9. Gradle 빌드 실행 (테스트 성공 시) | |
| - name: Build with Gradle | |
| run: ./gradlew build | |
| # 10. GHCR 로그인 | |
| - name: Log in to GHCR | |
| uses: docker/login-action@v2 | |
| with: | |
| registry: ghcr.io | |
| username: ${{ github.repository_owner }} | |
| password: ${{ secrets.GITHUB_TOKEN }} | |
| # 11. Docker 이미지 빌드 & 푸시 | |
| - name: Build & Push Docker Image | |
| run: | | |
| IMAGE_NAME=ghcr.io/${{ github.repository }}/zoopzoop | |
| docker build -t $IMAGE_NAME:${GITHUB_SHA} . | |
| docker tag $IMAGE_NAME:${GITHUB_SHA} $IMAGE_NAME:latest | |
| docker push $IMAGE_NAME:${GITHUB_SHA} | |
| docker push $IMAGE_NAME:latest | |