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,14 +1,9 @@
1
1
  # project-auto-wizard:managed-workflow
2
- # ===================================================================
3
2
  # Python FastAPI CI/CD 배포 (SSH + Docker)
4
- # ===================================================================
5
- #
6
3
  # {{MAIN_BRANCH}} 브랜치 푸시 시 Docker 이미지를 빌드하고
7
4
  # SSH로 접속 가능한 서버(Synology·AWS EC2·VPS 등)에 자동 배포합니다.
8
5
  #
9
- # ===================================================================
10
- # 🔑 필수 GitHub Secrets
11
- # ===================================================================
6
+ # 필수 GitHub Secrets
12
7
  # ENV_FILE: .env 파일 내용
13
8
  # DOCKERHUB_USERNAME: DockerHub 사용자명
14
9
  # DOCKERHUB_TOKEN: DockerHub 액세스 토큰
@@ -16,43 +11,12 @@
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
- #
21
- # 🔧 환경변수 설정 (env 섹션에서 설정)
22
- # ===================================================================
23
- #
24
- # 🌐 포트 및 컨테이너:
25
- # CONTAINER_INTERNAL_PORT: FastAPI 내부 포트 (기본: 8000)
26
- # DEPLOY_PORT: 배포 포트
27
- # CONTAINER_NAME: 컨테이너 이름 (기본: PROJECT_NAME)
28
- #
29
- # 📦 볼륨 마운트:
30
- # ENABLE_VOLUME_MOUNT: 볼륨 마운트 활성화 (true/false)
31
- # VOLUME_HOST_PATH: 호스트 볼륨 경로
32
- # VOLUME_CONTAINER_PATH: 컨테이너 내부 마운트 경로
33
- #
34
- # 🔌 SSH 연결:
35
- # SSH_PORT: SSH 포트 (기본: 2022)
36
- # SSH_COMMAND_TIMEOUT: SSH 명령 타임아웃 (기본: 600s)
37
- # SSH_CONNECTION_TIMEOUT: SSH 연결 타임아웃 (기본: 60s)
38
- #
39
- # ⏱️ 헬스체크:
40
- # HEALTHCHECK_WAIT_SECONDS: 초기화 대기 시간 (기본: 10초)
41
- # HEALTHCHECK_PATH: HTTP 엔드포인트 경로 (비어있으면 로그만 사용)
42
- # HEALTHCHECK_MAX_RETRIES: HTTP 재시도 횟수 (기본: 5회)
43
- # HEALTHCHECK_RETRY_INTERVAL: 재시도 간격 (기본: 3초)
44
- # HEALTHCHECK_LOG_PATTERN: Fallback 로그 검색 패턴
45
14
  #
46
- # 💡 HEALTHCHECK_PATH 예시:
47
- # FastAPI: "/docs"
48
- # 커스텀: "/api/v1/health"
49
- # ===================================================================
15
+ # 환경변수는 아래 env 섹션에서 설정하며, 항목별 설명과 기본값은 각 줄에 적혀 있습니다.
16
+ # HEALTHCHECK_PATH 예시: FastAPI "/docs", 커스텀 "/api/v1/health"
50
17
 
51
18
  name: PROJECT-PYTHON-SIMPLE-CICD
52
19
 
53
- # ===================================================================
54
- # 트리거 설정
55
- # ===================================================================
56
20
  on:
57
21
  push:
58
22
  branches:
@@ -60,38 +24,35 @@ on:
60
24
  # @wizard paths-anchor (모노레포일 때 integrator가 paths 필터를 여기 주입)
61
25
  workflow_dispatch: # 수동 실행 허용
62
26
 
63
- # ===================================================================
64
- # 환경 변수 설정
65
- # ===================================================================
66
27
  env:
67
28
  # 프로젝트 고유 식별자
68
29
  PROJECT_NAME: "__PROJECT_NAME__" # @wizard ask:@repo
69
30
 
70
- # 🌐 포트 설정
31
+ # 포트 설정
71
32
  DEPLOY_PORT: "__DEPLOY_PORT__" # @wizard ask:8000
72
33
 
