[ICC-303] token 버킷 캐시 문제 해결, 서킷 브레이커 에러 문제 해 (#164) #17
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: API 문서 배포 | |
| on: | |
| push: | |
| branches: | |
| - develop | |
| paths: | |
| - 'modules/**/src/main/java/**' | |
| - 'app/src/main/resources/application*.yml' | |
| - 'app/src/main/resources/config/**' | |
| # 수동 실행 지원 | |
| workflow_dispatch: | |
| # GitHub Pages 배포 권한 | |
| permissions: | |
| contents: read | |
| pages: write | |
| id-token: write | |
| # 동시 배포 방지 | |
| concurrency: | |
| group: "pages" | |
| cancel-in-progress: false | |
| jobs: | |
| generate-and-deploy: | |
| name: OpenAPI spec 추출 & GitHub Pages 배포 | |
| runs-on: ubuntu-latest | |
| environment: | |
| name: github-pages | |
| url: ${{ steps.deployment.outputs.page_url }} | |
| steps: | |
| - name: 코드 체크아웃 | |
| uses: actions/checkout@v4 | |
| - name: JDK 21 설정 | |
| uses: actions/setup-java@v4 | |
| with: | |
| distribution: "temurin" | |
| java-version: "21" | |
| - name: Gradle 설정 | |
| uses: gradle/actions/setup-gradle@v4 | |
| - name: 애플리케이션 빌드 | |
| run: ./gradlew :app:bootJar --build-cache --parallel -x test | |
| - name: test 프로파일로 서버 기동 & OpenAPI spec 추출 | |
| run: | | |
| # 서버를 백그라운드로 기동 | |
| # plain JAR 제외, bootJar만 실행 | |
| JAR_FILE=$(ls app/build/libs/app-*.jar | grep -v plain) | |
| java -jar "$JAR_FILE" --spring.profiles.active=test & | |
| SERVER_PID=$! | |
| # 서버 준비 대기 (최대 60초) | |
| echo "서버 기동 대기 중..." | |
| for i in $(seq 1 60); do | |
| if curl -s http://localhost:8080/v3/api-docs > /dev/null 2>&1; then | |
| echo "서버 준비 완료 (${i}초)" | |
| break | |
| fi | |
| if [ $i -eq 60 ]; then | |
| echo "서버 기동 타임아웃" | |
| kill $SERVER_PID 2>/dev/null | |
| exit 1 | |
| fi | |
| sleep 1 | |
| done | |
| # OpenAPI spec 추출 및 Redoc 페이지 생성 | |
| mkdir -p docs/api | |
| curl -s http://localhost:8080/v3/api-docs > docs/api/openapi.json | |
| cat > docs/api/index.html << 'HEREDOC' | |
| <!DOCTYPE html> | |
| <html lang="ko"> | |
| <head> | |
| <meta charset="UTF-8"> | |
| <meta name="viewport" content="width=device-width, initial-scale=1.0"> | |
| <title>Q-Asker API 문서</title> | |
| <meta name="description" content="Q-Asker API 명세서"> | |
| <style>body { margin: 0; padding: 0; }</style> | |
| </head> | |
| <body> | |
| <redoc spec-url='./openapi.json'></redoc> | |
| <script src="https://cdn.redoc.ly/redoc/latest/bundles/redoc.standalone.js"></script> | |
| </body> | |
| </html> | |
| HEREDOC | |
| echo "OpenAPI spec 추출 및 Redoc 페이지 생성 완료" | |
| # 서버 종료 | |
| kill $SERVER_PID 2>/dev/null | |
| wait $SERVER_PID 2>/dev/null || true | |
| - name: GitHub Pages 설정 | |
| uses: actions/configure-pages@v5 | |
| - name: 아티팩트 업로드 | |
| uses: actions/upload-pages-artifact@v3 | |
| with: | |
| path: docs/api | |
| - name: GitHub Pages 배포 | |
| id: deployment | |
| uses: actions/deploy-pages@v4 |