feat: 커뮤니티 목록 조회에 좋아요 상태(isLiked) 통합 #109
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: CI-CD (develop → Ncloud) | |
| on: | |
| push: | |
| branches: [ "develop" ] # ✅ develop 브랜치에 머지되면 실행 | |
| workflow_dispatch: # ✅ 수동 실행도 가능 | |
| concurrency: | |
| group: deploy-helpie-backend-develop | |
| cancel-in-progress: true # 이전 배포 중이면 취소하고 최신 커밋만 실행 | |
| jobs: | |
| build: | |
| runs-on: ubuntu-latest | |
| steps: | |
| # 1️⃣ 리포지토리 코드 체크아웃 | |
| - uses: actions/checkout@v4 | |
| # 2️⃣ JDK 설치 | |
| - name: Set up JDK 17 | |
| uses: actions/setup-java@v4 | |
| with: | |
| distribution: temurin | |
| java-version: '17' | |
| cache: gradle | |
| # 3️⃣ Gradle 빌드 | |
| - name: Build (Gradle) | |
| run: | | |
| chmod +x gradlew | |
| ./gradlew clean build -x test | |
| # 4️⃣ 빌드된 JAR 파일 경로 찾기 | |
| - name: Find built JAR | |
| id: artifact | |
| run: | | |
| set -e | |
| JAR=$(ls -1t build/libs/*.jar | grep -v -- '-plain' | head -n1) | |
| echo "Picked JAR: $JAR" | |
| echo "jar=$JAR" >> $GITHUB_OUTPUT | |
| # 5️⃣ JAR 파일 업로드 (Actions 내부 임시 저장) | |
| - name: Upload artifact | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: app-jar | |
| path: ${{ steps.artifact.outputs.jar }} | |
| deploy: | |
| needs: build | |
| runs-on: ubuntu-latest | |
| env: | |
| APP_DIR: ${{ secrets.APP_DIR }} | |
| JAR_NAME: ${{ secrets.JAR_NAME }} | |
| JAVA_CMD: ${{ secrets.JAVA_CMD }} | |
| steps: | |
| # 6️⃣ JAR 다운로드 | |
| - name: Download artifact | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: app-jar | |
| path: . | |
| # 7️⃣ JAR 경로 설정 | |
| - name: Pick jar | |
| id: pick | |
| run: | | |
| JAR=$(ls -1 *.jar | head -n1) | |
| echo "Picked JAR: $JAR" | |
| echo "jar=$JAR" >> $GITHUB_OUTPUT | |
| # 8️⃣ 서버에 JAR 복사 (비밀번호 방식) | |
| - name: Copy JAR to server | |
| uses: appleboy/[email protected] | |
| with: | |
| host: ${{ secrets.SSH_HOST }} | |
| username: ${{ secrets.SSH_USER }} | |
| password: ${{ secrets.SSH_PASSWORD }} | |
| source: ${{ steps.pick.outputs.jar }} | |
| target: ${{ secrets.APP_DIR }} | |
| overwrite: true | |
| # 9️⃣ 서버에서 base64 시크릿으로 application.yml 생성 | |
| - name: Create application.yml from base64 secret | |
| uses: appleboy/[email protected] | |
| with: | |
| host: ${{ secrets.SSH_HOST }} | |
| username: ${{ secrets.SSH_USER }} | |
| password: ${{ secrets.SSH_PASSWORD }} | |
| script: | | |
| set -e | |
| cd ${{ secrets.APP_DIR }} | |
| mkdir -p config | |
| # APP_YML_BASE64는 반드시 '한 줄'이어야 합니다. | |
| # echo 대신 printf를 사용해 개행/해석 이슈 방지 | |
| printf '%s' "${{ secrets.APP_YML_BASE64 }}" | base64 --decode > config/application.yml | |
| # 확인용(민감정보 노출 방지를 위해 해시만 출력) | |
| sha1sum config/application.yml | awk '{print "application.yml sha1: "$1}' | |
| # 9️⃣ 서버에서 JAR 이름 고정 + 실행 스크립트 호출 | |
| - name: Rename and restart app | |
| uses: appleboy/[email protected] | |
| with: | |
| host: ${{ secrets.SSH_HOST }} | |
| username: ${{ secrets.SSH_USER }} | |
| password: ${{ secrets.SSH_PASSWORD }} | |
| script: | | |
| set -e | |
| cd ${{ secrets.APP_DIR }} | |
| # 애플리케이션 재시작 (start.sh 내부에서 ./config/application.yml 사용) | |
| bash ${{ secrets.APP_DIR }}/start.sh |