73
- # 🐳 컨테이너 이름 설정 (비워두면 PROJECT_NAME 사용)
34
+ # 컨테이너 이름 설정 (비워두면 PROJECT_NAME 사용)
74
35
  CONTAINER_NAME: ""
75
36
 
76
- # 🗂️ 볼륨 마운트 설정 (빈값이면 마운트 안함)
37
+ # 볼륨 마운트 설정 (빈값이면 마운트 안함)
77
38
  ENABLE_VOLUME_MOUNT: "false" # @wizard ask:false
78
39
  VOLUME_HOST_PATH: "/volume1/projects/__PROJECT_NAME__" # @wizard ask:/volume1/projects/__PROJECT_NAME__
79
40
  VOLUME_CONTAINER_PATH: "/mnt/__PROJECT_NAME__" # @wizard ask:/mnt/__PROJECT_NAME__
80
41
 
81
- # 🔐 SSH 인증 방식: "password"(Synology·일반 서버) | "key"(AWS EC2·.pem)
42
+ # SSH 인증 방식: "password"(Synology·일반 서버) | "key"(AWS EC2·.pem)
82
43
  # password → SERVER_PASSWORD secret 사용
83
44
  # key → SSH_KEY secret 사용 (.pem 파일 전체 내용을 secret 값으로)
84
45
  SSH_AUTH_METHOD: "password" # @wizard ask:password
85
46
 
86
- # 🔌 SSH 연결 설정
47
+ # SSH 연결 설정
87
48
  SSH_PORT: "__SSH_PORT__" # @wizard ask:2022
88
49
  SSH_COMMAND_TIMEOUT: "600s" # SSH 명령 실행 타임아웃
89
50
  SSH_CONNECTION_TIMEOUT: "60s" # SSH 연결 타임아웃
90
51
 
91
- # 🌐 컨테이너 포트 설정
52
+ # 컨테이너 포트 설정
92
53
  CONTAINER_INTERNAL_PORT: "8000" # FastAPI 내부 포트
93
54
 
94
- # ⏱️ 헬스체크 설정
55
+ # 헬스체크 설정
95
56
  HEALTHCHECK_WAIT_SECONDS: "10" # 컨테이너 초기화 대기 시간 (초)
96
57
  HEALTHCHECK_PATH: "/docs" # HTTP 엔드포인트 경로 (비어있으면 로그 패턴만 사용)
97
58
  HEALTHCHECK_MAX_RETRIES: "5" # HTTP 재시도 횟수
@@ -99,19 +60,15 @@ env:
99
60
  HEALTHCHECK_LOG_PATTERN: "Uvicorn running on" # Fallback 로그 검색 패턴
100
61
 
101
62
  jobs:
102
- # ===================================================================
103
- # 빌드 작업
104
- # ===================================================================
63
+ # Job: 빌드
105
64
  build:
106
65
  name: Python FastAPI 애플리케이션 빌드
107
66
  runs-on: ubuntu-latest
108
67
 
109
68
  steps:
110
- # 1. 소스코드 체크아웃
111
69
  - name: 코드 체크아웃
112
70
  uses: actions/checkout@v7
113
71
 
114
- # 2. 디스크 공간 확보
115
72
  - name: 디스크 공간 확보
116
73
  run: |
117
74
  echo "📊 빌드 전 디스크 사용량:"
@@ -129,7 +86,6 @@ jobs:
129
86
  echo "📊 정리 후 디스크 사용량:"
130
87
  df -h
131
88
 
132
- # 3. .env 파일 생성
133
89
  - name: .env 파일 생성
134
90
  run: |
135
91
  cat > .env << 'EOF'
@@ -137,18 +93,15 @@ jobs:
137
93
  EOF
138
94
  echo "✅ .env 파일이 생성되었습니다"
139
95
 
140
- # 4. Docker 빌드 환경 설정
141
96
  - name: Docker 빌드환경 설정
142
97
  uses: docker/setup-buildx-action@v3
143
98
 
144
- # 5. DockerHub 로그인
145
99
  - name: DockerHub 로그인
146
100
  uses: docker/login-action@v3
147
101
  with:
148
102
  username: ${{ secrets.DOCKERHUB_USERNAME }}
