@daawoonkim/create-arch-app 0.1.0 → 0.2.0

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.
@@ -0,0 +1,255 @@
1
+ # CI/CD 워크플로우 가이드
2
+
3
+ 이 프로젝트는 GitHub Actions를 사용하여 자동화된 테스트와 배포를 수행합니다.
4
+
5
+ ## 📋 워크플로우 목록
6
+
7
+ ### 1. **PR Tests** (`test.yml`)
8
+ Pull Request 생성 시 자동 실행
9
+
10
+ **실행 조건:**
11
+ - Pull Request가 main 브랜치를 대상으로 생성될 때
12
+
13
+ **수행 작업:**
14
+ - Node.js 18.x, 20.x, 22.x에서 테스트
15
+ - 의존성 설치 및 빌드
16
+ - TypeScript 타입 체크
17
+ - CLI 설치 및 프로젝트 생성 테스트
18
+
19
+ ### 2. **Lint** (`lint.yml`)
20
+ 코드 품질 체크
21
+
22
+ **실행 조건:**
23
+ - main 브랜치 push
24
+ - Pull Request 생성
25
+
26
+ **수행 작업:**
27
+ - TypeScript 타입 체크
28
+ - console.log 검사 (경고)
29
+
30
+ ### 3. **Auto Deploy on Main** (`deploy-main.yml`) ⭐
31
+ main 브랜치 merge 시 자동 배포
32
+
33
+ **실행 조건:**
34
+ - main 브랜치에 push (merge 포함)
35
+ - 문서 파일 변경은 제외
36
+
37
+ **수행 작업:**
38
+ 1. package.json 버전 확인
39
+ 2. 해당 버전의 태그가 없으면 배포 진행
40
+ 3. npm에 자동 배포
41
+ 4. Git 태그 자동 생성
42
+ 5. GitHub Release 자동 생성
43
+
44
+ **중요:** 배포 전에 package.json 버전을 미리 업데이트해야 합니다!
45
+
46
+ ### 4. **Publish to npm** (`publish.yml`)
47
+ 태그 기반 수동 배포 (백업용)
48
+
49
+ **실행 조건:**
50
+ - `v*.*.*` 형식의 태그 push
51
+
52
+ **수행 작업:**
53
+ - 빌드 및 검증
54
+ - npm 배포
55
+ - GitHub Release 생성
56
+
57
+ ---
58
+
59
+ ## 🚀 배포 워크플로우
60
+
61
+ ### 자동 배포 (추천)
62
+
63
+ ```bash
64
+ # 1. 기능 개발
65
+ git checkout -b feature/my-feature
66
+ # ... 코드 작성 ...
67
+
68
+ # 2. package.json 버전 업데이트
69
+ npm version patch # 0.1.0 → 0.1.1
70
+ # 또는
71
+ npm version minor # 0.1.0 → 0.2.0
72
+
73
+ # 3. 커밋 및 푸시
74
+ git push origin feature/my-feature
75
+
76
+ # 4. PR 생성 및 merge
77
+ # GitHub에서 PR 생성 → 리뷰 → Merge
78
+
79
+ # 5. 자동 배포!
80
+ # main에 merge되면:
81
+ # ✅ 자동으로 npm 배포
82
+ # ✅ Git 태그 생성 (v0.1.1)
83
+ # ✅ GitHub Release 생성
84
+ ```
85
+
86
+ ### 수동 배포 (백업)
87
+
88
+ ```bash
89
+ # main 브랜치에서
90
+ git checkout main
91
+ git pull origin main
92
+
93
+ # 버전 업데이트 (자동으로 커밋 & 태그 생성)
94
+ npm version patch
95
+
96
+ # 태그 푸시
97
+ git push --follow-tags
98
+
99
+ # 자동으로 배포됨
100
+ ```
101
+
102
+ ---
103
+
104
+ ## ⚠️ 주의사항
105
+
106
+ ### package.json 버전 관리
107
+
108
+ **중요:** PR에서 package.json 버전을 미리 업데이트해야 합니다!
109
+
110
+ ```bash
111
+ # ❌ 잘못된 방법
112
+ git checkout -b feature/my-feature
113
+ # ... 코드 작성 ...
114
+ git commit -m "feat: add feature"
115
+ # merge → 배포 안됨 (버전이 이미 존재)
116
+
117
+ # ✅ 올바른 방법
118
+ git checkout -b feature/my-feature
119
+ # ... 코드 작성 ...
120
+ npm version patch # 버전 업데이트!
121
+ git push
122
+ # merge → 자동 배포!
123
+ ```
124
+
125
+ ### 배포 스킵
126
+
127
+ 다음과 같은 경우 배포가 자동으로 스킵됩니다:
128
+
129
+ - 문서 파일만 변경 (*.md)
130
+ - GitHub Actions 파일만 변경
131
+ - LICENSE 파일만 변경
132
+ - package.json 버전이 이미 태그로 존재
133
+
134
+ ### 배포 실패 시
135
+
136
+ 1. **npm 토큰 확인**
137
+ - GitHub Settings → Secrets → `NPM_TOKEN` 확인
138
+
139
+ 2. **버전 중복**
140
+ - 이미 같은 버전이 npm에 있는지 확인
141
+ - package.json 버전 증가 필요
142
+
143
+ 3. **빌드 실패**
144
+ - 로컬에서 `npm run build` 테스트
145
+ - TypeScript 에러 확인
146
+
147
+ ---
148
+
149
+ ## 🔧 설정
150
+
151
+ ### 필수 Secrets
152
+
153
+ GitHub Repository Settings → Secrets and variables → Actions에서 설정:
154
+
155
+ 1. **NPM_TOKEN** (필수)
156
+ - npm 웹사이트에서 Automation Token 생성
157
+ - https://www.npmjs.com/settings/[username]/tokens
158
+ - Type: "Automation" 선택
159
+
160
+ 2. **GITHUB_TOKEN** (자동)
161
+ - GitHub이 자동으로 제공
162
+
163
+ ---
164
+
165
+ ## 📊 배포 히스토리 확인
166
+
167
+ ### GitHub Actions
168
+ https://github.com/hec8897/create-arch-app/actions
169
+
170
+ ### npm 버전
171
+ https://www.npmjs.com/package/@daawoonkim/create-arch-app
172
+
173
+ ### GitHub Releases
174
+ https://github.com/hec8897/create-arch-app/releases
175
+
176
+ ---
177
+
178
+ ## 🐛 트러블슈팅
179
+
180
+ ### "Tag already exists" 에러
181
+ ```bash
182
+ # 해결: package.json 버전 증가
183
+ npm version patch
184
+ git push origin feature-branch
185
+ ```
186
+
187
+ ### "NPM_TOKEN not found" 에러
188
+ ```bash
189
+ # 해결: GitHub Secrets에 NPM_TOKEN 추가
190
+ # Settings → Secrets → New repository secret
191
+ ```
192
+
193
+ ### 배포가 안됨
194
+ ```bash
195
+ # 1. 버전 확인
196
+ cat package.json | grep version
197
+
198
+ # 2. 태그 확인
199
+ git tag -l
200
+
201
+ # 3. 버전이 다르면 자동 배포됨
202
+ # 버전이 같으면 스킵됨
203
+ ```
204
+
205
+ ---
206
+
207
+ ## 📝 CHANGELOG 업데이트
208
+
209
+ 배포 전에 CHANGELOG.md를 수동으로 업데이트하는 것을 권장합니다:
210
+
211
+ ```markdown
212
+ ## [0.1.1] - 2024-01-25
213
+
214
+ ### Added
215
+ - 새로운 기능 추가
216
+
217
+ ### Fixed
218
+ - 버그 수정
219
+
220
+ ### Changed
221
+ - 기능 개선
222
+ ```
223
+
224
+ ---
225
+
226
+ ## 🎯 베스트 프랙티스
227
+
228
+ 1. **버전 관리**
229
+ - Semantic Versioning 준수 (major.minor.patch)
230
+ - 의미 있는 버전 증가
231
+
232
+ 2. **커밋 메시지**
233
+ - feat: 새 기능
234
+ - fix: 버그 수정
235
+ - docs: 문서 변경
236
+ - chore: 빌드/설정 변경
237
+
238
+ 3. **배포 전 체크리스트**
239
+ - [ ] 로컬 빌드 성공
240
+ - [ ] TypeScript 에러 없음
241
+ - [ ] CHANGELOG 업데이트
242
+ - [ ] package.json 버전 증가
243
+ - [ ] PR 리뷰 완료
244
+
245
+ 4. **긴급 배포**
246
+ - hotfix 브랜치 사용
247
+ - 버전 패치 증가
248
+ - 빠른 merge
249
+
250
+ ---
251
+
252
+ ## 📞 문의
253
+
254
+ 워크플로우 관련 문제가 있으면 Issue를 생성해주세요:
255
+ https://github.com/hec8897/create-arch-app/issues
@@ -0,0 +1,101 @@
1
+ name: Auto Deploy on Main
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - main
7
+ paths-ignore:
8
+ - '**.md'
9
+ - '.github/**'
10
+ - 'LICENSE'
11
+
12
+ jobs:
13
+ deploy:
14
+ runs-on: ubuntu-latest
15
+
16
+ permissions:
17
+ contents: write
18
+ id-token: write
19
+
20
+ steps:
21
+ - name: Checkout code
22
+ uses: actions/checkout@v4
23
+ with:
24
+ fetch-depth: 0
25
+ token: ${{ secrets.GITHUB_TOKEN }}
26
+
27
+ - name: Setup Node.js
28
+ uses: actions/setup-node@v4
29
+ with:
30
+ node-version: '20.x'
31
+ registry-url: 'https://registry.npmjs.org'
32
+ cache: 'npm'
33
+
34
+ - name: Configure Git
35
+ run: |
36
+ git config user.name "github-actions[bot]"
37
+ git config user.email "github-actions[bot]@users.noreply.github.com"
38
+
39
+ - name: Install dependencies
40
+ run: npm ci
41
+
42
+ - name: Build
43
+ run: npm run build
44
+
45
+ - name: Check if version changed
46
+ id: version_check
47
+ run: |
48
+ CURRENT_VERSION=$(node -p "require('./package.json').version")
49
+ echo "current_version=$CURRENT_VERSION" >> $GITHUB_OUTPUT
50
+
51
+ # Check if tag already exists
52
+ if git rev-parse "v$CURRENT_VERSION" >/dev/null 2>&1; then
53
+ echo "should_deploy=false" >> $GITHUB_OUTPUT
54
+ echo "Tag v$CURRENT_VERSION already exists. Skipping deployment."
55
+ else
56
+ echo "should_deploy=true" >> $GITHUB_OUTPUT
57
+ echo "New version detected: $CURRENT_VERSION"
58
+ fi
59
+
60
+ - name: Publish to npm
61
+ if: steps.version_check.outputs.should_deploy == 'true'
62
+ run: npm publish --access public
63
+ env:
64
+ NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
65
+
66
+ - name: Create and push tag
67
+ if: steps.version_check.outputs.should_deploy == 'true'
68
+ run: |
69
+ VERSION="${{ steps.version_check.outputs.current_version }}"
70
+ git tag "v$VERSION"
71
+ git push origin "v$VERSION"
72
+
73
+ - name: Create GitHub Release
74
+ if: steps.version_check.outputs.should_deploy == 'true'
75
+ uses: actions/create-release@v1
76
+ env:
77
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
78
+ with:
79
+ tag_name: v${{ steps.version_check.outputs.current_version }}
80
+ release_name: Release ${{ steps.version_check.outputs.current_version }}
81
+ body: |
82
+ ## 🚀 Release ${{ steps.version_check.outputs.current_version }}
83
+
84
+ Automatically deployed from main branch.
85
+
86
+ ### 📦 Installation
87
+
88
+ \`\`\`bash
89
+ npx @daawoonkim/create-arch-app my-app
90
+ \`\`\`
91
+
92
+ ### 📝 Changes
93
+
94
+ See [CHANGELOG.md](https://github.com/${{ github.repository }}/blob/main/CHANGELOG.md) for details.
95
+
96
+ ### 🔗 Links
97
+
98
+ - [npm Package](https://www.npmjs.com/package/@daawoonkim/create-arch-app/v/${{ steps.version_check.outputs.current_version }})
99
+ - [Documentation](https://github.com/${{ github.repository }})
100
+ draft: false
101
+ prerelease: false
@@ -0,0 +1,33 @@
1
+ name: Lint
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ pull_request:
7
+ branches: [main]
8
+
9
+ jobs:
10
+ lint:
11
+ runs-on: ubuntu-latest
12
+
13
+ steps:
14
+ - name: Checkout code
15
+ uses: actions/checkout@v4
16
+
17
+ - name: Setup Node.js
18
+ uses: actions/setup-node@v4
19
+ with:
20
+ node-version: '20.x'
21
+ cache: 'npm'
22
+
23
+ - name: Install dependencies
24
+ run: npm ci
25
+
26
+ - name: TypeScript type check
27
+ run: npx tsc --noEmit
28
+
29
+ - name: Check for console.logs
30
+ run: |
31
+ if grep -r "console\.log" src/ --exclude-dir=node_modules; then
32
+ echo "Warning: console.log found in source files"
33
+ fi
@@ -0,0 +1,82 @@
1
+ name: Publish to npm
2
+
3
+ on:
4
+ push:
5
+ tags:
6
+ - 'v*.*.*'
7
+
8
+ jobs:
9
+ publish:
10
+ runs-on: ubuntu-latest
11
+
12
+ permissions:
13
+ contents: write
14
+ id-token: write
15
+
16
+ steps:
17
+ - name: Checkout code
18
+ uses: actions/checkout@v4
19
+
20
+ - name: Setup Node.js
21
+ uses: actions/setup-node@v4
22
+ with:
23
+ node-version: '20.x'
24
+ registry-url: 'https://registry.npmjs.org'
25
+ cache: 'npm'
26
+
27
+ - name: Install dependencies
28
+ run: npm ci
29
+
30
+ - name: Build
31
+ run: npm run build
32
+
33
+ - name: Verify build
34
+ run: |
35
+ if [ ! -d "dist" ]; then
36
+ echo "Build failed: dist directory not found"
37
+ exit 1
38
+ fi
39
+ echo "Build successful"
40
+
41
+ - name: Get version from tag
42
+ id: get_version
43
+ run: echo "VERSION=${GITHUB_REF#refs/tags/v}" >> $GITHUB_OUTPUT
44
+
45
+ - name: Verify version matches package.json
46
+ run: |
47
+ TAG_VERSION="${{ steps.get_version.outputs.VERSION }}"
48
+ PKG_VERSION=$(node -p "require('./package.json').version")
49
+ if [ "$TAG_VERSION" != "$PKG_VERSION" ]; then
50
+ echo "Error: Tag version ($TAG_VERSION) does not match package.json version ($PKG_VERSION)"
51
+ echo "Please run 'npm version <type>' to update both"
52
+ exit 1
53
+ fi
54
+ echo "Version verified: $TAG_VERSION"
55
+
56
+ - name: Publish to npm
57
+ run: npm publish --access public
58
+ env:
59
+ NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
60
+
61
+ - name: Create GitHub Release
62
+ uses: actions/create-release@v1
63
+ env:
64
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
65
+ with:
66
+ tag_name: ${{ github.ref }}
67
+ release_name: Release ${{ steps.get_version.outputs.VERSION }}
68
+ body: |
69
+ ## Changes in this Release
70
+
71
+ See [CHANGELOG.md](https://github.com/${{ github.repository }}/blob/main/CHANGELOG.md) for details.
72
+
73
+ ## Installation
74
+
75
+ ```bash
76
+ npx @daawoonkim/create-arch-app my-app
77
+ ```
78
+
79
+ ## npm Package
80
+ https://www.npmjs.com/package/@daawoonkim/create-arch-app/v/${{ steps.get_version.outputs.VERSION }}
81
+ draft: false
82
+ prerelease: false
@@ -0,0 +1,52 @@
1
+ name: PR Tests
2
+
3
+ on:
4
+ pull_request:
5
+ branches: [main]
6
+
7
+ jobs:
8
+ test:
9
+ runs-on: ubuntu-latest
10
+
11
+ strategy:
12
+ matrix:
13
+ node-version: [18.x, 20.x, 22.x]
14
+
15
+ steps:
16
+ - name: Checkout code
17
+ uses: actions/checkout@v4
18
+
19
+ - name: Setup Node.js ${{ matrix.node-version }}
20
+ uses: actions/setup-node@v4
21
+ with:
22
+ node-version: ${{ matrix.node-version }}
23
+ cache: 'npm'
24
+
25
+ - name: Install dependencies
26
+ run: npm ci
27
+
28
+ - name: Build
29
+ run: npm run build
30
+
31
+ - name: Check for TypeScript errors
32
+ run: npx tsc --noEmit
33
+
34
+ - name: Test CLI installation
35
+ run: |
36
+ npm link
37
+ echo "✓ CLI linked successfully"
38
+
39
+ - name: Verify CLI command exists
40
+ run: |
41
+ which create-arch-app
42
+ create-arch-app --version || echo "CLI is available"
43
+
44
+ - name: Verify dist files
45
+ run: |
46
+ if [ -d "dist" ]; then
47
+ echo "✓ Build artifacts exist"
48
+ ls -la dist/
49
+ else
50
+ echo "✗ Build artifacts missing"
51
+ exit 1
52
+ fi
package/CHANGELOG.md ADDED
@@ -0,0 +1,35 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project will be documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+
8
+ ## [Unreleased]
9
+
10
+ ## [0.1.0] - 2024-01-XX
11
+
12
+ ### Added
13
+ - Initial MVP release
14
+ - Support for 4 architecture patterns (DDD, Clean Architecture, Atomic Design, Default)
15
+ - React (with Vite) and Next.js framework options
16
+ - Next.js version selection (Latest, 15.x, 14.x, 13.x)
17
+ - Next.js router selection (App Router, Pages Router)
18
+ - TypeScript as default
19
+ - Styling options: Tailwind CSS, CSS Modules
20
+ - State management options: Zustand, Context API, None
21
+ - Form library: React Hook Form
22
+ - Testing: Vitest + Testing Library
23
+ - Current directory creation support (`.` option)
24
+ - Interactive CLI with inquirer.js
25
+ - Automatic folder structure generation
26
+ - README.md generation with project details
27
+ - Environment-specific configuration files
28
+
29
+ ### Documentation
30
+ - Comprehensive README with usage examples
31
+ - Publishing guide (PUBLISHING.md)
32
+ - Testing guide (TESTING.md)
33
+
34
+ [Unreleased]: https://github.com/hec8897/create-arch-app/compare/v0.1.0...HEAD
35
+ [0.1.0]: https://github.com/hec8897/create-arch-app/releases/tag/v0.1.0