Skip to content

[ICC-303] token 버킷 캐시 문제 해결, 서킷 브레이커 에러 문제 해 (#164) #17

[ICC-303] token 버킷 캐시 문제 해결, 서킷 브레이커 에러 문제 해 (#164)

[ICC-303] token 버킷 캐시 문제 해결, 서킷 브레이커 에러 문제 해 (#164) #17

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