149
103
  password: ${{ secrets.DOCKERHUB_TOKEN }}
150
104
 
151
- # 6. Docker 이미지 빌드 및 푸시
152
105
  - name: Docker 이미지 빌드 및 푸시
153
106
  uses: docker/build-push-action@v5
154
107
  with:
@@ -160,7 +113,6 @@ jobs:
160
113
  cache-from: type=gha
161
114
  cache-to: type=gha,mode=max
162
115
 
163
- # 7. 빌드 후 정리
164
116
  - name: 빌드 후 정리
165
117
  if: always()
166
118
  run: |
@@ -169,16 +121,13 @@ jobs:
169
121
  echo "📊 최종 디스크 사용량:"
170
122
  df -h
171
123
 
172
- # ===================================================================
173
- # 배포 작업
174
- # ===================================================================
124
+ # Job: 배포
175
125
  deploy:
176
126
  name: 원격 서버 배포
177
127
  needs: build
178
128
  runs-on: ubuntu-latest
179
129
 
180
130
  steps:
181
- # SSH 통한 원격 서버 배포 실행
182
131
  - name: Deploy
183
132
  uses: appleboy/ssh-action@v1.0.3
184
133
  env:
@@ -195,14 +144,12 @@ jobs:
195
144
  script: |
196
145
  set -e
197
146
 
198
- # ============================================================
199
147
  # 배포 환경 변수 설정
200
- # ============================================================
201
148
  echo "🔧 환경변수 설정.."
202
149
  export PATH=$PATH:/usr/local/bin
203
150
  export PW=${{ secrets.SERVER_PASSWORD }}
204
151
 
205
- # 🔐 SSH 인증 방식에 따른 sudo 추상화
152
+ # SSH 인증 방식에 따른 sudo 추상화
206
153
  # password 모드: echo $PW | sudo -S (Synology 등 sudo 비밀번호 필요 서버)
207
154
  # key 모드: sudo 직접 (AWS EC2 등 passwordless sudo 서버)
208
155
  SSH_AUTH_METHOD="${SSH_AUTH_METHOD:-password}"
@@ -213,18 +160,13 @@ jobs:
213
160
  fi
214
161
  echo "🔐 SSH 인증 방식: ${SSH_AUTH_METHOD}"
215
162
 
216
- # GitHub에서 전달받은 브랜치명
217
163
  BRANCH=${{ github.ref_name }}
218
164
 
219
- # 프로젝트 설정
220
165
  PROJECT_NAME="${{ env.PROJECT_NAME }}"
221
166
 
222
- # ============================================================
223
167
  # 포트 및 컨테이너명 설정
224
- # ============================================================
225
168
  PORT=${{ env.DEPLOY_PORT }}
226
169
 
227
- # 컨테이너 이름 설정
228
170
  if [ -z "${{ env.CONTAINER_NAME }}" ]; then
229
171
  CONTAINER_NAME="${PROJECT_NAME}"
230
172
  echo "ℹ️ CONTAINER_NAME이 설정되지 않아 PROJECT_NAME을 사용합니다: $CONTAINER_NAME"
@@ -235,7 +177,6 @@ jobs:
235
177
 
236
178
  echo "🚀 배포 환경으로 배포합니다 (브랜치: $BRANCH)"
237
179
 
238
- # 설정 정보 출력
239
180
  echo "📋 배포 설정 정보:"
240
181
  echo " - 브랜치: $BRANCH"
241
182
  echo " - 프로젝트: $PROJECT_NAME"
@@ -243,18 +184,13 @@ jobs:
243
184
  echo " - 포트: $PORT"
244
185
  echo " - Docker 이미지: ${{ secrets.DOCKERHUB_USERNAME }}/${PROJECT_NAME}:${BRANCH}"
245
186
 
246
- # ============================================================
247
187
  # Docker 이미지 풀 (Pull)
248
- # ============================================================
249
188
  echo "⬇️ Docker 이미지 풀: ${{ secrets.DOCKERHUB_USERNAME }}/${PROJECT_NAME}:${BRANCH}"
250
189
  SUDO docker pull ${{ secrets.DOCKERHUB_USERNAME }}/${PROJECT_NAME}:${BRANCH}
