project-auto-wizard 0.1.5

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 (72) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +139 -0
  3. package/bin/project-auto-wizard.js +19 -0
  4. package/package.json +36 -0
  5. package/payload/coderabbit.yaml +19 -0
  6. package/payload/config/breaking-changes.json +1 -0
  7. package/payload/config/wizard-prompts.yml +62 -0
  8. package/payload/scripts/changelog_manager.py +726 -0
  9. package/payload/scripts/version_manager.py +617 -0
  10. package/payload/version.yml.template +48 -0
  11. package/payload/workflows/common/PROJECT-COMMON-AUTO-CHANGELOG-CONTROL.yaml +303 -0
  12. package/payload/workflows/common/PROJECT-COMMON-README-VERSION-UPDATE.yaml +293 -0
  13. package/payload/workflows/common/PROJECT-COMMON-RELEASE-PUBLISH.yaml +289 -0
  14. package/payload/workflows/common/PROJECT-COMMON-VERSION-CONTROL.yaml +192 -0
  15. package/payload/workflows/common/secret-backup/PROJECT-COMMON-SECRET-FILE-UPLOAD.yaml +209 -0
  16. package/payload/workflows/flutter/PROJECT-FLUTTER-ANDROID-FIREBASE-CICD.yaml +591 -0
  17. package/payload/workflows/flutter/PROJECT-FLUTTER-ANDROID-PLAYSTORE-CICD.yaml +700 -0
  18. package/payload/workflows/flutter/PROJECT-FLUTTER-ANDROID-SELFHOSTED-CICD.yaml +308 -0
  19. package/payload/workflows/flutter/PROJECT-FLUTTER-ANDROID-TEST-APK.yaml +992 -0
  20. package/payload/workflows/flutter/PROJECT-FLUTTER-CI.yaml +689 -0
  21. package/payload/workflows/flutter/PROJECT-FLUTTER-IOS-TEST-TESTFLIGHT.yaml +987 -0
  22. package/payload/workflows/flutter/PROJECT-FLUTTER-IOS-TESTFLIGHT.yaml +471 -0
  23. package/payload/workflows/flutter/PROJECT-FLUTTER-SUH-LAB-APP-BUILD-TRIGGER.yaml +500 -0
  24. package/payload/workflows/next/PROJECT-NEXT-CI.yaml +185 -0
  25. package/payload/workflows/next/PROJECT-NEXT-CICD.yaml +271 -0
  26. package/payload/workflows/python/PROJECT-PYTHON-CI.yaml +81 -0
  27. package/payload/workflows/python/PROJECT-PYTHON-PR-PREVIEW.yaml +2191 -0
  28. package/payload/workflows/python/PROJECT-PYTHON-SIMPLE-CICD.yaml +386 -0
  29. package/payload/workflows/react/PROJECT-REACT-CI.yaml +194 -0
  30. package/payload/workflows/react/PROJECT-REACT-CICD.yaml +255 -0
  31. package/payload/workflows/spring/PROJECT-SPRING-GITHUB-PACKAGES-PUBLISH.yml +84 -0
  32. package/payload/workflows/spring/nexus/PROJECT-SPRING-NEXUS-CI.yml +316 -0
  33. package/payload/workflows/spring/nexus/PROJECT-SPRING-NEXUS-PUBLISH.yml +58 -0
  34. package/payload/workflows/spring/server-deploy/PROJECT-SPRING-NONSTOP-NGINX-CICD.yaml +535 -0
  35. package/payload/workflows/spring/server-deploy/PROJECT-SPRING-NONSTOP-TRAEFIK-CICD.yaml +437 -0
  36. package/payload/workflows/spring/server-deploy/PROJECT-SPRING-PR-PREVIEW.yaml +2277 -0
  37. package/payload/workflows/spring/server-deploy/PROJECT-SPRING-SIMPLE-CICD.yaml +425 -0
  38. package/src/cli/args.js +95 -0
  39. package/src/cli/help.js +27 -0
  40. package/src/commands/full.js +53 -0
  41. package/src/commands/interactive.js +276 -0
  42. package/src/commands/revert.js +60 -0
  43. package/src/commands/version.js +31 -0
  44. package/src/commands/workflows.js +49 -0
  45. package/src/context.js +26 -0
  46. package/src/core/assets.js +47 -0
  47. package/src/core/branches.js +60 -0
  48. package/src/core/branding.js +15 -0
  49. package/src/core/breaking-check.js +65 -0
  50. package/src/core/breaking.js +26 -0
  51. package/src/core/copy/coderabbit.js +26 -0
  52. package/src/core/copy/gitignore.js +55 -0
  53. package/src/core/copy/readme.js +30 -0
  54. package/src/core/copy/simple.js +23 -0
  55. package/src/core/copy/workflows.js +233 -0
  56. package/src/core/detect-fs.js +106 -0
  57. package/src/core/detect.js +62 -0
  58. package/src/core/fsutil.js +46 -0
  59. package/src/core/options-ask.js +99 -0
  60. package/src/core/paths-resolve.js +261 -0
  61. package/src/core/paths.js +16 -0
  62. package/src/core/version-yml.js +190 -0
  63. package/src/core/wizard-env.js +101 -0
  64. package/src/core/wizard-labels.js +107 -0
  65. package/src/index.js +162 -0
  66. package/src/ui/ansi.js +26 -0
  67. package/src/ui/banner.js +29 -0
  68. package/src/ui/env-plan.js +207 -0
  69. package/src/ui/prompts.js +99 -0
  70. package/src/ui/readline-engine.js +257 -0
  71. package/src/ui/status-cards.js +56 -0
  72. package/src/ui/summary.js +127 -0
