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.
Files changed (78) hide show
  1. package/README.md +24 -21
  2. package/package.json +2 -2
  3. package/payload/config/breaking-changes.json +1 -1
  4. package/payload/scripts/__pycache__/changelog_manager.cpython-314.pyc +0 -0
  5. package/payload/scripts/__pycache__/issue_helper.cpython-314.pyc +0 -0
  6. package/payload/scripts/__pycache__/version_manager.cpython-314.pyc +0 -0
  7. package/payload/scripts/changelog_manager.py +84 -31
  8. package/payload/scripts/version_manager.py +2 -2
  9. package/payload/version.yml.template +4 -2
  10. package/payload/workflows/common/PROJECT-COMMON-AI-PR-SUMMARY.yaml +30 -10
  11. package/payload/workflows/common/PROJECT-COMMON-AUTO-CHANGELOG-CONTROL.yaml +37 -12
  12. package/payload/workflows/common/PROJECT-COMMON-ISSUE-HELPER.yaml +3 -6
  13. package/payload/workflows/common/PROJECT-COMMON-README-VERSION-UPDATE.yaml +0 -12
  14. package/payload/workflows/common/PROJECT-COMMON-RELEASE-PUBLISH.yaml +27 -6
  15. package/payload/workflows/common/PROJECT-COMMON-VERSION-CONTROL.yaml +3 -7
  16. package/payload/workflows/flutter/PROJECT-FLUTTER-ANDROID-FIREBASE-CICD.yaml +7 -34
  17. package/payload/workflows/flutter/PROJECT-FLUTTER-ANDROID-PLAYSTORE-CICD.yaml +2 -25
  18. package/payload/workflows/flutter/PROJECT-FLUTTER-ANDROID-SELFHOSTED-CICD.yaml +2 -20
  19. package/payload/workflows/flutter/PROJECT-FLUTTER-ANDROID-TEST-APK.yaml +5 -30
  20. package/payload/workflows/flutter/PROJECT-FLUTTER-APP-BUILD-TRIGGER.yaml +0 -4
  21. package/payload/workflows/flutter/PROJECT-FLUTTER-CI.yaml +7 -51
  22. package/payload/workflows/flutter/PROJECT-FLUTTER-IOS-TEST-TESTFLIGHT.yaml +5 -29
  23. package/payload/workflows/flutter/PROJECT-FLUTTER-IOS-TESTFLIGHT.yaml +9 -29
  24. package/payload/workflows/go/PROJECT-GO-CI.yaml +5 -28
  25. package/payload/workflows/go/PROJECT-GO-PR-PREVIEW.yaml +19 -99
  26. package/payload/workflows/go/PROJECT-GO-SIMPLE-CICD.yaml +18 -89
  27. package/payload/workflows/next/PROJECT-NEXT-CI.yaml +11 -41
  28. package/payload/workflows/next/PROJECT-NEXT-CICD.yaml +9 -45
  29. package/payload/workflows/python/PROJECT-PYTHON-CI.yaml +1 -27
  30. package/payload/workflows/python/PROJECT-PYTHON-PR-PREVIEW.yaml +14 -97
  31. package/payload/workflows/python/PROJECT-PYTHON-SIMPLE-CICD.yaml +14 -92
  32. package/payload/workflows/react/PROJECT-REACT-CI.yaml +11 -40
  33. package/payload/workflows/react/PROJECT-REACT-CICD.yaml +9 -43
  34. package/payload/workflows/spring/{nexus/PROJECT-SPRING-NEXUS-CI.yml → PROJECT-SPRING-CI.yml} +2 -25
  35. package/payload/workflows/spring/server-deploy/PROJECT-SPRING-NONSTOP-NGINX-CICD.yaml +19 -63
  36. package/payload/workflows/spring/server-deploy/PROJECT-SPRING-NONSTOP-TRAEFIK-CICD.yaml +19 -59
  37. package/payload/workflows/spring/server-deploy/PROJECT-SPRING-PR-PREVIEW.yaml +23 -86
  38. package/payload/workflows/spring/server-deploy/PROJECT-SPRING-SIMPLE-CICD.yaml +20 -80
  39. package/src/cli/args.js +8 -15
  40. package/src/cli/help.js +2 -3
  41. package/src/commands/doctor.js +9 -8
  42. package/src/commands/dry-run.js +1 -1
  43. package/src/commands/full.js +9 -10
  44. package/src/commands/interactive-flutter.js +1 -1
  45. package/src/commands/interactive.js +34 -46
  46. package/src/commands/purge.js +2 -2
  47. package/src/commands/status.js +5 -6
  48. package/src/commands/uninstall.js +3 -4
  49. package/src/context.js +5 -6
  50. package/src/core/assets.js +2 -2
  51. package/src/core/baseline.js +1 -1
  52. package/src/core/branches.js +3 -3
  53. package/src/core/breaking-check.js +1 -1
  54. package/src/core/breaking.js +1 -1
  55. package/src/core/copy/flutter-app.js +2 -2
  56. package/src/core/copy/gitignore.js +8 -8
  57. package/src/core/copy/workflows.js +24 -69
  58. package/src/core/deploy-style.js +2 -2
  59. package/src/core/detect-fs.js +11 -11
  60. package/src/core/detect.js +7 -7
  61. package/src/core/flutter-options.js +1 -1
  62. package/src/core/installed-stores.js +1 -1
  63. package/src/core/logger.js +1 -1
  64. package/src/core/paths-resolve.js +1 -1
  65. package/src/core/removal-plan.js +4 -4
  66. package/src/core/verify.js +4 -4
  67. package/src/core/version-yml.js +27 -34
  68. package/src/core/wizard-env.js +4 -4
  69. package/src/index.js +14 -14
  70. package/src/ui/banner.js +2 -2
  71. package/src/ui/env-plan.js +10 -16
  72. package/src/ui/prompts.js +9 -14
  73. package/src/ui/status-cards.js +10 -12
  74. package/src/ui/summary.js +13 -13
  75. package/payload/workflows/common/secret-backup/PROJECT-COMMON-SECRET-FILE-UPLOAD.yaml +0 -210
  76. package/payload/workflows/spring/nexus/PROJECT-SPRING-GITHUB-PACKAGES-PUBLISH.yml +0 -92
  77. package/payload/workflows/spring/nexus/PROJECT-SPRING-NEXUS-PUBLISH.yml +0 -70
  78. 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
- # 🔑 필수 GitHub Secrets
7
- # ===================================================================
8
- # APPLICATION_PROD_YML (선택): application-prod.yml 내용
9
- # DOCKERHUB_USERNAME: DockerHub 사용자명
10
- # DOCKERHUB_TOKEN: DockerHub 액세스 토큰
11
- # SERVER_HOST: 배포 서버 주소
12
- # SERVER_USER: SSH 사용자명
13
- # SERVER_PASSWORD: SSH 비밀번호 (SSH_AUTH_METHOD=password일 때)
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
- # 🔐 SSH 인증 방식: "password"(Synology·일반 서버) | "key"(AWS EC2·.pem)
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
- # 📋 필수 (모든 Spring Boot 프로젝트):
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
- # 🔐 SSH 인증 방식에 따른 sudo 추상화
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
- # 🔐 SSH 인증 방식에 따른 sudo 추상화
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
- # 🔐 SSH 인증 방식에 따른 sudo 추상화
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)