251
190
 
252
- # ============================================================
253
191
  # 기존 컨테이너 정리
254
- # ============================================================
255
192
  echo "🧹 컨테이너 $CONTAINER_NAME 존재 여부 확인 중..."
256
193
 
257
- # 동일한 이름의 컨테이너가 존재하는지 확인
258
194
  if SUDO docker ps -a --format '{{.Names}}' | grep -Eq "^${CONTAINER_NAME}\$"; then
259
195
  echo "⚠️ 컨테이너 $CONTAINER_NAME 이(가) 존재합니다. 중지 및 삭제 중..."
260
196
  SUDO docker rm -f $CONTAINER_NAME
@@ -263,21 +199,13 @@ jobs:
263
199
  echo "ℹ️ 존재하는 컨테이너 $CONTAINER_NAME 이(가) 없습니다."
264
200
  fi
265
201
 
266
- # ============================================================
267
202
  # 새 컨테이너 실행
268
- # ============================================================
269
203
  echo "🚀 새로운 컨테이너 $CONTAINER_NAME 실행 중..."
270
204
 
271
- # Docker 컨테이너 실행
272
- # - 포트 매핑: ${PORT}:${{ env.CONTAINER_INTERNAL_PORT }} (외부:내부)
273
- # - 시간대: Asia/Seoul
274
- # - 볼륨 마운트: 로컬 시간 동기화 및 프로젝트 데이터
275
- # ⚠️ .env 파일은 이미 Docker 이미지에 포함되어 있습니다
205
+ # .env 파일은 이미 Docker 이미지에 포함되어 있습니다
276
206
 
277
- # 볼륨 마운트 옵션 구성
278
207
  VOLUME_OPTS="-v /etc/localtime:/etc/localtime:ro"
279
208
  if [ "${{ env.ENABLE_VOLUME_MOUNT }}" == "true" ]; then
280
- # 디렉토리가 없으면 생성
281
209
  if [ ! -d "${{ env.VOLUME_HOST_PATH }}" ]; then
282
210
  echo "📁 볼륨 마운트 디렉토리 생성: ${{ env.VOLUME_HOST_PATH }}"
283
211
  SUDO mkdir -p "${{ env.VOLUME_HOST_PATH }}"
@@ -295,9 +223,7 @@ jobs:
295
223
  $VOLUME_OPTS \
296
224
  ${{ secrets.DOCKERHUB_USERNAME }}/${PROJECT_NAME}:${BRANCH}
297
225
 
298
- # ============================================================
299
226
  # 컨테이너 헬스체크
300
- # ============================================================
301
227
  echo "⏳ 컨테이너 초기화 대기 중... (${{ env.HEALTHCHECK_WAIT_SECONDS }}초)"
302
228
  sleep ${{ env.HEALTHCHECK_WAIT_SECONDS }}
303
229
 
@@ -364,14 +290,10 @@ jobs:
364
290
  fi
365
291
  fi
366
292
 
367
- # 최종 성공 메시지
368
293
  if [ "$HEALTHCHECK_SUCCESS" = "true" ]; then
369
294
  echo "✅ 헬스체크 완료: 컨테이너 $CONTAINER_NAME 이(가) 정상적으로 실행 중입니다"
370
295
  fi
371
296
 
372
- # ============================================================
373
- # 배포 완료 확인
374
- # ============================================================
375
297
  echo "✅ 배포가 성공적으로 완료되었습니다!"
376
298
  echo ""
377
299
  echo "📋 배포 결과 요약:"
@@ -1,29 +1,14 @@
1
1
  # project-auto-wizard:managed-workflow
2
- # ===================================================================
3
- # React CI (코드 분석 및 빌드 검증)
4
- # ===================================================================
2
+ # React CI (빌드 검증)
3
+ # {{MAIN_BRANCH}} 브랜치 푸시 시 npm ci와 npm run build로 빌드를 검증합니다. node_modules와 빌드 결과를 캐싱합니다.
5
4
  #