@@ -0,0 +1,271 @@
1
+ # ===================================================================
2
+ # Next.js CI/CD 배포
3
+ # ===================================================================
4
+ #
5
+ # {{MAIN_BRANCH}} 브랜치 푸시 시 Docker 이미지를 빌드하고 배포합니다.
6
+ # SSR 지원을 위해 Node.js 런타임 컨테이너로 배포됩니다.
7
+ #
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
+ # ===================================================================
19
+
20
+ name: PROJECT-NEXT-CICD
21
+
22
+ on:
23
+ push:
24
+ branches:
25
+ - "{{MAIN_BRANCH}}"
26
+ # @wizard paths-anchor (모노레포일 때 integrator가 paths 필터를 여기 주입)
27
+ workflow_dispatch:
28
+
29
+ env:
30
+ PROJECT_NAME: "__PROJECT_NAME__" # @wizard ask:@repo
31
+ DOCKER_IMAGE_PREFIX: "nextjs-container"
32
+ NODE_VERSION: "20.15.0"
33
+ ENV_FILE_NAME: ".env"
34
+
35
+ jobs:
36
+ build:
37
+ name: Next.js 애플리케이션 빌드
38
+ runs-on: ubuntu-latest
39
+
40
+ steps:
41
+ # 1. 소스코드 체크아웃
42
+ - name: 코드 체크아웃
43
+ uses: actions/checkout@v5
44
+
45
+ # 2. Node.js 개발 환경 설정
46
+ - name: Node.js 설정
47
+ uses: actions/setup-node@v4
48
+ with:
49
+ node-version: ${{ env.NODE_VERSION }}
50
+ cache: 'npm'
51
+
52
+ # 3. 환경변수 파일 생성
53
+ - name: 환경변수 파일 생성 (${{ env.ENV_FILE_NAME }})
54
+ run: |
55
+ cat << 'EOF' > ./${{ env.ENV_FILE_NAME }}
56
+ ${{ secrets.ENV_FILE || secrets.ENV }}
57
+ EOF
58
+ echo "✅ ${{ env.ENV_FILE_NAME }} 파일 생성 완료"
59
+
60
+ # 4. npm 의존성 캐싱
61
+ - name: npm 의존성 캐싱
62
+ uses: actions/cache@v4
63
+ with:
64
+ path: ~/.npm
65
+ key: ${{ runner.os }}-npm-${{ hashFiles('**/package-lock.json') }}
66
+ restore-keys: |
67
+ ${{ runner.os }}-npm-
68
+
69
+ # 5. node_modules 캐싱
70
+ - name: node_modules 캐싱
71
+ id: node-modules-cache
72
+ uses: actions/cache@v4
73
+ with:
74
+ path: "**/node_modules"
75
+ key: ${{ runner.os }}-node-modules-${{ hashFiles('**/package-lock.json') }}
76
+ restore-keys: |
77
+ ${{ runner.os }}-node-modules-
78
+
79
+ # 6. 의존성 설치
80
+ - name: 의존성 설치
81
+ if: steps.node-modules-cache.outputs.cache-hit != 'true'
82
+ run: npm ci
83
+
84
+ # 7. Next.js 빌드 캐싱 (.next/cache)
85
+ - name: Next.js 빌드 캐싱
86
+ uses: actions/cache@v4
87
+ with:
88
+ path: .next/cache
89
+ key: ${{ runner.os }}-nextjs-${{ hashFiles('**/package-lock.json') }}-${{ hashFiles('**.[jt]s', '**.[jt]sx') }}
90
+ restore-keys: |
91
+ ${{ runner.os }}-nextjs-${{ hashFiles('**/package-lock.json') }}-
92
+ ${{ runner.os }}-nextjs-
93
+
94
+ # 8. 프로젝트 빌드 (SSR/SSG)
95
+ - name: Build with npm
96
+ run: npm run build
97
+
98
+ # 9. Docker 빌드 환경 설정
99
+ - name: Docker 빌드환경 설정
100
+ uses: docker/setup-buildx-action@v3
101
+
102
+ # 10. DockerHub 로그인
103
+ - name: DockerHub 로그인
104
+ uses: docker/login-action@v3
105
+ with:
106
+ username: ${{ secrets.DOCKERHUB_USERNAME }}
107
+ password: ${{ secrets.DOCKERHUB_TOKEN }}
108
+
109
+ # 11. Docker 레이어 캐싱
110
+ - name: Cache Docker layers
111
+ uses: actions/cache@v4
112
+ with:
113
+ path: /tmp/.buildx-cache
114
+ key: ${{ runner.os }}-buildx-${{ hashFiles('Dockerfile') }}-${{ hashFiles('package-lock.json') }}
115
+ restore-keys: |
116
+ ${{ runner.os }}-buildx-
117
+
118
+ # 12. Docker 이미지 빌드 및 푸시
119
+ - name: Docker 이미지 빌드 및 푸시
120
+ uses: docker/build-push-action@v5
121
+ with:
122
+ context: .
123
+ file: ./Dockerfile
124
+ push: true
125
+ tags: ${{ secrets.DOCKERHUB_USERNAME }}/${{ env.PROJECT_NAME }}-${{ env.DOCKER_IMAGE_PREFIX }}:${{ github.ref_name }}
126
+ cache-from: type=local,src=/tmp/.buildx-cache
127
+ cache-to: type=local,dest=/tmp/.buildx-cache-new,mode=max
128
+
129
+ # 13. Docker 캐시 정리
130
+ - name: Move Docker cache
131
+ run: |
132
+ rm -rf /tmp/.buildx-cache
133
+ mv /tmp/.buildx-cache-new /tmp/.buildx-cache
134
+
135
+ deploy:
136
+ name: 원격 서버 배포
137
+ needs: build
138
+ runs-on: ubuntu-latest
139
+
140
+ steps:
141
+ - name: Deploy
142
+ uses: appleboy/ssh-action@v1.0.3
143
+ with:
144
+ host: ${{ secrets.SERVER_HOST }}
145
+ username: ${{ secrets.SERVER_USER }}
146
+ password: ${{ secrets.SERVER_PASSWORD }}
147
+ port: 2022
148
+ script: |
149
+ set -e
150
+
151
+ # ============================================================
152
+ # 배포 환경 변수 설정
153
+ # ============================================================
154
+ echo "🔧 환경변수 설정.."
155
+ export PATH=$PATH:/usr/local/bin
156
+ export PW=${{ secrets.SERVER_PASSWORD }}
157
+
158
+ BRANCH=${{ github.ref_name }}
159
+ PROJECT_NAME="${{ env.PROJECT_NAME }}"
160
+
161
+ # ============================================================
162
+ # 브랜치별 포트 및 컨테이너명 설정
163
+ # ============================================================
164
+ PORT=3000
165
+ CONTAINER_NAME="${PROJECT_NAME}-nextjs"
166
+
167
+ if [ "$BRANCH" == "{{MAIN_BRANCH}}" ]; then
168
+ PORT=${{ secrets.PROJECT_DEPLOY_PORT || '3000' }}
169
+ CONTAINER_NAME="${PROJECT_NAME}-nextjs-deploy"
170
+ echo "🚀 배포 환경으로 배포합니다 (브랜치: $BRANCH)"
171
+ else
172
+ echo "⚠️ 지원하지 않는 브랜치입니다: $BRANCH"
173
+ exit 1
174
+ fi
175
+
176
+ echo "📋 배포 설정 정보:"
177
+ echo " - 브랜치: $BRANCH"
178
+ echo " - 프로젝트: $PROJECT_NAME"
179
+ echo " - 컨테이너 이름: $CONTAINER_NAME"
180
+ echo " - 포트: $PORT"
181
+ echo " - Docker 이미지: ${{ secrets.DOCKERHUB_USERNAME }}/${PROJECT_NAME}-${{ env.DOCKER_IMAGE_PREFIX }}:${BRANCH}"
182
+
183
+ # ============================================================
184
+ # Docker 이미지 풀 (Pull)
185
+ # ============================================================
186
+ echo "⬇️ Docker 이미지 풀..."
187
+ echo $PW | sudo -S docker pull ${{ secrets.DOCKERHUB_USERNAME }}/${PROJECT_NAME}-${{ env.DOCKER_IMAGE_PREFIX }}:${BRANCH}
188
+
189
+ # ============================================================
190
+ # 기존 컨테이너 정리
191
+ # ============================================================
192
+ echo "🧹 컨테이너 $CONTAINER_NAME 존재 여부 확인 중..."
193
+
194
+ if sudo docker ps -a --format '{{.Names}}' | grep -Eq "^${CONTAINER_NAME}\$"; then
195
+ echo "⚠️ 컨테이너 $CONTAINER_NAME 이(가) 존재합니다. 중지 및 삭제 중..."
196
+ echo $PW | sudo -S docker rm -f $CONTAINER_NAME
197
+ echo "✅ 컨테이너 $CONTAINER_NAME 이(가) 삭제되었습니다."
198
+ else
199
+ echo "ℹ️ 존재하는 컨테이너 $CONTAINER_NAME 이(가) 없습니다."
200
+ fi
201
+
202
+ # ============================================================
203
+ # 새 컨테이너 실행
204
+ # ============================================================
205
+ echo "🚀 새로운 컨테이너 $CONTAINER_NAME 실행 중..."
206
+
207
+ # Next.js는 SSR을 위해 Node.js 서버가 필요합니다
208
+ # standalone 모드 사용 시 node server.js로 실행
209
+ echo $PW | sudo -S docker run -d \
210
+ -p ${PORT}:3000 \
211
+ --name $CONTAINER_NAME \
212
+ -e TZ=Asia/Seoul \
213
+ -e NODE_ENV=production \
214
+ -v /etc/localtime:/etc/localtime:ro \
215
+ --restart unless-stopped \
216
+ ${{ secrets.DOCKERHUB_USERNAME }}/${PROJECT_NAME}-${{ env.DOCKER_IMAGE_PREFIX }}:${BRANCH}
217
+
218
+ # ============================================================
219
+ # 배포 완료 확인
220
+ # ============================================================
221
+ echo "✅ 배포가 성공적으로 완료되었습니다!"
222
+ echo ""
223
+ echo "📋 배포 결과 요약:"
224
+ echo " 🎯 프로젝트: $PROJECT_NAME"
225
+ echo " 🌿 브랜치: $BRANCH"
226
+ echo " 🐳 컨테이너: $CONTAINER_NAME"
227
+ echo " 🌐 포트: $PORT"
228
+ echo " ⏰ 배포 시간: $(date '+%Y-%m-%d %H:%M:%S')"
229
+ echo ""
230
+ echo "🔗 접속 URL: http://${{ secrets.SERVER_HOST }}:${PORT}"
231
+
232
+ # ===================================================================
233
+ # Next.js Dockerfile 예시 (standalone 모드)
234
+ # ===================================================================
235
+ #
236
+ # # Stage 1: Dependencies
237
+ # FROM node:20-alpine AS deps
238
+ # WORKDIR /app
239
+ # COPY package*.json ./
240
+ # RUN npm ci --only=production
241
+ #
242
+ # # Stage 2: Builder
243
+ # FROM node:20-alpine AS builder
244
+ # WORKDIR /app
245
+ # COPY --from=deps /app/node_modules ./node_modules
246
+ # COPY . .
247
+ # RUN npm run build
248
+ #
249
+ # # Stage 3: Runner
250
+ # FROM node:20-alpine AS runner
251
+ # WORKDIR /app
252
+ # ENV NODE_ENV production
253
+ #
254
+ # RUN addgroup --system --gid 1001 nodejs
255
+ # RUN adduser --system --uid 1001 nextjs
256
+ #
257
+ # COPY --from=builder /app/public ./public
258
+ # COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./
259
+ # COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static
260
+ #
261
+ # USER nextjs
262
+ # EXPOSE 3000
263
+ # ENV PORT 3000
264
+ # CMD ["node", "server.js"]
265
+ #
266
+ # ===================================================================
267
+ # next.config.js에 standalone 설정 추가:
268
+ # module.exports = {
269
+ # output: 'standalone',
270
+ # }
271
+ # ===================================================================
@@ -0,0 +1,81 @@
1
+ # ===================================================================
2
+ # Python FastAPI 빌드 검증 워크플로우 (CI Only)
3
+ # ===================================================================
4
+ #
5
+ # 설명:
6
+ # - {{MAIN_BRANCH}} 브랜치에 push 시 Docker 빌드가 정상적으로 되는지만 검증
7
+ # - 배포는 수행하지 않음 ({{MAIN_BRANCH}} 브랜치에서만 배포)
8
+ #
9
+ # ===================================================================
10
+
11
+ name: PROJECT-PYTHON-CI
12
+
13
+ # ===================================================================
14
+ # 트리거 설정
15
+ # ===================================================================
16
+ on:
17
+ push:
18
+ branches:
19
+ - "{{DEVELOP_BRANCH}}" # {{DEVELOP_BRANCH}} 브랜치 push 시 빌드 검증
20
+ pull_request:
21
+ branches:
22
+ - "{{DEVELOP_BRANCH}}" # {{DEVELOP_BRANCH}} 브랜치로의 PR 시 빌드 검증
23
+ workflow_dispatch: # 수동 실행 허용
24
+
25
+ # ===================================================================
26
+ # 환경 변수 설정
27
+ # ===================================================================
28
+ env:
29
+ # 프로젝트 고유 식별자 (컨테이너명, 이미지명, 도메인에 사용)
30
+ PROJECT_NAME: "__PROJECT_NAME__" # @wizard ask:@repo
31
+
32
+ # 🐍 Python 설정
33
+ PYTHON_VERSION: "3.13"
34
+
35
+ jobs:
36
+ # ===================================================================
37
+ # 빌드 검증 작업
38
+ # ===================================================================
39
+ build-check:
40
+ name: Python FastAPI 빌드 검증
41
+ runs-on: ubuntu-latest
42
+
43
+ steps:
44
+ # 1. 소스코드 체크아웃
45
+ - name: 코드 체크아웃
46
+ uses: actions/checkout@v5
47
+
48
+ # 2. .env 파일 생성 (빌드 검증용)
49
+ - name: .env 파일 생성
50
+ run: |
51
+ cat > .env << 'EOF'
52
+ ${{ secrets.ENV_FILE }}
53
+ EOF
54
+ echo "✅ .env 파일이 생성되었습니다"
55
+
56
+ # 3. Docker 빌드 환경 설정
57
+ - name: Docker 빌드환경 설정
58
+ uses: docker/setup-buildx-action@v3
59
+
60
+ # 4. Docker 이미지 빌드 (push 없이 검증만)
61
+ - name: Docker 이미지 빌드 검증
62
+ uses: docker/build-push-action@v5
63
+ with:
64
+ context: .
65
+ file: ./Dockerfile
66
+ push: false # 푸시하지 않음 (빌드 검증만)
67
+ tags: ${{ env.PROJECT_NAME }}:build-check
68
+ # GitHub Actions 캐시 사용
69
+ cache-from: type=gha
70
+ cache-to: type=gha,mode=max
71
+
72
+ # 5. 빌드 성공 메시지
73
+ - name: 빌드 검증 완료
74
+ run: |
75
+ echo "✅ Docker 빌드 검증이 성공적으로 완료되었습니다!"
76
+ echo ""
77
+ echo "📋 빌드 정보:"
78
+ echo " 🎯 프로젝트: ${{ env.PROJECT_NAME }}"
79
+ echo " 🌿 브랜치: ${{ github.ref_name }}"
80
+ echo " 📝 커밋: ${{ github.sha }}"
81
+ echo " ⏰ 검증 시간: $(date '+%Y-%m-%d %H:%M:%S')"