project-auto-wizard 0.12.0 → 0.12.2

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 +4 -8
  2. package/package.json +1 -1
  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 +4 -4
  8. package/payload/scripts/version_manager.py +2 -2
  9. package/payload/version.yml.template +0 -2
  10. package/payload/workflows/common/PROJECT-COMMON-AI-PR-SUMMARY.yaml +0 -4
  11. package/payload/workflows/common/PROJECT-COMMON-AUTO-CHANGELOG-CONTROL.yaml +2 -7
  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 +2 -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 +1 -15
  40. package/src/cli/help.js +0 -2
  41. package/src/commands/doctor.js +5 -5
  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 +25 -46
  46. package/src/commands/purge.js +2 -2
  47. package/src/commands/status.js +4 -6
  48. package/src/commands/uninstall.js +3 -4
  49. package/src/context.js +4 -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 +3 -3
  67. package/src/core/version-yml.js +17 -33
  68. package/src/core/wizard-env.js +4 -4
  69. package/src/index.js +12 -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 +9 -9
  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,19 +1,10 @@
1
1
  # project-auto-wizard:managed-workflow
2
- # ===================================================================
3
2
  # Python FastAPI 빌드 검증 워크플로우 (CI Only)
4
- # ===================================================================
5
- #
6
- # 설명:
7
3
  # - {{MAIN_BRANCH}} 브랜치에 push 시 Docker 빌드가 정상적으로 되는지만 검증
8
4
  # - 배포는 수행하지 않음 ({{MAIN_BRANCH}} 브랜치에서만 배포)
9
- #
10
- # ===================================================================
11
5
 
12
6
  name: PROJECT-PYTHON-CI
13
7
 
14
- # ===================================================================
15
- # 트리거 설정
16
- # ===================================================================
17
8
  on:
18
9
  push:
19
10
  branches:
@@ -23,9 +14,6 @@ on:
23
14
  - "{{DEVELOP_BRANCH}}" # {{DEVELOP_BRANCH}} 브랜치로의 PR 시 빌드 검증
24
15
  workflow_dispatch: # 수동 실행 허용
25
16
 
26
- # ===================================================================
27
- # 환경 변수 설정
28
- # ===================================================================
29
17
  env:
30
18
  # 프로젝트 고유 식별자 (컨테이너명, 이미지명, 도메인에 사용)
31
19
  PROJECT_NAME: "__PROJECT_NAME__" # @wizard ask:@repo
@@ -33,9 +21,6 @@ env:
33
21
  PROJECT_PATH: "." # @wizard auto:project-path
34
22
 
35
23
  jobs:
36
- # ===================================================================
37
- # 변경 감지 (모노레포에서 이 프로젝트 경로가 바뀌었는지 판별)
38
- # ===================================================================
39
24
  changes:
40
25
  name: 변경 감지
41
26
  runs-on: ubuntu-latest
@@ -57,9 +42,6 @@ jobs:
57
42
  project:
58
43
  - '${{ env.PROJECT_PATH == '.' && '**' || format('{0}/**', env.PROJECT_PATH) }}'
59
44
 
60
- # ===================================================================
61
- # 빌드 검증 작업
62
- # ===================================================================
63
45
  build-check:
64
46
  name: Python FastAPI 빌드 검증
65
47
  runs-on: ubuntu-latest
@@ -67,11 +49,9 @@ jobs:
67
49
  if: ${{ github.event_name == 'workflow_dispatch' || needs.changes.outputs.project == 'true' }}
68
50
 
69
51
  steps:
70
- # 1. 소스코드 체크아웃
71
52
  - name: 코드 체크아웃
72
53
  uses: actions/checkout@v7
73
54
 
74
- # 2. .env 파일 생성 (빌드 검증용)
75
55
  - name: .env 파일 생성
76
56
  run: |
77
57
  cat > .env << 'EOF'
@@ -79,11 +59,9 @@ jobs:
79
59
  EOF
80
60
  echo "✅ .env 파일이 생성되었습니다"
81
61
 
82
- # 3. Docker 빌드 환경 설정
83
62
  - name: Docker 빌드환경 설정
84
63
  uses: docker/setup-buildx-action@v3
85
64
 
86
- # 4. Docker 이미지 빌드 (push 없이 검증만)
87
65
  - name: Docker 이미지 빌드 검증
88
66
  uses: docker/build-push-action@v5
89
67
  with:
@@ -91,11 +69,9 @@ jobs:
91
69
  file: ./Dockerfile
92
70
  push: false # 푸시하지 않음 (빌드 검증만)
93
71
  tags: ${{ env.PROJECT_NAME }}:build-check
94
- # GitHub Actions 캐시 사용
95
72
  cache-from: type=gha
96
73
  cache-to: type=gha,mode=max
97
74
 
98
- # 5. 빌드 성공 메시지
99
75
  - name: 빌드 검증 완료
100
76
  run: |
101
77
  echo "✅ Docker 빌드 검증이 성공적으로 완료되었습니다!"
@@ -106,9 +82,7 @@ jobs:
106
82
  echo " 📝 커밋: ${{ github.sha }}"
107
83
  echo " ⏰ 검증 시간: $(date '+%Y-%m-%d %H:%M:%S')"
108
84
 
109
- # ===================================================================
110
- # CI Gate (required check로 등록할 단일 job)
111
- # ===================================================================
85
+ # CI Gate: required check로 등록할 단일 job
112
86
  ci-gate:
113
87
  name: CI Gate
114
88
  if: ${{ always() }}
@@ -1,14 +1,9 @@
1
1
  # project-auto-wizard:managed-workflow
2
- # ===================================================================
3
2
  # Python/FastAPI PR Preview (SSH + Docker + Traefik)
4
- # ===================================================================
5
- #
6
3
  # PR 또는 Issue 코멘트 명령어를 통해 Preview 환경을 자동으로 관리합니다.
7
4
  # Traefik 리버스 프록시를 통해 동적 라우팅됩니다.
8
5
  #
9
- # ===================================================================
10
- # 🔑 필수 GitHub Secrets
11
- # ===================================================================
6
+ # 필수 GitHub Secrets
12
7
  # ENV_FILE: .env 파일 전체 내용
13
8
  # DOCKERHUB_USERNAME: Docker Hub 사용자명
14
9
  # DOCKERHUB_TOKEN: Docker Hub 액세스 토큰
@@ -16,27 +11,23 @@
16
11
  # SERVER_USER: SSH 사용자명
17
12
  # SERVER_PASSWORD: SSH 비밀번호 (SSH_AUTH_METHOD=password일 때)
18
13
  # SSH_KEY: SSH 개인키 .pem 내용 (SSH_AUTH_METHOD=key일 때, AWS EC2 등)
19
- # ===================================================================
20
14
  #
21
- # 🚀 사용법:
15
+ # 사용법
22
16
  # /wizard server build - Preview 빌드 및 배포
23
17
  # /wizard server destroy - Preview 환경 삭제
24
18
  # /wizard server status - 현재 상태 확인
25
19
  #
26
- # 📊 리소스 네이밍:
20
+ # 리소스 네이밍
27
21
  # - 컨테이너: {PROJECT_NAME}-pr-{번호}
28
22
  # - 도메인: {PROJECT_NAME}-pr-{번호}.pr.example.com
29
23
  #
30
- # 📋 사전 요구사항:
24
+ # 사전 요구사항
31
25
  # - Traefik 컨테이너 실행 중 (traefik-network)
32
26
  # - 와일드카드 DNS 설정: *.pr.example.com → 서버
33
- # ===================================================================
34
27
 
35
28
  name: PROJECT-PYTHON-PR-PREVIEW
36
29
 
37
- # ===================================================================
38
- # ⚠️ [영역 1] 프로젝트별 설정 - 다른 프로젝트에서 사용 시 이 섹션만 수정하세요
39
- # ===================================================================
30
+ # 프로젝트별 설정: 다른 프로젝트에서 사용 시 이 섹션만 수정하세요
40
31
  env:
41
32
  # 프로젝트 고유 식별자 (컨테이너명, 이미지명, 도메인에 사용)
42
33
  PROJECT_NAME: "__PROJECT_NAME__" # @wizard ask:@repo
@@ -45,7 +36,7 @@ env:
45
36
  DOCKERFILE_PATH: './Dockerfile'
46
37
  INTERNAL_PORT: '8000'
47
38
 
48
- # 🗂️ 볼륨 마운트 설정 (프로젝트별 수정 필요, 빈값이면 마운트 안함)
39
+ # 볼륨 마운트 설정 (프로젝트별 수정 필요, 빈값이면 마운트 안함)
49
40
  PROJECT_TARGET_DIR: "__PROJECT_TARGET_DIR__" # @wizard ask:/volume1/projects/__PROJECT_NAME__
50
41
  PROJECT_MNT_DIR: "__PROJECT_MNT_DIR__" # @wizard ask:/mnt/__PROJECT_NAME__
51
42
 
@@ -54,7 +45,7 @@ env:
54
45
  PREVIEW_DOMAIN_SUFFIX: "__PREVIEW_DOMAIN_SUFFIX__" # @wizard ask:pr.example.com
55
46
  PREVIEW_PORT: '8079'
56
47
 
57
- # 🔐 SSH 인증 방식: "password"(Synology·일반 서버) | "key"(AWS EC2·.pem)
48
+ # SSH 인증 방식: "password"(Synology·일반 서버) | "key"(AWS EC2·.pem)
58
49
  # password → SERVER_PASSWORD secret 사용
59
50
  # key → SSH_KEY secret 사용 (.pem 파일 전체 내용을 secret 값으로)
60
51
  SSH_AUTH_METHOD: "password" # @wizard ask:password
@@ -79,9 +70,6 @@ env:
79
70
  HEALTH_CHECK_LOG_PATTERN: 'Uvicorn running on|Application startup complete'
80
71
  API_DOCS_PATH: '/docs'
81
72
 
82
- # ===================================================================
83
- # 트리거 설정
84
- # ===================================================================
85
73
  on:
86
74
  issue_comment:
87
75
  types: [created] # PR 댓글 + Issue 댓글
@@ -95,13 +83,8 @@ permissions:
95
83
  pull-requests: write
96
84
  issues: write
97
85
 
98
- # ===================================================================
99
- # Jobs
100
- # ===================================================================
101
86
  jobs:
102
- # -----------------------------------------------------------------
103
87
  # Job 1: 명령어 파싱 (PR 댓글 + Issue 댓글 모두 지원)
104
- # -----------------------------------------------------------------
105
88
  check-command:
106
89
  name: 명령어 확인
107
90
  if: github.event_name == 'issue_comment'
@@ -132,7 +115,6 @@ jobs:
132
115
  COMMENT: ${{ github.event.comment.body }}
133
116
  IS_PR: ${{ github.event.issue.pull_request != null }}
134
117
  run: |
135
- # PR인지 Issue인지 확인
136
118
  if [[ "$IS_PR" == "true" ]]; then
137
119
  echo "is_pr=true" >> $GITHUB_OUTPUT
138
120
  echo "ℹ️ PR 댓글에서 명령어 감지"
@@ -141,7 +123,6 @@ jobs:
141
123
  echo "ℹ️ Issue 댓글에서 명령어 감지"
142
124
  fi
143
125
 
144
- # 명령어 파싱 (브랜치 파라미터 지원)
145
126
  # 형식: /wizard server <command> [브랜치명]
146
127
  if [[ "$COMMENT" =~ /wizard[[:space:]]+server[[:space:]]+build([[:space:]]+([^[:space:]]+))? ]]; then
147
128
  echo "command=build" >> $GITHUB_OUTPUT
@@ -181,9 +162,7 @@ jobs:
181
162
  echo "ℹ️ /wizard server 명령어가 아님"
182
163
  fi
183
164
 
184
- # -----------------------------------------------------------------
185
165
  # Job 2-1: 빌드 & 배포 (PR 댓글에서 실행)
186
- # -----------------------------------------------------------------
187
166
  build-preview-pr:
188
167
  name: Preview 빌드 & 배포 (PR)
189
168
  needs: check-command
@@ -208,9 +187,7 @@ jobs:
208
187
  core.setOutput('sha', pr.data.head.sha.substring(0, 7));
209
188
  return pr.data.number;
210
189
 
211
- # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
212
190
  # 진행 상황 댓글 시스템
213
- # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
214
191
  - name: 진행 상황 댓글 생성
215
192
  id: progress
216
193
  uses: actions/github-script@v9
@@ -250,17 +227,12 @@ jobs:
250
227
  with:
251
228
  ref: ${{ steps.pr.outputs.ref }}
252
229
 
253
- # =================================================================
254
- # ⚠️ [영역 2] 환경변수 파일 생성
255
- # =================================================================
230
+ # 환경변수 파일 생성 (프로젝트별 수정 영역)
256
231
  - name: "[필수] .env 파일 생성"
257
232
  run: |
258
233
  cat << 'EOF' > .env
259
234
  ${{ secrets.ENV_FILE }}
260
235
  EOF
261
- # =================================================================
262
- # ⚠️ [영역 2 끝] 환경변수 파일 생성 끝
263
- # =================================================================
264
236
 
265
237
  - name: Docker 로그인
266
238
  uses: docker/login-action@v3
@@ -333,11 +305,10 @@ jobs:
333
305
  script: |
334
306
  set -e
335
307
 
336
- # 환경 변수 설정 (배포 서버용)
337
308
  export PATH=$PATH:/usr/local/bin
338
309
  export PW="${{ secrets.SERVER_PASSWORD }}"
339
310
 
340
- # 🔐 SSH 인증 방식에 따른 sudo 추상화
311
+ # SSH 인증 방식에 따른 sudo 추상화
341
312
  SSH_AUTH_METHOD="${SSH_AUTH_METHOD:-password}"
342
313
  if [ "${SSH_AUTH_METHOD}" = "key" ]; then
343
314
  SUDO() { sudo "$@"; }
@@ -346,7 +317,6 @@ jobs:
346
317
  fi
347
318
  echo "🔐 SSH 인증 방식: ${SSH_AUTH_METHOD}"
348
319
 
349
- # 변수 설정
350
320
  PR_NUMBER=${{ github.event.issue.number }}
351
321
  PROJECT_NAME="${{ env.PROJECT_NAME }}"
352
322
  CONTAINER_NAME="${PROJECT_NAME}-pr-${PR_NUMBER}"
@@ -364,21 +334,17 @@ jobs:
364
334
  echo "🌐 도메인: ${DOMAIN}"
365
335
  echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
366
336
 
367
- # 이미지 Pull
368
337
  echo "📥 Docker 이미지 Pull 중..."
369
338
  SUDO docker pull "${IMAGE}"
370
339
 
371
- # 기존 컨테이너 삭제
372
340
  echo "🗑️ 기존 컨테이너 정리 중..."
373
341
  SUDO docker rm -f "${CONTAINER_NAME}" 2>/dev/null || true
374
342
 
375
- # 볼륨 마운트 옵션 구성
376
343
  VOLUME_OPTS="-v /etc/localtime:/etc/localtime:ro"
377
344
  if [ -n "${{ env.PROJECT_TARGET_DIR }}" ] && [ -n "${{ env.PROJECT_MNT_DIR }}" ]; then
378
345
  VOLUME_OPTS="$VOLUME_OPTS -v ${{ env.PROJECT_TARGET_DIR }}:${{ env.PROJECT_MNT_DIR }}"
379
346
  fi
380
347
 
381
- # 새 컨테이너 실행
382
348
  echo "🐳 새 컨테이너 실행 중..."
383
349
  SUDO docker run -d \
384
350
  --name "${CONTAINER_NAME}" \
@@ -392,11 +358,9 @@ jobs:
392
358
  $VOLUME_OPTS \
393
359
  "${IMAGE}"
394
360
 
395
- # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
396
361
  # Health Check (최대 120초 대기) - 하이브리드 방식
397
362
  # 1. HEALTH_CHECK_PATH가 설정되어 있으면 HTTP 체크 시도
398
363
  # 2. 폴백: 로그 패턴 매칭 (HEALTH_CHECK_LOG_PATTERN)
399
- # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
400
364
  echo ""
401
365
  echo "⏳ Health Check 시작 (최대 120초 대기)..."
402
366
  HEALTH_PATH="${{ env.HEALTH_CHECK_PATH }}"
@@ -616,9 +580,7 @@ jobs:
616
580
  });
617
581
  }
618
582
 
619
- # -----------------------------------------------------------------
620
583
  # Job 2-2: Issue에서 브랜치명 추출
621
- # -----------------------------------------------------------------
622
584
  get-branch-from-issue:
623
585
  name: Issue에서 브랜치 추출
624
586
  needs: check-command
@@ -706,9 +668,7 @@ jobs:
706
668
  body: body
707
669
  });
708
670
 
709
- # -----------------------------------------------------------------
710
671
  # Job 2-3: 빌드 & 배포 (Issue 댓글에서 실행)
711
- # -----------------------------------------------------------------
712
672
  build-preview-issue:
713
673
  name: Preview 빌드 & 배포 (Issue)
714
674
  needs: [check-command, get-branch-from-issue]
@@ -784,12 +744,9 @@ jobs:
784
744
  run: |
785
745
  echo "ref=${{ needs.get-branch-from-issue.outputs.branch_name }}" >> $GITHUB_OUTPUT
786
746
  echo "issue_number=${{ needs.get-branch-from-issue.outputs.issue_number }}" >> $GITHUB_OUTPUT
787
- # 브랜치의 최신 커밋 SHA 가져오기
788
747
  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
789
748
 
790
- # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
791
749
  # 진행 상황 댓글 시스템
792
- # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
793
750
  - name: 진행 상황 댓글 생성
794
751
  if: steps.check_branch.outputs.exists == 'true'
795
752
  id: progress
@@ -834,18 +791,13 @@ jobs:
834
791
  with:
835
792
  ref: ${{ needs.get-branch-from-issue.outputs.branch_name }}
836
793
 
837
- # =================================================================
838
- # ⚠️ [영역 2] 환경변수 파일 생성
839
- # =================================================================
794
+ # 환경변수 파일 생성 (프로젝트별 수정 영역)
840
795
  - name: "[필수] .env 파일 생성"
841
796
  if: steps.check_branch.outputs.exists == 'true'
842
797
  run: |
843
798
  cat << 'EOF' > .env
844
799
  ${{ secrets.ENV_FILE }}
845
800
  EOF
846
- # =================================================================
847
- # ⚠️ [영역 2 끝] 환경변수 파일 생성 끝
848
- # =================================================================
849
801
 
850
802
  - name: Docker 로그인
851
803
  if: steps.check_branch.outputs.exists == 'true'
@@ -926,11 +878,10 @@ jobs:
926
878
  script: |
927
879
  set -e
928
880
 
929
- # 환경 변수 설정 (배포 서버용)
930
881
  export PATH=$PATH:/usr/local/bin
931
882
  export PW="${{ secrets.SERVER_PASSWORD }}"
932
883
 
933
- # 🔐 SSH 인증 방식에 따른 sudo 추상화
884
+ # SSH 인증 방식에 따른 sudo 추상화
934
885
  SSH_AUTH_METHOD="${SSH_AUTH_METHOD:-password}"
935
886
  if [ "${SSH_AUTH_METHOD}" = "key" ]; then
936
887
  SUDO() { sudo "$@"; }
@@ -939,7 +890,6 @@ jobs:
939
890
  fi
940
891
  echo "🔐 SSH 인증 방식: ${SSH_AUTH_METHOD}"
941
892
 
942
- # 변수 설정
943
893
  ISSUE_NUMBER=${{ needs.get-branch-from-issue.outputs.issue_number }}
944
894
  PROJECT_NAME="${{ env.PROJECT_NAME }}"
945
895
  CONTAINER_NAME="${PROJECT_NAME}-pr-${ISSUE_NUMBER}"
@@ -957,21 +907,17 @@ jobs:
957
907
  echo "🌐 도메인: ${DOMAIN}"
958
908
  echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
959
909
 
960
- # 이미지 Pull
961
910
  echo "📥 Docker 이미지 Pull 중..."
962
911
  SUDO docker pull "${IMAGE}"
963
912
 
964
- # 기존 컨테이너 삭제
965
913
  echo "🗑️ 기존 컨테이너 정리 중..."
966
914
  SUDO docker rm -f "${CONTAINER_NAME}" 2>/dev/null || true
967
915
 
968
- # 볼륨 마운트 옵션 구성
969
916
  VOLUME_OPTS="-v /etc/localtime:/etc/localtime:ro"
970
917
  if [ -n "${{ env.PROJECT_TARGET_DIR }}" ] && [ -n "${{ env.PROJECT_MNT_DIR }}" ]; then
971
918
  VOLUME_OPTS="$VOLUME_OPTS -v ${{ env.PROJECT_TARGET_DIR }}:${{ env.PROJECT_MNT_DIR }}"
972
919
  fi
973
920
 
974
- # 새 컨테이너 실행
975
921
  echo "🐳 새 컨테이너 실행 중..."
976
922
  SUDO docker run -d \
977
923
  --name "${CONTAINER_NAME}" \
@@ -985,11 +931,9 @@ jobs:
985
931
  $VOLUME_OPTS \
986
932
  "${IMAGE}"
987
933
 
988
- # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
989
934
  # Health Check (최대 120초 대기) - 하이브리드 방식
990
935
  # 1. HEALTH_CHECK_PATH가 설정되어 있으면 HTTP 체크 시도
991
936
  # 2. 폴백: 로그 패턴 매칭 (HEALTH_CHECK_LOG_PATTERN)
992
- # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
993
937
  echo ""
994
938
  echo "⏳ Health Check 시작 (최대 120초 대기)..."
995
939
  HEALTH_PATH="${{ env.HEALTH_CHECK_PATH }}"
@@ -1209,9 +1153,7 @@ jobs:
1209
1153
  });
1210
1154
  }
1211
1155
 
1212
- # -----------------------------------------------------------------
1213
1156
  # Job 3: Preview 삭제 (PR/Issue 닫힘 또는 destroy 명령)
1214
- # -----------------------------------------------------------------
1215
1157
  destroy-preview:
1216
1158
  name: Preview 삭제
1217
1159
  # needs 의존성 제거: PR/Issue 닫힘 이벤트에서도 독립적으로 실행되도록 함
@@ -1247,11 +1189,10 @@ jobs:
1247
1189
  port: ${{ env.SSH_PORT }}
1248
1190
  envs: SSH_AUTH_METHOD
1249
1191
  script: |
1250
- # 환경 변수 설정 (배포 서버용)
1251
1192
  export PATH=$PATH:/usr/local/bin
1252
1193
  export PW="${{ secrets.SERVER_PASSWORD }}"
1253
1194
 
1254
- # 🔐 SSH 인증 방식에 따른 sudo 추상화
1195
+ # SSH 인증 방식에 따른 sudo 추상화
1255
1196
  SSH_AUTH_METHOD="${SSH_AUTH_METHOD:-password}"
1256
1197
  if [ "${SSH_AUTH_METHOD}" = "key" ]; then
1257
1198
  SUDO() { sudo "$@"; }
@@ -1272,11 +1213,9 @@ jobs:
1272
1213
  echo "🔢 PR 번호: #${PR_NUMBER}"
1273
1214
  echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
1274
1215
 
1275
- # 컨테이너 삭제
1276
1216
  echo "🐳 컨테이너 삭제 중..."
1277
1217
  SUDO docker rm -f "${CONTAINER_NAME}" 2>/dev/null || true
1278
1218
 
1279
- # 이미지 삭제
1280
1219
  echo "🖼️ 이미지 삭제 중..."
1281
1220
  SUDO docker rmi "${IMAGE}" 2>/dev/null || true
1282
1221
 
@@ -1314,9 +1253,7 @@ jobs:
1314
1253
  body: body
1315
1254
  });
1316
1255
 
1317
- # -----------------------------------------------------------------
1318
1256
  # Job 4: 상태 확인 (PR/Issue 모두 지원)
1319
- # -----------------------------------------------------------------
1320
1257
  check-status:
1321
1258
  name: Preview 상태 확인
1322
1259
  needs: check-command
@@ -1333,7 +1270,6 @@ jobs:
1333
1270
  key: ${{ secrets.SSH_KEY }}
1334
1271
  port: ${{ env.SSH_PORT }}
1335
1272
  script: |
1336
- # 환경 변수 설정 (배포 서버용)
1337
1273
  export PATH=$PATH:/usr/local/bin
1338
1274
 
1339
1275
  NUMBER=${{ github.event.issue.number }}
@@ -1364,7 +1300,6 @@ jobs:
1364
1300
  key: ${{ secrets.SSH_KEY }}
1365
1301
  port: ${{ env.SSH_PORT }}
1366
1302
  script: |
1367
- # 환경 변수 설정 (배포 서버용)
1368
1303
  export PATH=$PATH:/usr/local/bin
1369
1304
 
1370
1305
  NUMBER=${{ github.event.issue.number }}
@@ -1429,9 +1364,7 @@ jobs:
1429
1364
  body: body
1430
1365
  });
1431
1366
 
1432
- # -----------------------------------------------------------------
1433
1367
  # Job 5: 커스텀 브랜치 빌드 & 배포
1434
- # -----------------------------------------------------------------
1435
1368
  build-preview-custom-branch:
1436
1369
  name: Preview 빌드 & 배포 (Custom Branch)
1437
1370
  needs: check-command
@@ -1525,7 +1458,6 @@ jobs:
1525
1458
  SHA=$(git ls-remote https://github.com/${{ github.repository }}.git refs/heads/${{ needs.check-command.outputs.custom_branch }} | cut -c1-7)
1526
1459
  echo "sha=$SHA" >> $GITHUB_OUTPUT
1527
1460
 
1528
- # 진행 상황 댓글 생성
1529
1461
  - name: 진행 상황 댓글 생성
1530
1462
  if: steps.branch_info.outputs.branch_exists == 'true'
1531
1463
  id: progress
@@ -1570,7 +1502,6 @@ jobs:
1570
1502
  with:
1571
1503
  ref: ${{ needs.check-command.outputs.custom_branch }}
1572
1504
 
1573
- # 환경변수 파일 생성
1574
1505
  - name: "[필수] .env 파일 생성"
1575
1506
  if: steps.branch_info.outputs.branch_exists == 'true'
1576
1507
  run: |
@@ -1669,11 +1600,10 @@ jobs:
1669
1600
  script: |
1670
1601
  set -e
1671
1602
 
1672
- # 환경 변수 설정 (배포 서버용)
1673
1603
  export PATH=$PATH:/usr/local/bin
1674
1604
  export PW="${{ secrets.SERVER_PASSWORD }}"
1675
1605
 
1676
- # 🔐 SSH 인증 방식에 따른 sudo 추상화
1606
+ # SSH 인증 방식에 따른 sudo 추상화
1677
1607
  SSH_AUTH_METHOD="${SSH_AUTH_METHOD:-password}"
1678
1608
  if [ "${SSH_AUTH_METHOD}" = "key" ]; then
1679
1609
  SUDO() { sudo "$@"; }
@@ -1682,7 +1612,6 @@ jobs:
1682
1612
  fi
1683
1613
  echo "🔐 SSH 인증 방식: ${SSH_AUTH_METHOD}"
1684
1614
 
1685
- # 변수 설정
1686
1615
  PROJECT_NAME="${{ env.PROJECT_NAME }}"
1687
1616
  CONTAINER_NAME="${{ steps.container.outputs.name }}"
1688
1617
  CONTAINER_SUFFIX="${{ steps.container.outputs.suffix }}"
@@ -1699,21 +1628,17 @@ jobs:
1699
1628
  echo "🌐 도메인: ${DOMAIN}"
1700
1629
  echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
1701
1630
 
1702
- # 이미지 Pull
1703
1631
  echo "📥 Docker 이미지 Pull 중..."
1704
1632
  SUDO docker pull "${IMAGE}"
1705
1633
 
1706
- # 기존 컨테이너 삭제
1707
1634
  echo "🗑️ 기존 컨테이너 정리 중..."
1708
1635
  SUDO docker rm -f "${CONTAINER_NAME}" 2>/dev/null || true
1709
1636
 
1710
- # 볼륨 마운트 옵션 구성
1711
1637
  VOLUME_OPTS="-v /etc/localtime:/etc/localtime:ro"
1712
1638
  if [ -n "${{ env.PROJECT_TARGET_DIR }}" ] && [ -n "${{ env.PROJECT_MNT_DIR }}" ]; then
1713
1639
  VOLUME_OPTS="$VOLUME_OPTS -v ${{ env.PROJECT_TARGET_DIR }}:${{ env.PROJECT_MNT_DIR }}"
1714
1640
  fi
1715
1641
 
1716
- # 새 컨테이너 실행
1717
1642
  echo "🐳 새 컨테이너 실행 중..."
1718
1643
  SUDO docker run -d \
1719
1644
  --name "${CONTAINER_NAME}" \
@@ -1727,7 +1652,6 @@ jobs:
1727
1652
  $VOLUME_OPTS \
1728
1653
  "${IMAGE}"
1729
1654
 
1730
- # Health Check
1731
1655
  echo ""
1732
1656
  echo "⏳ Health Check 시작 (최대 120초 대기)..."
1733
1657
  HEALTH_PATH="${{ env.HEALTH_CHECK_PATH }}"
@@ -1942,9 +1866,7 @@ jobs:
1942
1866
  });
1943
1867
  }
1944
1868
 
1945
- # -----------------------------------------------------------------
1946
1869
  # Job 6: 커스텀 브랜치 Preview 삭제
1947
- # -----------------------------------------------------------------
1948
1870
  destroy-preview-custom-branch:
1949
1871
  name: Preview 삭제 (Custom Branch)
1950
1872
  needs: check-command
@@ -1997,11 +1919,10 @@ jobs:
1997
1919
  port: ${{ env.SSH_PORT }}
1998
1920
  envs: SSH_AUTH_METHOD
1999
1921
  script: |
2000
- # 환경 변수 설정 (배포 서버용)
2001
1922
  export PATH=$PATH:/usr/local/bin
2002
1923
  export PW="${{ secrets.SERVER_PASSWORD }}"
2003
1924
 
2004
- # 🔐 SSH 인증 방식에 따른 sudo 추상화
1925
+ # SSH 인증 방식에 따른 sudo 추상화
2005
1926
  SSH_AUTH_METHOD="${SSH_AUTH_METHOD:-password}"
2006
1927
  if [ "${SSH_AUTH_METHOD}" = "key" ]; then
2007
1928
  SUDO() { sudo "$@"; }
@@ -2024,11 +1945,9 @@ jobs:
2024
1945
  echo "📛 컨테이너: ${CONTAINER_NAME}"
2025
1946
  echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
2026
1947
 
2027
- # 컨테이너 삭제
2028
1948
  echo "🐳 컨테이너 삭제 중..."
2029
1949
  SUDO docker rm -f "${CONTAINER_NAME}" 2>/dev/null || true
2030
1950
 
2031
- # 이미지 삭제
2032
1951
  echo "🖼️ 이미지 삭제 중..."
2033
1952
  SUDO docker rmi "${IMAGE}" 2>/dev/null || true
2034
1953
 
@@ -2063,9 +1982,7 @@ jobs:
2063
1982
  body: body
2064
1983
  });
2065
1984
 
2066
- # -----------------------------------------------------------------
2067
1985
  # Job 7: 커스텀 브랜치 Preview 상태 확인
2068
- # -----------------------------------------------------------------
2069
1986
  check-status-custom-branch:
2070
1987
  name: Preview 상태 확인 (Custom Branch)
2071
1988
  needs: check-command