6
- # {{MAIN_BRANCH}} 브랜치 푸시 시 React 애플리케이션의 빌드를 검증합니다.
5
+ # GitHub Secrets
6
+ # ENV_FILE (선택): .env 파일 내용. CI는 빌드 검증 목적이므로 배포 관련 Secrets는 불필요
7
7
  #
8
- # 주요 특징:
9
- # - npm ci로 의존성 설치
10
- # - npm run build로 빌드 검증
11
- # - node_modules 및 빌드 캐싱 지원
12
- #
13
- # ===================================================================
14
- # 🔑 필수 GitHub Secrets
15
- # ===================================================================
16
- # ENV_FILE (선택): .env 파일 내용
17
- #
18
- # ※ CI는 빌드 검증 목적이므로 배포 관련 Secrets 불필요
19
- # ===================================================================
20
- #
21
- # 🔧 프로젝트별 설정 (env 섹션)
22
- # ===================================================================
23
- # PROJECT_NAME : 프로젝트 이름
24
- # NODE_VERSION : Node.js 버전 (기본: 20.15.0)
25
- # ENV_FILE : 환경변수 파일명 (기본: .env)
26
- # ===================================================================
8
+ # 프로젝트별 설정 (env 섹션)
9
+ # PROJECT_NAME : 프로젝트 이름
10
+ # NODE_VERSION : Node.js 버전 (기본: 20.15.0)
11
+ # ENV_FILE : 환경변수 파일명 (기본: .env)
27
12
 
28
13
  name: PROJECT-REACT-CI
29
14
 
@@ -45,9 +30,7 @@ permissions:
45
30
  issues: write
46
31
 
47
32
  jobs:
48
- # ===================================================================
49
- # 변경 감지 (모노레포에서 이 프로젝트 경로가 바뀌었는지 판별)
50
- # ===================================================================
33
+ # Job: 변경 감지 (모노레포에서 이 프로젝트 경로가 바뀌었는지 판별)
51
34
  changes:
52
35
  name: 변경 감지
53
36
  runs-on: ubuntu-latest
@@ -76,24 +59,20 @@ jobs:
76
59
  if: ${{ github.event_name == 'workflow_dispatch' || needs.changes.outputs.project == 'true' }}
77
60
 
78
61
  steps:
79
- # 1. 소스코드 체크아웃
80
62
  - name: 코드 체크아웃
81
63
  uses: actions/checkout@v7
82
64
 
83
- # 2. 환경변수 파일 생성
84
65
  - name: 환경변수 파일 생성 (${{ env.ENV_FILE }})
85
66
  run: |
86
67
  echo -e "${{ secrets.ENV_FILE || secrets.ENV }}" > ${{ env.ENV_FILE }}
87
68
  echo "✅ ${{ env.ENV_FILE }} 파일 생성 완료"
88
69
 
89
- # 3. Node.js 설정
90
70
  - name: Node.js 설정
91
71
  uses: actions/setup-node@v7
92
72
  with:
93
73
  node-version: ${{ env.NODE_VERSION }}
94
74
  cache: "npm"
95
75
 
96
- # 4. npm 의존성 캐싱
97
76
  - name: npm 의존성 캐싱
98
77
  uses: actions/cache@v6
99
78
  with:
@@ -102,7 +81,6 @@ jobs:
102
81
  restore-keys: |
103
82
  ${{ runner.os }}-npm-
104
83
 
105
- # 5. node_modules 캐싱
106
84
  # package-lock.json이 변경되지 않으면 npm ci 건너뛰기
107
85
  - name: node_modules 캐싱
108
86
  id: node-modules-cache
@@ -113,7 +91,6 @@ jobs:
113
91
  restore-keys: |
114
92
  ${{ runner.os }}-node-modules-
115
93
 
116
- # 6. 의존성 설치
117
94
  # 캐시가 없을 때만 실행 (npm ci는 package-lock.json 기준 정확한 버전 설치)
118
95
  - name: 의존성 설치
119
96
  if: steps.node-modules-cache.outputs.cache-hit != 'true'
@@ -122,7 +99,7 @@ jobs:
122
99
  npm ci
123
100
  echo "✅ 의존성 설치 완료"
124
101
 
