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.
- package/LICENSE +21 -0
- package/README.md +139 -0
- package/bin/project-auto-wizard.js +19 -0
- package/package.json +36 -0
- package/payload/coderabbit.yaml +19 -0
- package/payload/config/breaking-changes.json +1 -0
- package/payload/config/wizard-prompts.yml +62 -0
- package/payload/scripts/changelog_manager.py +726 -0
- package/payload/scripts/version_manager.py +617 -0
- package/payload/version.yml.template +48 -0
- package/payload/workflows/common/PROJECT-COMMON-AUTO-CHANGELOG-CONTROL.yaml +303 -0
- package/payload/workflows/common/PROJECT-COMMON-README-VERSION-UPDATE.yaml +293 -0
- package/payload/workflows/common/PROJECT-COMMON-RELEASE-PUBLISH.yaml +289 -0
- package/payload/workflows/common/PROJECT-COMMON-VERSION-CONTROL.yaml +192 -0
- package/payload/workflows/common/secret-backup/PROJECT-COMMON-SECRET-FILE-UPLOAD.yaml +209 -0
- package/payload/workflows/flutter/PROJECT-FLUTTER-ANDROID-FIREBASE-CICD.yaml +591 -0
- package/payload/workflows/flutter/PROJECT-FLUTTER-ANDROID-PLAYSTORE-CICD.yaml +700 -0
- package/payload/workflows/flutter/PROJECT-FLUTTER-ANDROID-SELFHOSTED-CICD.yaml +308 -0
- package/payload/workflows/flutter/PROJECT-FLUTTER-ANDROID-TEST-APK.yaml +992 -0
- package/payload/workflows/flutter/PROJECT-FLUTTER-CI.yaml +689 -0
- package/payload/workflows/flutter/PROJECT-FLUTTER-IOS-TEST-TESTFLIGHT.yaml +987 -0
- package/payload/workflows/flutter/PROJECT-FLUTTER-IOS-TESTFLIGHT.yaml +471 -0
- package/payload/workflows/flutter/PROJECT-FLUTTER-SUH-LAB-APP-BUILD-TRIGGER.yaml +500 -0
- package/payload/workflows/next/PROJECT-NEXT-CI.yaml +185 -0
- package/payload/workflows/next/PROJECT-NEXT-CICD.yaml +271 -0
- package/payload/workflows/python/PROJECT-PYTHON-CI.yaml +81 -0
- package/payload/workflows/python/PROJECT-PYTHON-PR-PREVIEW.yaml +2191 -0
- package/payload/workflows/python/PROJECT-PYTHON-SIMPLE-CICD.yaml +386 -0
- package/payload/workflows/react/PROJECT-REACT-CI.yaml +194 -0
- package/payload/workflows/react/PROJECT-REACT-CICD.yaml +255 -0
- package/payload/workflows/spring/PROJECT-SPRING-GITHUB-PACKAGES-PUBLISH.yml +84 -0
- package/payload/workflows/spring/nexus/PROJECT-SPRING-NEXUS-CI.yml +316 -0
- package/payload/workflows/spring/nexus/PROJECT-SPRING-NEXUS-PUBLISH.yml +58 -0
- package/payload/workflows/spring/server-deploy/PROJECT-SPRING-NONSTOP-NGINX-CICD.yaml +535 -0
- package/payload/workflows/spring/server-deploy/PROJECT-SPRING-NONSTOP-TRAEFIK-CICD.yaml +437 -0
- package/payload/workflows/spring/server-deploy/PROJECT-SPRING-PR-PREVIEW.yaml +2277 -0
- package/payload/workflows/spring/server-deploy/PROJECT-SPRING-SIMPLE-CICD.yaml +425 -0
- package/src/cli/args.js +95 -0
- package/src/cli/help.js +27 -0
- package/src/commands/full.js +53 -0
- package/src/commands/interactive.js +276 -0
- package/src/commands/revert.js +60 -0
- package/src/commands/version.js +31 -0
- package/src/commands/workflows.js +49 -0
- package/src/context.js +26 -0
- package/src/core/assets.js +47 -0
- package/src/core/branches.js +60 -0
- package/src/core/branding.js +15 -0
- package/src/core/breaking-check.js +65 -0
- package/src/core/breaking.js +26 -0
- package/src/core/copy/coderabbit.js +26 -0
- package/src/core/copy/gitignore.js +55 -0
- package/src/core/copy/readme.js +30 -0
- package/src/core/copy/simple.js +23 -0
- package/src/core/copy/workflows.js +233 -0
- package/src/core/detect-fs.js +106 -0
- package/src/core/detect.js +62 -0
- package/src/core/fsutil.js +46 -0
- package/src/core/options-ask.js +99 -0
- package/src/core/paths-resolve.js +261 -0
- package/src/core/paths.js +16 -0
- package/src/core/version-yml.js +190 -0
- package/src/core/wizard-env.js +101 -0
- package/src/core/wizard-labels.js +107 -0
- package/src/index.js +162 -0
- package/src/ui/ansi.js +26 -0
- package/src/ui/banner.js +29 -0
- package/src/ui/env-plan.js +207 -0
- package/src/ui/prompts.js +99 -0
- package/src/ui/readline-engine.js +257 -0
- package/src/ui/status-cards.js +56 -0
- 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')"
|