Skip to content

[Refactor/OPS-246] 다건 삭제 DELETE 본문 수정 #84

[Refactor/OPS-246] 다건 삭제 DELETE 본문 수정

[Refactor/OPS-246] 다건 삭제 DELETE 본문 수정 #84

Workflow file for this run

# 워크플로우 이름
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
env:
SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }}
# CI 작업이 실행되는 동안 RabbitMQ 서비스 컨테이너를 함께 실행
services:
rabbitmq:
image: rabbitmq:3-management
ports:
- 5672:5672
# RabbitMQ가 완전히 준비될 때까지 기다리는 상태 확인 옵션
options: >-
--health-cmd "rabbitmq-diagnostics check_running"
--health-interval 10s
--health-timeout 5s
--health-retries 5
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.auto: false" >> src/main/resources/application-secrets.yml
echo "liveblocks.secret-key: ${{ secrets.LIVEBLOCKS_SECRET_KEY }}" >> 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
# 테스트 단계에서 RabbitMQ 연결을 위한 환경 변수 설정
env:
SPRING_RABBITMQ_HOST: localhost
SPRING_RABBITMQ_PORT: 5672
SPRING_RABBITMQ_USERNAME: guest
SPRING_RABBITMQ_PASSWORD: guest
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
# 8-1. S3 자격 증명 제거 (빌드 전에만)
- name: Remove only S3 credentials before building
run: |
CONFIG_FILE="src/main/resources/application-secrets.yml"
sed -i '/spring.cloud.aws.credentials.access-key/d' $CONFIG_FILE
sed -i '/spring.cloud.aws.credentials.secret-key/d' $CONFIG_FILE
sed -i '/spring.cloud.aws.region.static/d' $CONFIG_FILE
sed -i '/spring.cloud.aws.stack.auto/d' $CONFIG_FILE
# 9. Gradle 빌드 실행 (테스트 성공 시)
- name: Build with Gradle
run: ./gradlew build -x test
# 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