125
- # 7. Next.js 빌드 캐싱 (Next.js 프로젝트인 경우)
102
+ # Next.js 빌드 캐싱 (Next.js 프로젝트인 경우)
126
103
  # .next/cache 폴더를 캐싱하여 증분 빌드 속도 향상
127
104
  - name: Next.js 빌드 캐싱
128
105
  uses: actions/cache@v6
@@ -133,7 +110,6 @@ jobs:
133
110
  ${{ runner.os }}-nextjs-${{ hashFiles('**/package-lock.json') }}-
134
111
  ${{ runner.os }}-nextjs-
135
112
 
136
- # 8. 프로젝트 빌드
137
113
  # 빌드 실패 시에도 워크플로우를 중단하지 않고 에러 로그 수집
138
114
  - name: 프로젝트 빌드
139
115
  id: build
@@ -157,7 +133,6 @@ jobs:
157
133
  echo "status=success" >> $GITHUB_OUTPUT
158
134
  echo "✅ 빌드 완료"
159
135
 
160
- # 9. 빌드 실패 시 에러 로그 출력
161
136
  # 빌드가 실패한 경우에만 실행
162
137
  - name: 빌드 에러 로그 출력
163
138
  if: steps.build.outputs.build_failed == 'true'
@@ -180,7 +155,6 @@ jobs:
180
155
  # 빌드 실패로 워크플로우 종료
181
156
  exit 1
182
157
 
183
- # 10. 빌드 로그 아티팩트 업로드
184
158
  # 빌드 성공/실패 여부와 관계없이 로그 저장
185
159
  - name: 빌드 로그 업로드
186
160
  if: always()
@@ -190,7 +164,6 @@ jobs:
190
164
  path: build_log.txt
191
165
  retention-days: 7 # 7일간 보관
192
166
 
193
- # 11. 빌드 결과 요약
194
167
  # 워크플로우 실행 결과를 보기 쉽게 요약
195
168
  - name: 빌드 결과 요약
196
169
  if: always()
@@ -222,9 +195,7 @@ jobs:
222
195
  echo "💡 Actions 탭에서 'build-log' 아티팩트를 다운로드하여 전체 로그를 확인하세요."
223
196
  fi
224
197
 
225
- # ===================================================================
226
- # CI Gate (required check로 등록할 단일 job)
227
- # ===================================================================
198
+ # Job: CI Gate (required check로 등록할 단일 job)
228
199
  ci-gate:
229
200
  name: CI Gate
230
201
  if: ${{ always() }}
@@ -1,21 +1,15 @@
1
1
  # project-auto-wizard:managed-workflow
2
- # ===================================================================
3
2
  # React CI/CD 배포
4
- # ===================================================================
5
- #
6
3
  # {{MAIN_BRANCH}} 브랜치 푸시 시 Docker 이미지를 빌드하고 배포합니다.
7
4
  #
8
- # ===================================================================
9
- # 🔑 필수 GitHub Secrets
10
- # ===================================================================
11
- # ENV_FILE: .env 파일 내용
12
- # DOCKERHUB_USERNAME: DockerHub 사용자명
13
- # DOCKERHUB_TOKEN: DockerHub 액세스 토큰
14
- # SERVER_HOST: 배포 서버 주소
15
- # SERVER_USER: SSH 사용자명
16
- # SERVER_PASSWORD: SSH 비밀번호
17
- # PROJECT_DEPLOY_PORT (선택): 배포 포트 (기본: 3000)
18
- # ===================================================================
5
+ # GitHub Secrets
6
+ # ENV_FILE: .env 파일 내용
7
+ # DOCKERHUB_USERNAME: DockerHub 사용자명
8
+ # DOCKERHUB_TOKEN: DockerHub 액세스 토큰
9
+ # SERVER_HOST: 배포 서버 주소
10
+ # SERVER_USER: SSH 사용자명
11
+ # SERVER_PASSWORD: SSH 비밀번호
12
+ # PROJECT_DEPLOY_PORT (선택): 배포 포트 (기본: 3000)
19
13
 
20
14
  name: PROJECT-REACT-CICD
21
15
 
@@ -38,18 +32,15 @@ jobs:
38
32
  runs-on: ubuntu-latest
39
33
 
