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