project-auto-wizard 0.11.0 → 0.12.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +24 -21
- package/package.json +2 -2
- package/payload/config/breaking-changes.json +1 -1
- package/payload/scripts/__pycache__/changelog_manager.cpython-314.pyc +0 -0
- package/payload/scripts/__pycache__/issue_helper.cpython-314.pyc +0 -0
- package/payload/scripts/__pycache__/version_manager.cpython-314.pyc +0 -0
- package/payload/scripts/changelog_manager.py +84 -31
- package/payload/scripts/version_manager.py +2 -2
- package/payload/version.yml.template +4 -2
- package/payload/workflows/common/PROJECT-COMMON-AI-PR-SUMMARY.yaml +30 -10
- package/payload/workflows/common/PROJECT-COMMON-AUTO-CHANGELOG-CONTROL.yaml +37 -12
- package/payload/workflows/common/PROJECT-COMMON-ISSUE-HELPER.yaml +3 -6
- package/payload/workflows/common/PROJECT-COMMON-README-VERSION-UPDATE.yaml +0 -12
- package/payload/workflows/common/PROJECT-COMMON-RELEASE-PUBLISH.yaml +27 -6
- package/payload/workflows/common/PROJECT-COMMON-VERSION-CONTROL.yaml +3 -7
- package/payload/workflows/flutter/PROJECT-FLUTTER-ANDROID-FIREBASE-CICD.yaml +7 -34
- package/payload/workflows/flutter/PROJECT-FLUTTER-ANDROID-PLAYSTORE-CICD.yaml +2 -25
- package/payload/workflows/flutter/PROJECT-FLUTTER-ANDROID-SELFHOSTED-CICD.yaml +2 -20
- package/payload/workflows/flutter/PROJECT-FLUTTER-ANDROID-TEST-APK.yaml +5 -30
- package/payload/workflows/flutter/PROJECT-FLUTTER-APP-BUILD-TRIGGER.yaml +0 -4
- package/payload/workflows/flutter/PROJECT-FLUTTER-CI.yaml +7 -51
- package/payload/workflows/flutter/PROJECT-FLUTTER-IOS-TEST-TESTFLIGHT.yaml +5 -29
- package/payload/workflows/flutter/PROJECT-FLUTTER-IOS-TESTFLIGHT.yaml +9 -29
- package/payload/workflows/go/PROJECT-GO-CI.yaml +5 -28
- package/payload/workflows/go/PROJECT-GO-PR-PREVIEW.yaml +19 -99
- package/payload/workflows/go/PROJECT-GO-SIMPLE-CICD.yaml +18 -89
- package/payload/workflows/next/PROJECT-NEXT-CI.yaml +11 -41
- package/payload/workflows/next/PROJECT-NEXT-CICD.yaml +9 -45
- package/payload/workflows/python/PROJECT-PYTHON-CI.yaml +1 -27
- package/payload/workflows/python/PROJECT-PYTHON-PR-PREVIEW.yaml +14 -97
- package/payload/workflows/python/PROJECT-PYTHON-SIMPLE-CICD.yaml +14 -92
- package/payload/workflows/react/PROJECT-REACT-CI.yaml +11 -40
- package/payload/workflows/react/PROJECT-REACT-CICD.yaml +9 -43
- package/payload/workflows/spring/{nexus/PROJECT-SPRING-NEXUS-CI.yml → PROJECT-SPRING-CI.yml} +2 -25
- package/payload/workflows/spring/server-deploy/PROJECT-SPRING-NONSTOP-NGINX-CICD.yaml +19 -63
- package/payload/workflows/spring/server-deploy/PROJECT-SPRING-NONSTOP-TRAEFIK-CICD.yaml +19 -59
- package/payload/workflows/spring/server-deploy/PROJECT-SPRING-PR-PREVIEW.yaml +23 -86
- package/payload/workflows/spring/server-deploy/PROJECT-SPRING-SIMPLE-CICD.yaml +20 -80
- package/src/cli/args.js +8 -15
- package/src/cli/help.js +2 -3
- package/src/commands/doctor.js +9 -8
- package/src/commands/dry-run.js +1 -1
- package/src/commands/full.js +9 -10
- package/src/commands/interactive-flutter.js +1 -1
- package/src/commands/interactive.js +34 -46
- package/src/commands/purge.js +2 -2
- package/src/commands/status.js +5 -6
- package/src/commands/uninstall.js +3 -4
- package/src/context.js +5 -6
- package/src/core/assets.js +2 -2
- package/src/core/baseline.js +1 -1
- package/src/core/branches.js +3 -3
- package/src/core/breaking-check.js +1 -1
- package/src/core/breaking.js +1 -1
- package/src/core/copy/flutter-app.js +2 -2
- package/src/core/copy/gitignore.js +8 -8
- package/src/core/copy/workflows.js +24 -69
- package/src/core/deploy-style.js +2 -2
- package/src/core/detect-fs.js +11 -11
- package/src/core/detect.js +7 -7
- package/src/core/flutter-options.js +1 -1
- package/src/core/installed-stores.js +1 -1
- package/src/core/logger.js +1 -1
- package/src/core/paths-resolve.js +1 -1
- package/src/core/removal-plan.js +4 -4
- package/src/core/verify.js +4 -4
- package/src/core/version-yml.js +27 -34
- package/src/core/wizard-env.js +4 -4
- package/src/index.js +14 -14
- package/src/ui/banner.js +2 -2
- package/src/ui/env-plan.js +10 -16
- package/src/ui/prompts.js +9 -14
- package/src/ui/status-cards.js +10 -12
- package/src/ui/summary.js +13 -13
- package/payload/workflows/common/secret-backup/PROJECT-COMMON-SECRET-FILE-UPLOAD.yaml +0 -210
- package/payload/workflows/spring/nexus/PROJECT-SPRING-GITHUB-PACKAGES-PUBLISH.yml +0 -92
- package/payload/workflows/spring/nexus/PROJECT-SPRING-NEXUS-PUBLISH.yml +0 -70
- package/src/core/options-ask.js +0 -102
|
@@ -1,37 +1,29 @@
|
|
|
1
1
|
# project-auto-wizard:managed-workflow
|
|
2
|
-
# ===================================================================
|
|
3
2
|
# Spring Boot PR/Issue Preview 시스템 (SSH + Docker)
|
|
4
|
-
# ===================================================================
|
|
5
3
|
#
|
|
6
|
-
#
|
|
7
|
-
#
|
|
8
|
-
#
|
|
9
|
-
#
|
|
10
|
-
#
|
|
11
|
-
#
|
|
12
|
-
#
|
|
13
|
-
#
|
|
14
|
-
# SSH_KEY: SSH 개인키 .pem 내용 (SSH_AUTH_METHOD=key일 때, AWS EC2 등)
|
|
15
|
-
# ===================================================================
|
|
4
|
+
# 필수 GitHub Secrets
|
|
5
|
+
# APPLICATION_PROD_YML (선택): application-prod.yml 내용
|
|
6
|
+
# DOCKERHUB_USERNAME: DockerHub 사용자명
|
|
7
|
+
# DOCKERHUB_TOKEN: DockerHub 액세스 토큰
|
|
8
|
+
# SERVER_HOST: 배포 서버 주소
|
|
9
|
+
# SERVER_USER: SSH 사용자명
|
|
10
|
+
# SERVER_PASSWORD: SSH 비밀번호 (SSH_AUTH_METHOD=password일 때)
|
|
11
|
+
# SSH_KEY: SSH 개인키 .pem 내용 (SSH_AUTH_METHOD=key일 때, AWS EC2 등)
|
|
16
12
|
#
|
|
17
|
-
#
|
|
13
|
+
# 사용법
|
|
18
14
|
# /wizard server build - PR/Issue 빌드 및 배포
|
|
19
15
|
# /wizard server destroy - Preview 환경 삭제
|
|
20
16
|
# /wizard server status - 현재 상태 확인
|
|
21
17
|
#
|
|
22
|
-
#
|
|
18
|
+
# 리소스 네이밍 규칙
|
|
23
19
|
# - 컨테이너: {PROJECT_NAME}-pr-{PR번호}
|
|
24
20
|
# - 이미지: {DOCKERHUB_USERNAME}/{PROJECT_NAME}:pr-{PR번호}
|
|
25
21
|
# - 도메인: {PROJECT_NAME}-pr-{PR번호}.pr.example.com
|
|
26
22
|
# - Preview URL: http://{도메인}:8079
|
|
27
|
-
#
|
|
28
|
-
# ===================================================================
|
|
29
23
|
|
|
30
24
|
name: PROJECT-SPRING-PR-PREVIEW
|
|
31
25
|
|
|
32
|
-
#
|
|
33
|
-
# ⚠️ [영역 1] 프로젝트별 설정 - 다른 프로젝트에서 사용 시 이 섹션만 수정하세요
|
|
34
|
-
# ===================================================================
|
|
26
|
+
# [영역 1] 프로젝트별 설정 - 다른 프로젝트에서 사용 시 이 섹션만 수정하세요
|
|
35
27
|
env:
|
|
36
28
|
# 프로젝트 고유 식별자 (컨테이너명, 이미지명, 도메인에 사용) (프로젝트별 수정 필요)
|
|
37
29
|
PROJECT_NAME: "__PROJECT_NAME__" # @wizard ask:@repo
|
|
@@ -46,7 +38,7 @@ env:
|
|
|
46
38
|
DOCKERFILE_PATH: './Dockerfile'
|
|
47
39
|
INTERNAL_PORT: '8080'
|
|
48
40
|
|
|
49
|
-
#
|
|
41
|
+
# 볼륨 마운트 설정 (프로젝트별 수정 필요, 빈값이면 마운트 안함)
|
|
50
42
|
PROJECT_TARGET_DIR: "" # 서버의 데이터 디렉토리 (예: /volume1/projects/myapp/data)
|
|
51
43
|
PROJECT_MNT_DIR: "" # 컨테이너 내부 마운트 경로 (예: /mnt/myapp)
|
|
52
44
|
|
|
@@ -55,7 +47,7 @@ env:
|
|
|
55
47
|
PREVIEW_DOMAIN_SUFFIX: "__PREVIEW_DOMAIN_SUFFIX__" # @wizard ask:pr.example.com
|
|
56
48
|
PREVIEW_PORT: '8079'
|
|
57
49
|
|
|
58
|
-
#
|
|
50
|
+
# SSH 인증 방식: "password"(Synology·일반 서버) | "key"(AWS EC2·.pem)
|
|
59
51
|
# password → SERVER_PASSWORD secret 사용
|
|
60
52
|
# key → SSH_KEY secret 사용 (.pem 파일 전체 내용을 secret 값으로)
|
|
61
53
|
SSH_AUTH_METHOD: "password" # @wizard ask:password
|
|
@@ -80,9 +72,6 @@ env:
|
|
|
80
72
|
HEALTH_CHECK_LOG_PATTERN: 'Started .* in [0-9.]+ seconds'
|
|
81
73
|
API_DOCS_PATH: '/docs/swagger'
|
|
82
74
|
|
|
83
|
-
# ===================================================================
|
|
84
|
-
# 트리거 설정
|
|
85
|
-
# ===================================================================
|
|
86
75
|
on:
|
|
87
76
|
issue_comment:
|
|
88
77
|
types: [created] # PR 댓글 + Issue 댓글
|
|
@@ -96,13 +85,8 @@ permissions:
|
|
|
96
85
|
pull-requests: write
|
|
97
86
|
issues: write
|
|
98
87
|
|
|
99
|
-
# ===================================================================
|
|
100
|
-
# Jobs
|
|
101
|
-
# ===================================================================
|
|
102
88
|
jobs:
|
|
103
|
-
# -----------------------------------------------------------------
|
|
104
89
|
# Job 1: 명령어 파싱 (PR 댓글 + Issue 댓글 모두 지원)
|
|
105
|
-
# -----------------------------------------------------------------
|
|
106
90
|
check-command:
|
|
107
91
|
name: 명령어 확인
|
|
108
92
|
if: github.event_name == 'issue_comment'
|
|
@@ -182,9 +166,7 @@ jobs:
|
|
|
182
166
|
echo "ℹ️ /wizard server 명령어가 아님"
|
|
183
167
|
fi
|
|
184
168
|
|
|
185
|
-
# -----------------------------------------------------------------
|
|
186
169
|
# Job 2-1: 빌드 & 배포 (PR 댓글에서 실행)
|
|
187
|
-
# -----------------------------------------------------------------
|
|
188
170
|
build-preview-pr:
|
|
189
171
|
name: Preview 빌드 & 배포 (PR)
|
|
190
172
|
needs: check-command
|
|
@@ -209,9 +191,7 @@ jobs:
|
|
|
209
191
|
core.setOutput('sha', pr.data.head.sha.substring(0, 7));
|
|
210
192
|
return pr.data.number;
|
|
211
193
|
|
|
212
|
-
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
213
194
|
# 진행 상황 댓글 시스템
|
|
214
|
-
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
215
195
|
- name: 진행 상황 댓글 생성
|
|
216
196
|
id: progress
|
|
217
197
|
uses: actions/github-script@v9
|
|
@@ -261,23 +241,20 @@ jobs:
|
|
|
261
241
|
- name: Gradle 권한 설정
|
|
262
242
|
run: chmod +x gradlew
|
|
263
243
|
|
|
264
|
-
#
|
|
265
|
-
# ⚠️ [영역 2] 프로젝트별 Secret 파일 생성
|
|
266
|
-
# =================================================================
|
|
244
|
+
# [영역 2] 프로젝트별 Secret 파일 생성
|
|
267
245
|
#
|
|
268
|
-
#
|
|
246
|
+
# 필수 (모든 Spring Boot 프로젝트):
|
|
269
247
|
# - application-prod.yml
|
|
270
248
|
#
|
|
271
|
-
#
|
|
249
|
+
# 선택 (프로젝트에 따라 추가/제거):
|
|
272
250
|
# - Firebase: firebase-admin-sdk.json, firebase-messaging-sw.js
|
|
273
251
|
# - Vertex AI: gen-lang-client-xxx.json
|
|
274
252
|
# - 기타 설정 파일: admin.yml, prompt.yml 등
|
|
275
253
|
#
|
|
276
|
-
#
|
|
254
|
+
# 다른 프로젝트에서 사용 시:
|
|
277
255
|
# 1. 필요 없는 step은 삭제하세요
|
|
278
256
|
# 2. 필요한 step을 추가하세요
|
|
279
257
|
# 3. 파일 경로를 프로젝트에 맞게 수정하세요
|
|
280
|
-
# =================================================================
|
|
281
258
|
|
|
282
259
|
# [필수] Spring Boot 설정 파일
|
|
283
260
|
- name: "[필수] application-prod.yml 생성"
|
|
@@ -300,9 +277,7 @@ jobs:
|
|
|
300
277
|
# run: |
|
|
301
278
|
# echo "$FIREBASE_KEY_JSON" | sed 's/\\n/\n/g' > ./<모듈명>/src/main/resources/firebase-admin-sdk.json
|
|
302
279
|
|
|
303
|
-
#
|
|
304
|
-
# ⚠️ [영역 2 끝] 프로젝트별 Secret 파일 생성 끝
|
|
305
|
-
# =================================================================
|
|
280
|
+
# [영역 2 끝] 프로젝트별 Secret 파일 생성 끝
|
|
306
281
|
|
|
307
282
|
- name: Gradle 빌드
|
|
308
283
|
run: ${{ env.GRADLE_BUILD_CMD }}
|
|
@@ -417,11 +392,10 @@ jobs:
|
|
|
417
392
|
script: |
|
|
418
393
|
set -e
|
|
419
394
|
|
|
420
|
-
# 환경 변수 설정 (배포 서버용)
|
|
421
395
|
export PATH=$PATH:/usr/local/bin
|
|
422
396
|
export PW="${{ secrets.SERVER_PASSWORD }}"
|
|
423
397
|
|
|
424
|
-
#
|
|
398
|
+
# SSH 인증 방식에 따른 sudo 추상화
|
|
425
399
|
SSH_AUTH_METHOD="${{ env.SSH_AUTH_METHOD }}"
|
|
426
400
|
SSH_AUTH_METHOD="${SSH_AUTH_METHOD:-password}"
|
|
427
401
|
if [ "${SSH_AUTH_METHOD}" = "key" ]; then
|
|
@@ -431,7 +405,6 @@ jobs:
|
|
|
431
405
|
fi
|
|
432
406
|
echo "🔐 SSH 인증 방식: ${SSH_AUTH_METHOD}"
|
|
433
407
|
|
|
434
|
-
# 변수 설정
|
|
435
408
|
PR_NUMBER=${{ github.event.issue.number }}
|
|
436
409
|
PROJECT_NAME="${{ env.PROJECT_NAME }}"
|
|
437
410
|
CONTAINER_NAME="${PROJECT_NAME}-pr-${PR_NUMBER}"
|
|
@@ -449,21 +422,17 @@ jobs:
|
|
|
449
422
|
echo "🌐 도메인: ${DOMAIN}"
|
|
450
423
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
451
424
|
|
|
452
|
-
# 이미지 Pull
|
|
453
425
|
echo "📥 Docker 이미지 Pull 중..."
|
|
454
426
|
SUDO docker pull "${IMAGE}"
|
|
455
427
|
|
|
456
|
-
# 기존 컨테이너 삭제
|
|
457
428
|
echo "🗑️ 기존 컨테이너 정리 중..."
|
|
458
429
|
SUDO docker rm -f "${CONTAINER_NAME}" 2>/dev/null || true
|
|
459
430
|
|
|
460
|
-
# 볼륨 마운트 옵션 구성
|
|
461
431
|
VOLUME_OPTS="-v /etc/localtime:/etc/localtime:ro"
|
|
462
432
|
if [ -n "${{ env.PROJECT_TARGET_DIR }}" ] && [ -n "${{ env.PROJECT_MNT_DIR }}" ]; then
|
|
463
433
|
VOLUME_OPTS="$VOLUME_OPTS -v ${{ env.PROJECT_TARGET_DIR }}:${{ env.PROJECT_MNT_DIR }}"
|
|
464
434
|
fi
|
|
465
435
|
|
|
466
|
-
# 새 컨테이너 실행
|
|
467
436
|
echo "🐳 새 컨테이너 실행 중..."
|
|
468
437
|
SUDO docker run -d \
|
|
469
438
|
--name "${CONTAINER_NAME}" \
|
|
@@ -477,11 +446,9 @@ jobs:
|
|
|
477
446
|
$VOLUME_OPTS \
|
|
478
447
|
"${IMAGE}"
|
|
479
448
|
|
|
480
|
-
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
481
449
|
# Health Check (최대 120초 대기) - 하이브리드 방식
|
|
482
450
|
# 1. HEALTH_CHECK_PATH가 설정되어 있으면 HTTP 체크 시도
|
|
483
451
|
# 2. 폴백: 로그 패턴 매칭 (HEALTH_CHECK_LOG_PATTERN)
|
|
484
|
-
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
485
452
|
echo ""
|
|
486
453
|
echo "⏳ Health Check 시작 (최대 120초 대기)..."
|
|
487
454
|
HEALTH_PATH="${{ env.HEALTH_CHECK_PATH }}"
|
|
@@ -716,9 +683,7 @@ jobs:
|
|
|
716
683
|
});
|
|
717
684
|
}
|
|
718
685
|
|
|
719
|
-
# -----------------------------------------------------------------
|
|
720
686
|
# Job 2-2: Issue에서 브랜치명 추출
|
|
721
|
-
# -----------------------------------------------------------------
|
|
722
687
|
get-branch-from-issue:
|
|
723
688
|
name: Issue에서 브랜치 추출
|
|
724
689
|
needs: check-command
|
|
@@ -806,9 +771,7 @@ jobs:
|
|
|
806
771
|
body: body
|
|
807
772
|
});
|
|
808
773
|
|
|
809
|
-
# -----------------------------------------------------------------
|
|
810
774
|
# Job 2-3: 빌드 & 배포 (Issue 댓글에서 실행)
|
|
811
|
-
# -----------------------------------------------------------------
|
|
812
775
|
build-preview-issue:
|
|
813
776
|
name: Preview 빌드 & 배포 (Issue)
|
|
814
777
|
needs: [check-command, get-branch-from-issue]
|
|
@@ -887,9 +850,6 @@ jobs:
|
|
|
887
850
|
# 브랜치의 최신 커밋 SHA 가져오기
|
|
888
851
|
echo "sha=$(git ls-remote https://github.com/${{ github.repository }}.git refs/heads/${{ needs.get-branch-from-issue.outputs.branch_name }} | cut -c1-7)" >> $GITHUB_OUTPUT
|
|
889
852
|
|
|
890
|
-
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
891
|
-
# 진행 상황 댓글 시스템
|
|
892
|
-
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
893
853
|
- name: 진행 상황 댓글 생성
|
|
894
854
|
if: steps.check_branch.outputs.exists == 'true'
|
|
895
855
|
id: progress
|
|
@@ -946,9 +906,7 @@ jobs:
|
|
|
946
906
|
if: steps.check_branch.outputs.exists == 'true'
|
|
947
907
|
run: chmod +x gradlew
|
|
948
908
|
|
|
949
|
-
#
|
|
950
|
-
# ⚠️ [영역 2] 프로젝트별 Secret 파일 생성
|
|
951
|
-
# =================================================================
|
|
909
|
+
# [영역 2] 프로젝트별 Secret 파일 생성
|
|
952
910
|
- name: "[필수] application-prod.yml 생성"
|
|
953
911
|
if: steps.check_branch.outputs.exists == 'true'
|
|
954
912
|
run: |
|
|
@@ -956,9 +914,7 @@ jobs:
|
|
|
956
914
|
cat << 'EOF' > ${{ env.APPLICATION_YML_PATH }}
|
|
957
915
|
${{ secrets.APPLICATION_PROD_YML }}
|
|
958
916
|
EOF
|
|
959
|
-
#
|
|
960
|
-
# ⚠️ [영역 2 끝] 프로젝트별 Secret 파일 생성 끝
|
|
961
|
-
# =================================================================
|
|
917
|
+
# [영역 2 끝] 프로젝트별 Secret 파일 생성 끝
|
|
962
918
|
|
|
963
919
|
- name: Gradle 빌드
|
|
964
920
|
if: steps.check_branch.outputs.exists == 'true'
|
|
@@ -1086,11 +1042,10 @@ jobs:
|
|
|
1086
1042
|
script: |
|
|
1087
1043
|
set -e
|
|
1088
1044
|
|
|
1089
|
-
# 환경 변수 설정 (배포 서버용)
|
|
1090
1045
|
export PATH=$PATH:/usr/local/bin
|
|
1091
1046
|
export PW="${{ secrets.SERVER_PASSWORD }}"
|
|
1092
1047
|
|
|
1093
|
-
#
|
|
1048
|
+
# SSH 인증 방식에 따른 sudo 추상화
|
|
1094
1049
|
SSH_AUTH_METHOD="${{ env.SSH_AUTH_METHOD }}"
|
|
1095
1050
|
SSH_AUTH_METHOD="${SSH_AUTH_METHOD:-password}"
|
|
1096
1051
|
if [ "${SSH_AUTH_METHOD}" = "key" ]; then
|
|
@@ -1100,7 +1055,6 @@ jobs:
|
|
|
1100
1055
|
fi
|
|
1101
1056
|
echo "🔐 SSH 인증 방식: ${SSH_AUTH_METHOD}"
|
|
1102
1057
|
|
|
1103
|
-
# 변수 설정
|
|
1104
1058
|
ISSUE_NUMBER=${{ needs.get-branch-from-issue.outputs.issue_number }}
|
|
1105
1059
|
PROJECT_NAME="${{ env.PROJECT_NAME }}"
|
|
1106
1060
|
CONTAINER_NAME="${PROJECT_NAME}-pr-${ISSUE_NUMBER}"
|
|
@@ -1118,21 +1072,17 @@ jobs:
|
|
|
1118
1072
|
echo "🌐 도메인: ${DOMAIN}"
|
|
1119
1073
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
1120
1074
|
|
|
1121
|
-
# 이미지 Pull
|
|
1122
1075
|
echo "📥 Docker 이미지 Pull 중..."
|
|
1123
1076
|
SUDO docker pull "${IMAGE}"
|
|
1124
1077
|
|
|
1125
|
-
# 기존 컨테이너 삭제
|
|
1126
1078
|
echo "🗑️ 기존 컨테이너 정리 중..."
|
|
1127
1079
|
SUDO docker rm -f "${CONTAINER_NAME}" 2>/dev/null || true
|
|
1128
1080
|
|
|
1129
|
-
# 볼륨 마운트 옵션 구성
|
|
1130
1081
|
VOLUME_OPTS="-v /etc/localtime:/etc/localtime:ro"
|
|
1131
1082
|
if [ -n "${{ env.PROJECT_TARGET_DIR }}" ] && [ -n "${{ env.PROJECT_MNT_DIR }}" ]; then
|
|
1132
1083
|
VOLUME_OPTS="$VOLUME_OPTS -v ${{ env.PROJECT_TARGET_DIR }}:${{ env.PROJECT_MNT_DIR }}"
|
|
1133
1084
|
fi
|
|
1134
1085
|
|
|
1135
|
-
# 새 컨테이너 실행
|
|
1136
1086
|
echo "🐳 새 컨테이너 실행 중..."
|
|
1137
1087
|
SUDO docker run -d \
|
|
1138
1088
|
--name "${CONTAINER_NAME}" \
|
|
@@ -1146,11 +1096,9 @@ jobs:
|
|
|
1146
1096
|
$VOLUME_OPTS \
|
|
1147
1097
|
"${IMAGE}"
|
|
1148
1098
|
|
|
1149
|
-
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
1150
1099
|
# Health Check (최대 120초 대기) - 하이브리드 방식
|
|
1151
1100
|
# 1. HEALTH_CHECK_PATH가 설정되어 있으면 HTTP 체크 시도
|
|
1152
1101
|
# 2. 폴백: 로그 패턴 매칭 (HEALTH_CHECK_LOG_PATTERN)
|
|
1153
|
-
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
1154
1102
|
echo ""
|
|
1155
1103
|
echo "⏳ Health Check 시작 (최대 120초 대기)..."
|
|
1156
1104
|
HEALTH_PATH="${{ env.HEALTH_CHECK_PATH }}"
|
|
@@ -1384,9 +1332,7 @@ jobs:
|
|
|
1384
1332
|
});
|
|
1385
1333
|
}
|
|
1386
1334
|
|
|
1387
|
-
# -----------------------------------------------------------------
|
|
1388
1335
|
# Job 3: Preview 삭제 (PR/Issue 닫힘 또는 destroy 명령)
|
|
1389
|
-
# -----------------------------------------------------------------
|
|
1390
1336
|
destroy-preview:
|
|
1391
1337
|
name: Preview 삭제
|
|
1392
1338
|
# needs 의존성 제거: PR/Issue 닫힘 이벤트에서도 독립적으로 실행되도록 함
|
|
@@ -1419,11 +1365,10 @@ jobs:
|
|
|
1419
1365
|
key: ${{ secrets.SSH_KEY }}
|
|
1420
1366
|
port: ${{ env.SSH_PORT }}
|
|
1421
1367
|
script: |
|
|
1422
|
-
# 환경 변수 설정 (배포 서버용)
|
|
1423
1368
|
export PATH=$PATH:/usr/local/bin
|
|
1424
1369
|
export PW="${{ secrets.SERVER_PASSWORD }}"
|
|
1425
1370
|
|
|
1426
|
-
#
|
|
1371
|
+
# SSH 인증 방식에 따른 sudo 추상화
|
|
1427
1372
|
SSH_AUTH_METHOD="${{ env.SSH_AUTH_METHOD }}"
|
|
1428
1373
|
SSH_AUTH_METHOD="${SSH_AUTH_METHOD:-password}"
|
|
1429
1374
|
if [ "${SSH_AUTH_METHOD}" = "key" ]; then
|
|
@@ -1445,11 +1390,9 @@ jobs:
|
|
|
1445
1390
|
echo "🔢 번호: #${PR_NUMBER}"
|
|
1446
1391
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
1447
1392
|
|
|
1448
|
-
# 컨테이너 삭제
|
|
1449
1393
|
echo "🐳 컨테이너 삭제 중..."
|
|
1450
1394
|
SUDO docker rm -f "${CONTAINER_NAME}" 2>/dev/null || true
|
|
1451
1395
|
|
|
1452
|
-
# 이미지 삭제
|
|
1453
1396
|
echo "🖼️ 이미지 삭제 중..."
|
|
1454
1397
|
SUDO docker rmi "${IMAGE}" 2>/dev/null || true
|
|
1455
1398
|
|
|
@@ -1487,9 +1430,7 @@ jobs:
|
|
|
1487
1430
|
body: body
|
|
1488
1431
|
});
|
|
1489
1432
|
|
|
1490
|
-
# -----------------------------------------------------------------
|
|
1491
1433
|
# Job 4: 상태 확인 (PR/Issue 모두 지원)
|
|
1492
|
-
# -----------------------------------------------------------------
|
|
1493
1434
|
check-status:
|
|
1494
1435
|
name: Preview 상태 확인
|
|
1495
1436
|
needs: check-command
|
|
@@ -1506,7 +1447,6 @@ jobs:
|
|
|
1506
1447
|
key: ${{ secrets.SSH_KEY }}
|
|
1507
1448
|
port: ${{ env.SSH_PORT }}
|
|
1508
1449
|
script: |
|
|
1509
|
-
# 환경 변수 설정 (배포 서버용)
|
|
1510
1450
|
export PATH=$PATH:/usr/local/bin
|
|
1511
1451
|
|
|
1512
1452
|
NUMBER=${{ github.event.issue.number }}
|
|
@@ -1537,7 +1477,6 @@ jobs:
|
|
|
1537
1477
|
key: ${{ secrets.SSH_KEY }}
|
|
1538
1478
|
port: ${{ env.SSH_PORT }}
|
|
1539
1479
|
script: |
|
|
1540
|
-
# 환경 변수 설정 (배포 서버용)
|
|
1541
1480
|
export PATH=$PATH:/usr/local/bin
|
|
1542
1481
|
|
|
1543
1482
|
NUMBER=${{ github.event.issue.number }}
|
|
@@ -1602,11 +1541,9 @@ jobs:
|
|
|
1602
1541
|
body: body
|
|
1603
1542
|
});
|
|
1604
1543
|
|
|
1605
|
-
# ============================================================
|
|
1606
1544
|
# Custom Branch Preview Jobs
|
|
1607
1545
|
# 특정 브랜치를 지정하여 빌드/삭제/상태 확인하는 기능
|
|
1608
1546
|
# 명령어: /wizard server build <브랜치명>
|
|
1609
|
-
# ============================================================
|
|
1610
1547
|
|
|
1611
1548
|
build-preview-custom-branch:
|
|
1612
1549
|
name: Preview 빌드 & 배포 (Custom Branch)
|