40
34
  steps:
41
- # 1. 소스코드 체크아웃
42
35
  - name: 코드 체크아웃
43
36
  uses: actions/checkout@v7
44
37
 
45
- # 2. Node.js 개발 환경 설정
46
38
  - name: Node.js 설정
47
39
  uses: actions/setup-node@v7
48
40
  with:
49
41
  node-version: ${{ env.NODE_VERSION }}
50
42
  cache: 'npm'
51
43
 
52
- # 3. 환경변수 파일 생성
53
44
  - name: 환경변수 파일 생성 (${{ env.ENV_FILE_NAME }})
54
45
  run: |
55
46
  cat << 'EOF' > ./${{ env.ENV_FILE_NAME }}
@@ -57,7 +48,6 @@ jobs:
57
48
  EOF
58
49
  echo "✅ ${{ env.ENV_FILE_NAME }} 파일 생성 완료"
59
50
 
60
- # 4. npm 의존성 캐싱
61
51
  - name: npm 의존성 캐싱
62
52
  uses: actions/cache@v6
63
53
  with:
@@ -66,7 +56,6 @@ jobs:
66
56
  restore-keys: |
67
57
  ${{ runner.os }}-npm-
68
58
 
69
- # 5. node_modules 캐싱
70
59
  - name: node_modules 캐싱
71
60
  id: node-modules-cache
72
61
  uses: actions/cache@v6
@@ -76,12 +65,10 @@ jobs:
76
65
  restore-keys: |
77
66
  ${{ runner.os }}-node-modules-
78
67
 
79
- # 6. 의존성 설치
80
68
  - name: 의존성 설치
81
69
  if: steps.node-modules-cache.outputs.cache-hit != 'true'
82
70
  run: npm ci
83
71
 
84
- # 7. Next.js 빌드 캐싱
85
72
  - name: Next.js 빌드 캐싱
86
73
  uses: actions/cache@v6
87
74
  with:
@@ -91,22 +78,18 @@ jobs:
91
78
  ${{ runner.os }}-nextjs-${{ hashFiles('**/package-lock.json') }}-
92
79
  ${{ runner.os }}-nextjs-
93
80
 
94
- # 8. 프로젝트 빌드
95
81
  - name: Build with npm
96
82
  run: npm run build
97
83
 
98
- # 9. Docker 빌드 환경 설정
99
84
  - name: Docker 빌드환경 설정
100
85
  uses: docker/setup-buildx-action@v3
101
86
 
102
- # 10. DockerHub 로그인
103
87
  - name: DockerHub 로그인
104
88
  uses: docker/login-action@v3
105
89
  with:
106
90
  username: ${{ secrets.DOCKERHUB_USERNAME }}
107
91
  password: ${{ secrets.DOCKERHUB_TOKEN }}
108
92
 
109
- # 11. Docker 레이어 캐싱
110
93
  - name: Cache Docker layers
111
94
  uses: actions/cache@v6
112
95
  with:
@@ -115,7 +98,6 @@ jobs:
115
98
  restore-keys: |
116
99
  ${{ runner.os }}-buildx-
117
100
 
118
- # 12. Docker 이미지 빌드 및 푸시
119
101
  - name: Docker 이미지 빌드 및 푸시
120
102
  uses: docker/build-push-action@v5
121
103
  with:
@@ -126,7 +108,6 @@ jobs:
126
108
  cache-from: type=local,src=/tmp/.buildx-cache
127
109
  cache-to: type=local,dest=/tmp/.buildx-cache-new,mode=max
128
110
 
129
- # 13. Docker 캐시 정리
130
111
  - name: Move Docker cache
131
112
  run: |
132
113
  rm -rf /tmp/.buildx-cache
@@ -148,9 +129,7 @@ jobs:
148
129
  script: |
149
130
  set -e
150
131
 
151
- # ============================================================
152
132
  # 배포 환경 변수 설정
153
- # ============================================================
154
133
  echo "🔧 환경변수 설정.."
155
134
  export PATH=$PATH:/usr/local/bin
156
135
  export PW=${{ secrets.SERVER_PASSWORD }}
