tylersong 1.0.10 → 1.0.12

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.
@@ -1,191 +0,0 @@
1
- # 자동 배포 시스템 가이드
2
-
3
- ## 🎯 개요
4
- 이 시스템은 main 브랜치에 PR이 merge될 때 자동으로 버전을 업데이트하고 NPM에 배포하는 완전 자동화된 배포 시스템입니다.
5
-
6
- ## 🚀 작동 방식
7
-
8
- ### 1. 자동 트리거
9
- - **main 브랜치로의 PR merge**: CI 완료 후 자동 배포 시작
10
- - **main 브랜치로의 직접 push**: 즉시 자동 배포 시작
11
- - **태그 push**: 기존 태그 기반 배포 유지
12
-
13
- ### 2. 자동 버전 결정 (Semantic Versioning)
14
- 커밋 메시지를 분석하여 자동으로 버전 타입을 결정합니다:
15
-
16
- #### 🔴 Major 버전 (X.0.0)
17
- ```bash
18
- # Breaking changes
19
- git commit -m "feat!: completely new API structure"
20
- git commit -m "fix!: remove deprecated method"
21
- git commit -m "feat: add new feature
22
-
23
- BREAKING CHANGE: This removes the old API"
24
- ```
25
-
26
- #### 🟡 Minor 버전 (0.X.0)
27
- ```bash
28
- # New features
29
- git commit -m "feat: add user profile management"
30
- git commit -m "feat(auth): implement OAuth login"
31
- ```
32
-
33
- #### 🟢 Patch 버전 (0.0.X)
34
- ```bash
35
- # Bug fixes, docs, chores (default)
36
- git commit -m "fix: resolve login redirect issue"
37
- git commit -m "docs: update README"
38
- git commit -m "chore: update dependencies"
39
- git commit -m "style: fix code formatting"
40
- ```
41
-
42
- ### 3. 자동 실행 과정
43
- 1. **CI 실행**: 테스트, 빌드, 린팅
44
- 2. **버전 분석**: 현재 버전 vs NPM 배포 버전 비교
45
- 3. **자동 버전 업데이트**: 필요 시 package.json 및 소스코드 버전 업데이트
46
- 4. **자동 커밋**: 버전 업데이트 커밋 생성 및 푸시
47
- 5. **빌드 및 배포**: TypeScript 빌드 후 NPM 배포
48
- 6. **알림**: Discord 및 콘솔 알림
49
-
50
- ## 📋 사전 설정 요구사항
51
-
52
- ### 1. GitHub Secrets 설정
53
- ```bash
54
- # NPM 토큰 설정 (필수)
55
- NPM_TOKEN=your_npm_token_here
56
-
57
- # Discord 알림 (선택사항)
58
- DISCORD_WEBHOOK_URL=your_discord_webhook_url
59
- ```
60
-
61
- ### 2. NPM 토큰 생성 방법
62
- 1. [npmjs.com](https://www.npmjs.com)에 로그인
63
- 2. Profile → Access Tokens → Generate New Token
64
- 3. **Automation** 타입 선택
65
- 4. 생성된 토큰을 GitHub Repository Settings → Secrets에 `NPM_TOKEN`으로 추가
66
-
67
- ## 🎨 Conventional Commits 가이드
68
-
69
- ### 기본 형식
70
- ```
71
- <type>[optional scope]: <description>
72
-
73
- [optional body]
74
-
75
- [optional footer(s)]
76
- ```
77
-
78
- ### 주요 타입들
79
- | 타입 | 설명 | 버전 영향 |
80
- |------|------|-----------|
81
- | `feat` | 새로운 기능 | Minor |
82
- | `fix` | 버그 수정 | Patch |
83
- | `docs` | 문서 변경 | Patch |
84
- | `style` | 코드 스타일 변경 | Patch |
85
- | `refactor` | 코드 리팩토링 | Patch |
86
- | `test` | 테스트 추가/수정 | Patch |
87
- | `chore` | 빌드/설정 변경 | Patch |
88
- | `!` | Breaking Change | Major |
89
-
90
- ### 실제 예시
91
- ```bash
92
- # 새 기능 추가 (Minor 버전 증가)
93
- git commit -m "feat: add interactive CLI menu"
94
-
95
- # 버그 수정 (Patch 버전 증가)
96
- git commit -m "fix: resolve command parsing error"
97
-
98
- # Breaking Change (Major 버전 증가)
99
- git commit -m "feat!: redesign CLI interface"
100
-
101
- # 상세한 설명이 있는 커밋
102
- git commit -m "feat: add color themes
103
-
104
- - Add dark and light theme options
105
- - Implement theme persistence
106
- - Update help text with theme info"
107
- ```
108
-
109
- ## 🔧 워크플로우 파일 구성
110
-
111
- ### 주요 작업들
112
- 1. **check-ci**: CI 상태 확인
113
- 2. **auto-version**: 자동 버전 업데이트 및 결정
114
- 3. **version-check**: 태그 기반 배포용 버전 확인
115
- 4. **publish**: NPM 배포 실행
116
- 5. **notify**: 결과 알림
117
-
118
- ### 트리거 조건
119
- ```yaml
120
- on:
121
- push:
122
- branches: [main] # main 브랜치 직접 push
123
- tags: ["v*"] # 태그 push
124
- workflow_run:
125
- workflows: ["Continuous Integration"]
126
- types: [completed] # CI 완료 후
127
- branches: [main]
128
- ```
129
-
130
- ## 📊 배포 시나리오
131
-
132
- ### 시나리오 1: 첫 PR merge
133
- ```
134
- 현재 NPM: v1.0.5
135
- 현재 코드: v1.0.5
136
- → 자동으로 v1.0.6으로 업데이트 후 배포
137
- ```
138
-
139
- ### 시나리오 2: 이미 다른 버전인 경우
140
- ```
141
- 현재 NPM: v1.0.5
142
- 현재 코드: v1.0.6
143
- → 버전 업데이트 없이 v1.0.6 즉시 배포
144
- ```
145
-
146
- ### 시나리오 3: 태그 기반 배포
147
- ```
148
- 태그 push: v1.1.0
149
- → 버전 체크만 하고 즉시 배포
150
- ```
151
-
152
- ## 🚨 주의사항
153
-
154
- ### 1. 권한 설정
155
- - GitHub Actions에 repository write 권한 필요
156
- - NPM 토큰이 올바르게 설정되어야 함
157
-
158
- ### 2. 커밋 메시지 규칙
159
- - Conventional Commits 형식 권장
160
- - 명확하고 일관된 메시지 작성
161
-
162
- ### 3. CI/CD 최적화
163
- - `[skip ci]` 태그로 무한 루프 방지
164
- - 버전 업데이트 커밋은 자동으로 CI 건너뛰기
165
-
166
- ## 🎉 장점
167
-
168
- ### ✅ 완전 자동화
169
- - 수동 버전 관리 불필요
170
- - 실수 방지 및 일관성 보장
171
-
172
- ### ✅ Semantic Versioning 준수
173
- - 커밋 메시지 기반 자동 버전 결정
174
- - 표준화된 버전 관리
175
-
176
- ### ✅ 실시간 알림
177
- - Discord 및 콘솔 배포 상태 알림
178
- - 성공/실패 즉시 확인
179
-
180
- ## 🔍 디버깅
181
-
182
- ### 로그 확인 위치
183
- - GitHub Actions → 해당 워크플로우 실행 → 각 작업 로그
184
-
185
- ### 일반적인 문제들
186
- 1. **NPM 토큰 오류**: Secrets 설정 확인
187
- 2. **버전 충돌**: NPM에서 같은 버전 이미 배포됨
188
- 3. **빌드 실패**: TypeScript 컴파일 오류 확인
189
- 4. **권한 오류**: GitHub token 권한 확인
190
-
191
- 이제 PR만 merge하면 자동으로 버전이 업데이트되고 NPM에 배포됩니다! 🚀
@@ -1,82 +0,0 @@
1
- # 배포 가이드
2
-
3
- ## CI/CD 파이프라인
4
-
5
- 이 프로젝트는 모듈화된 GitHub Actions를 사용한 자동 배포 시스템을 구축했습니다.
6
-
7
- > 📖 **워크플로우 구조**: 자세한 내용은 [docs/workflows.md](./workflows.md)를 참고해주세요.
8
-
9
- ### 트리거 조건
10
-
11
- #### 1. Pull Request
12
-
13
- - `main` 브랜치로의 PR 시 테스트와 빌드만 실행
14
- - Node.js와 Bun 두 환경에서 모두 테스트
15
-
16
- #### 2. Main 브랜치 Push
17
-
18
- - `main` 브랜치에 직접 push 시
19
- - 버전이 변경된 경우에만 NPM에 자동 배포
20
- - package.json의 버전과 NPM에 이미 배포된 버전을 비교
21
-
22
- #### 3. 태그 Push
23
-
24
- - `v*` 형태의 태그 push 시 무조건 NPM에 배포
25
- - 예: `v1.0.5`, `v2.1.0`
26
-
27
- ### 배포 워크플로우
28
-
29
- ```mermaid
30
- graph LR
31
- A[Code Push] --> B{브랜치 확인}
32
- B -->|main| C[버전 체크]
33
- B -->|태그| F[즉시 배포]
34
- C -->|변경됨| D[테스트 & 빌드]
35
- C -->|동일함| E[배포 스킵]
36
- D --> F[NPM 배포]
37
- ```
38
-
39
- ### 수동 배포 방법
40
-
41
- #### 1. 버전 업데이트 후 main 브랜치 배포
42
-
43
- ```bash
44
- # 버전 업데이트
45
- npm version patch # 또는 minor, major
46
-
47
- # main 브랜치에 push (자동 배포됨)
48
- git push origin main
49
- ```
50
-
51
- #### 2. 태그를 통한 배포
52
-
53
- ```bash
54
- # 버전 업데이트
55
- npm version patch
56
-
57
- # 태그와 함께 push (즉시 배포됨)
58
- git push origin main --tags
59
- ```
60
-
61
- ### 환경 변수 설정
62
-
63
- GitHub Repository Settings에서 다음 Secret을 설정해야 합니다:
64
-
65
- - `NPM_TOKEN`: NPM 계정의 액세스 토큰
66
-
67
- ### 지원 런타임
68
-
69
- - **Node.js 20.x**: 메인 런타임
70
- - **Bun Latest**: 성능 테스트 및 대안 빌드
71
-
72
- ### 빌드 산출물
73
-
74
- - TypeScript 컴파일된 JavaScript 파일들
75
- - 타입 정의 파일 (.d.ts)
76
- - 소스맵 파일
77
-
78
- ### 주의사항
79
-
80
- 1. **버전 관리**: package.json의 버전을 먼저 업데이트해야 배포됩니다
81
- 2. **테스트 통과**: 모든 테스트가 통과해야 배포가 진행됩니다
82
- 3. **권한**: NPM_TOKEN이 올바르게 설정되어야 합니다
@@ -1,394 +0,0 @@
1
- # 개발 가이드
2
-
3
- ## 개발 환경 요구사항
4
-
5
- ### 필수 요구사항
6
-
7
- - **Node.js**: 18.x 이상
8
- - **Bun**: 최신 버전 (권장)
9
- - **Git**: 버전 관리
10
- - **에디터**: VS Code 또는 기타 TypeScript 지원 에디터
11
-
12
- ### Bun 설치
13
-
14
- ```bash
15
- # macOS/Linux
16
- curl -fsSL https://bun.sh/install | bash
17
-
18
- # Windows (PowerShell)
19
- powershell -c "irm bun.sh/install.ps1 | iex"
20
-
21
- # 또는 npm을 통해
22
- npm install -g bun
23
- ```
24
-
25
- ## 프로젝트 설정
26
-
27
- ### 1. 저장소 클론
28
-
29
- ```bash
30
- git clone https://github.com/alstjd0051/npm_readMe.git
31
- cd npm_readMe
32
- ```
33
-
34
- ### 2. 의존성 설치
35
-
36
- ```bash
37
- # Bun 사용 (권장)
38
- bun install
39
-
40
- # 또는 npm 사용
41
- npm install
42
- ```
43
-
44
- ### 3. 개발 서버 실행
45
-
46
- ```bash
47
- # Bun으로 직접 실행
48
- bun run dev:bun
49
-
50
- # 또는 tsx 사용
51
- bun run dev
52
- ```
53
-
54
- ## 프로젝트 구조
55
-
56
- ```
57
- npm_readMe/
58
- ├── .github/
59
- │ └── workflows/ # GitHub Actions 워크플로우
60
- │ ├── ci.yml # 지속적 통합
61
- │ └── publish.yml # NPM 배포
62
- ├── docs/ # 문서
63
- │ ├── testing.md # 테스트 가이드
64
- │ ├── pipeline.md # CI/CD 파이프라인
65
- │ ├── development.md # 개발 가이드 (이 파일)
66
- │ └── ...
67
- ├── src/
68
- │ └── index.ts # 메인 소스 코드
69
- ├── test/
70
- │ └── index.test.ts # 테스트 파일
71
- ├── dist/ # 빌드 출력 (gitignore)
72
- ├── .eslintrc.json # ESLint 설정
73
- ├── .prettierrc # Prettier 설정
74
- ├── .editorconfig # 에디터 설정
75
- ├── .gitignore # Git ignore 규칙
76
- ├── vitest.config.ts # Vitest 설정
77
- ├── tsconfig.json # TypeScript 설정
78
- ├── bunfig.toml # Bun 설정
79
- ├── package.json # 패키지 정보
80
- └── README.md # 프로젝트 README
81
- ```
82
-
83
- ## 개발 워크플로우
84
-
85
- ### 1. 기능 개발
86
-
87
- ```bash
88
- # 1. 새 브랜치 생성
89
- git checkout -b feature/new-feature
90
-
91
- # 2. 코드 작성
92
- # src/index.ts 수정
93
-
94
- # 3. 타입 체크
95
- bun run typecheck
96
-
97
- # 4. 린트
98
- bun run lint:fix
99
-
100
- # 5. 테스트 작성 및 실행
101
- # test/index.test.ts 작성
102
- bun run test
103
-
104
- # 6. 로컬 테스트
105
- bun run dev:bun
106
-
107
- # 7. 커밋
108
- git add .
109
- git commit -m "feat: 새 기능 추가"
110
-
111
- # 8. 푸시 및 PR 생성
112
- git push origin feature/new-feature
113
- ```
114
-
115
- ### 2. 버그 수정
116
-
117
- ```bash
118
- # 1. 버그 재현 테스트 작성
119
- # test/index.test.ts에 실패하는 테스트 추가
120
-
121
- # 2. 코드 수정
122
- # src/index.ts 수정
123
-
124
- # 3. 테스트 통과 확인
125
- bun run test
126
-
127
- # 4. 커밋
128
- git commit -m "fix: 버그 수정"
129
- ```
130
-
131
- ## 코드 스타일 가이드
132
-
133
- ### TypeScript 규칙
134
-
135
- 1. **타입 명시**
136
- ```typescript
137
- // ✅ 좋은 예
138
- const openUrl = (url: string): void => {
139
- // ...
140
- };
141
-
142
- // ❌ 나쁜 예
143
- const openUrl = (url) => {
144
- // ...
145
- };
146
- ```
147
-
148
- 2. **인터페이스 정의**
149
- ```typescript
150
- // ✅ 좋은 예
151
- interface UserAnswer {
152
- showInfo: boolean;
153
- }
154
-
155
- // ❌ 나쁜 예
156
- type UserAnswer = {
157
- showInfo: boolean;
158
- }; // 객체 타입에는 interface 선호
159
- ```
160
-
161
- 3. **에러 핸들링**
162
- ```typescript
163
- // ✅ 좋은 예
164
- try {
165
- // 위험한 작업
166
- } catch (error) {
167
- if (error instanceof Error) {
168
- console.error(error.message);
169
- }
170
- }
171
-
172
- // ❌ 나쁜 예
173
- try {
174
- // 위험한 작업
175
- } catch (error) {
176
- console.error(error); // 타입 체크 없음
177
- }
178
- ```
179
-
180
- ### 네이밍 컨벤션
181
-
182
- - **변수/함수**: camelCase (`openUrl`, `getUserInfo`)
183
- - **타입/인터페이스**: PascalCase (`UserAnswer`, `ProgramOptions`)
184
- - **상수**: UPPER_SNAKE_CASE (`MAX_RETRIES`, `DEFAULT_TIMEOUT`)
185
- - **파일명**: kebab-case (`index.ts`, `user-utils.ts`)
186
-
187
- ### 코드 포맷팅
188
-
189
- Prettier가 자동으로 처리하지만, 기본 규칙:
190
-
191
- - **들여쓰기**: 2 스페이스
192
- - **세미콜론**: 사용
193
- - **따옴표**: 쌍따옴표 (")
194
- - **줄 길이**: 80자
195
- - **후행 쉼표**: ES5 호환
196
-
197
- ## 테스트 작성
198
-
199
- ### 단위 테스트
200
-
201
- ```typescript
202
- import { describe, it, expect } from 'vitest';
203
-
204
- describe('함수명', () => {
205
- it('특정 조건에서 기대되는 동작을 해야 함', () => {
206
- // Arrange
207
- const input = 'test';
208
-
209
- // Act
210
- const result = someFunction(input);
211
-
212
- // Assert
213
- expect(result).toBe('expected');
214
- });
215
- });
216
- ```
217
-
218
- ### 통합 테스트
219
-
220
- ```typescript
221
- describe('CLI 통합 테스트', () => {
222
- it('전체 플로우가 정상 작동해야 함', async () => {
223
- // CLI 실행 시뮬레이션
224
- // 여러 컴포넌트 통합 테스트
225
- });
226
- });
227
- ```
228
-
229
- ## 디버깅
230
-
231
- ### VS Code 디버깅 설정
232
-
233
- `.vscode/launch.json` 생성:
234
-
235
- ```json
236
- {
237
- "version": "0.2.0",
238
- "configurations": [
239
- {
240
- "type": "node",
241
- "request": "launch",
242
- "name": "Debug TypeScript",
243
- "runtimeExecutable": "bun",
244
- "runtimeArgs": ["run", "src/index.ts"],
245
- "skipFiles": ["<node_internals>/**"]
246
- }
247
- ]
248
- }
249
- ```
250
-
251
- ### 콘솔 디버깅
252
-
253
- ```typescript
254
- // 개발 중에만 사용
255
- console.log(chalk.gray('[DEBUG]'), variableName);
256
- ```
257
-
258
- ## 빌드 및 배포
259
-
260
- ### 로컬 빌드
261
-
262
- ```bash
263
- # TypeScript 컴파일러 사용
264
- bun run build
265
-
266
- # Bun 번들러 사용 (더 빠름)
267
- bun run build:bun
268
-
269
- # 빌드 결과 확인
270
- ls -la dist/
271
- ```
272
-
273
- ### 로컬에서 패키지 테스트
274
-
275
- ```bash
276
- # 1. 전역 링크 생성
277
- npm link
278
-
279
- # 2. CLI 실행 테스트
280
- tylersong
281
-
282
- # 3. 테스트 완료 후 링크 제거
283
- npm unlink -g tylersong
284
- ```
285
-
286
- ### 버전 배포
287
-
288
- ```bash
289
- # 1. 변경사항 커밋
290
- git add .
291
- git commit -m "feat: 새 기능"
292
-
293
- # 2. 버전 업데이트
294
- npm version patch # 1.0.9 → 1.0.10
295
-
296
- # 3. 푸시 (태그 포함)
297
- git push origin main --tags
298
-
299
- # 4. GitHub Actions가 자동으로 NPM에 배포
300
- ```
301
-
302
- ## 품질 체크리스트
303
-
304
- 배포 전 확인사항:
305
-
306
- - [ ] 모든 테스트 통과 (`bun run test`)
307
- - [ ] 린트 오류 없음 (`bun run lint`)
308
- - [ ] 타입 체크 통과 (`bun run typecheck`)
309
- - [ ] 빌드 성공 (`bun run build`)
310
- - [ ] 로컬에서 CLI 정상 작동 (`bun run dev:bun`)
311
- - [ ] 문서 업데이트 (필요시)
312
- - [ ] CHANGELOG 업데이트 (필요시)
313
-
314
- ## 문제 해결
315
-
316
- ### Bun 관련 문제
317
-
318
- ```bash
319
- # Bun 재설치
320
- curl -fsSL https://bun.sh/install | bash
321
-
322
- # 캐시 삭제
323
- rm -rf ~/.bun/install/cache
324
- bun install
325
- ```
326
-
327
- ### 의존성 문제
328
-
329
- ```bash
330
- # lockfile 삭제 후 재설치
331
- rm -f bun.lock package-lock.json
332
- bun install
333
- ```
334
-
335
- ### TypeScript 오류
336
-
337
- ```bash
338
- # node_modules 재설치
339
- rm -rf node_modules
340
- bun install
341
-
342
- # tsconfig.json 확인
343
- bun run typecheck
344
- ```
345
-
346
- ## 기여 가이드
347
-
348
- 1. **이슈 생성**: 버그 리포트 또는 기능 제안
349
- 2. **브랜치 생성**: `feature/`, `fix/`, `docs/` 접두사 사용
350
- 3. **커밋 메시지**: [Conventional Commits](https://www.conventionalcommits.org/) 형식
351
- - `feat:` - 새 기능
352
- - `fix:` - 버그 수정
353
- - `docs:` - 문서 변경
354
- - `test:` - 테스트 추가/수정
355
- - `refactor:` - 리팩토링
356
- - `style:` - 코드 스타일 변경
357
- - `chore:` - 기타 변경사항
358
- 4. **Pull Request**: 명확한 설명과 함께 제출
359
- 5. **코드 리뷰**: 피드백 반영
360
-
361
- ## 유용한 명령어 모음
362
-
363
- ```bash
364
- # 개발
365
- bun run dev:bun # 개발 모드 실행
366
-
367
- # 테스트
368
- bun run test # 테스트 실행
369
- bun run test:watch # 테스트 감시
370
- bun run test:coverage # 커버리지 포함
371
-
372
- # 코드 품질
373
- bun run lint # 린트 검사
374
- bun run lint:fix # 린트 자동 수정
375
- bun run format # 코드 포맷팅
376
- bun run typecheck # 타입 체크
377
-
378
- # 빌드
379
- bun run build # TypeScript 빌드
380
- bun run build:bun # Bun 빌드
381
-
382
- # 실행
383
- bun run start # 빌드된 파일 실행
384
- bun run start:bun # Bun으로 실행
385
- ```
386
-
387
- ## 추가 리소스
388
-
389
- - [Bun 공식 문서](https://bun.sh/docs)
390
- - [TypeScript 핸드북](https://www.typescriptlang.org/docs/)
391
- - [Vitest 가이드](https://vitest.dev/guide/)
392
- - [ESLint 규칙](https://eslint.org/docs/rules/)
393
- - [Prettier 옵션](https://prettier.io/docs/en/options.html)
394
-