@@ -161,9 +140,7 @@ jobs:
161
140
  # 프로젝트 설정
162
141
  PROJECT_NAME="${{ env.PROJECT_NAME }}"
163
142
 
164
- # ============================================================
165
143
  # 브랜치별 포트 및 컨테이너명 설정
166
- # ============================================================
167
144
  # 기본값 설정
168
145
  PORT=3000
169
146
  CONTAINER_NAME="${PROJECT_NAME}-front"
@@ -178,7 +155,7 @@ jobs:
178
155
  echo "🚀 배포 환경으로 배포합니다 (브랜치: $BRANCH)"
179
156
 
180
157
  else
181
- # ⚠️ 기타 브랜치 (예상치 못한 브랜치)
158
+ # 기타 브랜치 (예상치 못한 브랜치)
182
159
  echo "⚠️ 지원하지 않는 브랜치입니다: $BRANCH"
183
160
  echo "이 워크플로우는 {{MAIN_BRANCH}} 브랜치만 지원합니다."
184
161
  echo "on.push.branches에서 지원할 브랜치를 설정하세요."
@@ -193,15 +170,11 @@ jobs:
193
170
  echo " - 포트: $PORT"
194
171
  echo " - Docker 이미지: ${{ secrets.DOCKERHUB_USERNAME }}/${PROJECT_NAME}-${{ env.DOCKER_IMAGE_PREFIX }}:${BRANCH}"
195
172
 
196
- # ============================================================
197
173
  # Docker 이미지 풀 (Pull)
198
- # ============================================================
199
174
  echo "⬇️ Docker 이미지 풀: ${{ secrets.DOCKERHUB_USERNAME }}/${PROJECT_NAME}-${{ env.DOCKER_IMAGE_PREFIX }}:${BRANCH}"
200
175
  echo $PW | sudo -S docker pull ${{ secrets.DOCKERHUB_USERNAME }}/${PROJECT_NAME}-${{ env.DOCKER_IMAGE_PREFIX }}:${BRANCH}
201
176
 
202
- # ============================================================
203
177
  # 기존 컨테이너 정리
204
- # ============================================================
205
178
  echo "🧹 컨테이너 $CONTAINER_NAME 존재 여부 확인 중..."
206
179
 
207
180
  # 동일한 이름의 컨테이너가 존재하는지 확인
@@ -213,9 +186,7 @@ jobs:
213
186
  echo "ℹ️ 존재하는 컨테이너 $CONTAINER_NAME 이(가) 없습니다."
214
187
  fi
215
188
 
216
- # ============================================================
217
189
  # 새 컨테이너 실행
218
- # ============================================================
219
190
  echo "🚀 새로운 컨테이너 $CONTAINER_NAME 실행 중..."
220
191
 
221
192
  echo $PW | sudo -S docker run -d \
@@ -225,9 +196,7 @@ jobs:
225
196
  -v /etc/localtime:/etc/localtime:ro \
226
197
  ${{ secrets.DOCKERHUB_USERNAME }}/${PROJECT_NAME}-${{ env.DOCKER_IMAGE_PREFIX }}:${BRANCH}
227
198
 
228
- # ============================================================
229
199
  # 배포 완료 확인
230
- # ============================================================
231
200
  echo "✅ 배포가 성공적으로 완료되었습니다!"
232
201
  echo ""
233
202
  echo "📋 배포 결과 요약:"
@@ -239,9 +208,7 @@ jobs:
239
208
  echo ""
240
209
  echo "🔗 접속 URL: http://${{ secrets.SERVER_HOST }}:${PORT}"
241
210
 
242
- # ===================================================================
243
211
  # 사용 예시 - {{MAIN_BRANCH}} 브랜치 사용
244
- # ===================================================================
245
212
  #
246
213
  # 현재 설정: {{MAIN_BRANCH}} 브랜치에 push할 때 자동 배포
247
214
  #
@@ -252,5 +219,4 @@ jobs:
252
219
  # - REACT_ENV_FILE, DOCKERHUB_*, SERVER_* (필수)
253
220
  # - PROJECT_DEPLOY_PORT (선택, 기본값: 3000)
254
221
  #
255
- # ===================================================================
256
222