tylersong 1.0.9 → 1.0.11
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/.cursor/plans/-----------8c733d2f.plan.md +158 -0
- package/.editorconfig +15 -0
- package/.eslintrc.json +33 -0
- package/.github/workflows/ci.yml +59 -25
- package/.github/workflows/deploy.yml +7 -13
- package/.github/workflows/publish.yml +30 -297
- package/.prettierrc +13 -0
- package/README.md +133 -45
- package/dist/index.js +61 -23
- package/dist/index.js.map +1 -1
- package/docs/auto-deployment.md +191 -0
- package/docs/deployment.md +82 -0
- package/docs/development.md +394 -0
- package/docs/direct-deployment.md +116 -0
- package/docs/discord-setup.md +158 -0
- package/docs/github-actions-fixes.md +142 -0
- package/docs/improvements.md +287 -0
- package/docs/pipeline.md +228 -0
- package/docs/testing.md +173 -0
- package/docs/usage.md +112 -0
- package/docs/workflows.md +176 -0
- package/package.json +16 -3
- package/src/index.ts +77 -32
- package/test/index.test.ts +167 -0
- package/tsconfig.eslint.json +9 -0
- package/tsconfig.json +1 -1
- package/vitest.config.ts +22 -0
|
@@ -0,0 +1,394 @@
|
|
|
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
|
+
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
# NPM 직접 배포 가이드
|
|
2
|
+
|
|
3
|
+
## 🎯 개요
|
|
4
|
+
|
|
5
|
+
이 문서는 GitHub Actions 태그 자동화 없이 NPM에 직접 배포하는 방법을 설명합니다.
|
|
6
|
+
|
|
7
|
+
## 📋 사전 준비사항
|
|
8
|
+
|
|
9
|
+
- NPM 계정 및 로그인
|
|
10
|
+
- TypeScript 프로젝트 빌드 환경
|
|
11
|
+
- 적절한 권한(패키지 소유자 또는 메인테이너)
|
|
12
|
+
|
|
13
|
+
## 🚀 배포 단계
|
|
14
|
+
|
|
15
|
+
### 1. 버전 업데이트
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
# 패치 버전 자동 증가 (1.0.4 → 1.0.5)
|
|
19
|
+
npm version patch
|
|
20
|
+
|
|
21
|
+
# 또는 마이너 버전 증가 (1.0.4 → 1.1.0)
|
|
22
|
+
npm version minor
|
|
23
|
+
|
|
24
|
+
# 또는 메이저 버전 증가 (1.0.4 → 2.0.0)
|
|
25
|
+
npm version major
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
### 2. TypeScript 소스 코드 수정
|
|
29
|
+
|
|
30
|
+
버전이 하드코딩된 경우 소스코드도 업데이트:
|
|
31
|
+
|
|
32
|
+
```typescript
|
|
33
|
+
// src/index.ts
|
|
34
|
+
program.version("1.0.5").description("송민성의 개발자 프로필 CLI");
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
### 3. 프로젝트 빌드
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
# TypeScript 컴파일
|
|
41
|
+
npm run build
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### 4. NPM 로그인 확인
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
# 현재 로그인 상태 확인
|
|
48
|
+
npm whoami
|
|
49
|
+
|
|
50
|
+
# 로그인되지 않은 경우 로그인
|
|
51
|
+
npm login
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
### 5. NPM 배포
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
# 패키지 배포
|
|
58
|
+
npm publish
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
## ✅ 배포 성공 확인
|
|
62
|
+
|
|
63
|
+
### 배포된 패키지 정보 확인
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
# 최신 버전 정보 확인
|
|
67
|
+
npm view tylersong
|
|
68
|
+
|
|
69
|
+
# 모든 버전 목록 확인
|
|
70
|
+
npm view tylersong versions --json
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
### 패키지 설치 및 테스트
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
# 전역 설치
|
|
77
|
+
npm install -g tylersong@latest
|
|
78
|
+
|
|
79
|
+
# 실행 테스트
|
|
80
|
+
tylersong
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
## 📦 배포 결과 (2024.08.04)
|
|
84
|
+
|
|
85
|
+
### 성공적으로 배포된 버전: `1.0.5`
|
|
86
|
+
|
|
87
|
+
- **배포 시간**: 방금 전 (just now)
|
|
88
|
+
- **패키지 크기**: 21.0 kB
|
|
89
|
+
- **압축 해제 크기**: 58.1 kB
|
|
90
|
+
- **포함된 파일**: 19개
|
|
91
|
+
- **메인테이너**: miiinsseong <wsc7202@gmail.com>
|
|
92
|
+
|
|
93
|
+
### 전체 버전 히스토리
|
|
94
|
+
|
|
95
|
+
```json
|
|
96
|
+
["1.0.0", "1.0.1", "1.0.3", "1.0.4", "1.0.5"]
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
## 🔧 주요 변경사항 (v1.0.5)
|
|
100
|
+
|
|
101
|
+
- ✨ JavaScript에서 TypeScript로 완전 변환
|
|
102
|
+
- 📦 타입 정의 파일 포함 (`dist/index.d.ts`)
|
|
103
|
+
- 🛠️ 자동 빌드 스크립트 (`prepublishOnly`)
|
|
104
|
+
- 📚 상세한 문서화 완료
|
|
105
|
+
|
|
106
|
+
## 💡 팁
|
|
107
|
+
|
|
108
|
+
1. **자동 빌드**: `prepublishOnly` 스크립트가 설정되어 있어 배포 시 자동으로 빌드됩니다.
|
|
109
|
+
2. **타입 안전성**: TypeScript로 변환되어 더 안정적인 코드가 되었습니다.
|
|
110
|
+
3. **버전 관리**: 소스코드의 하드코딩된 버전도 함께 업데이트해야 합니다.
|
|
111
|
+
|
|
112
|
+
## 🚨 주의사항
|
|
113
|
+
|
|
114
|
+
- 같은 버전을 두 번 배포할 수 없습니다.
|
|
115
|
+
- 배포 전 반드시 빌드와 테스트를 수행하세요.
|
|
116
|
+
- NPM 로그인 상태를 확인하세요.
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
# Discord 알림 설정 가이드
|
|
2
|
+
|
|
3
|
+
GitHub Actions에서 Discord로 빌드 및 배포 알림을 받을 수 있도록 설정하는 방법입니다.
|
|
4
|
+
|
|
5
|
+
## 🎯 Discord Webhook 생성
|
|
6
|
+
|
|
7
|
+
### 1. Discord 서버에서 Webhook 생성
|
|
8
|
+
|
|
9
|
+
1. Discord 서버에서 알림을 받을 채널로 이동
|
|
10
|
+
2. 채널 설정 (⚙️) → **연동** → **웹후크**
|
|
11
|
+
3. **새 웹후크** 버튼 클릭
|
|
12
|
+
4. 웹후크 이름 설정 (예: "GitHub Actions")
|
|
13
|
+
5. 아바타 이미지 설정 (선택사항)
|
|
14
|
+
6. **웹후크 URL 복사** 버튼으로 URL 복사
|
|
15
|
+
|
|
16
|
+
### 2. GitHub Secrets에 Webhook URL 저장
|
|
17
|
+
|
|
18
|
+
1. GitHub 저장소 → **Settings** → **Secrets and variables** → **Actions**
|
|
19
|
+
2. **New repository secret** 클릭
|
|
20
|
+
3. **Name**: `DISCORD_WEBHOOK_URL`
|
|
21
|
+
4. **Secret**: 복사한 Discord 웹후크 URL 붙여넣기
|
|
22
|
+
5. **Add secret** 클릭
|
|
23
|
+
|
|
24
|
+
## 📢 알림 유형
|
|
25
|
+
|
|
26
|
+
### 🔍 CI 알림 (ci.yml)
|
|
27
|
+
|
|
28
|
+
**전송 시점**: 모든 CI 작업 완료 후
|
|
29
|
+
**포함 정보**:
|
|
30
|
+
|
|
31
|
+
- ✅/❌ 전체 CI 결과
|
|
32
|
+
- 🌿 브랜치 정보
|
|
33
|
+
- 📝 커밋 해시 및 링크
|
|
34
|
+
- 🧪 테스트 결과
|
|
35
|
+
- 🏗️ 빌드 결과
|
|
36
|
+
- 🔍 린팅 결과
|
|
37
|
+
- 👤 작업자 정보
|
|
38
|
+
|
|
39
|
+
**예시 메시지**:
|
|
40
|
+
|
|
41
|
+
```
|
|
42
|
+
✅ CI 성공 🎉
|
|
43
|
+
모든 테스트, 빌드, 린팅이 성공적으로 완료되었습니다.
|
|
44
|
+
|
|
45
|
+
브랜치: main 커밋: a1b2c3d
|
|
46
|
+
테스트: ✅ 성공 빌드: ✅ 성공
|
|
47
|
+
린팅: ✅ 성공 작업자: tylersong
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
### 🚀 배포 알림 (publish.yml)
|
|
51
|
+
|
|
52
|
+
**전송 시점**: NPM 배포 완료 후
|
|
53
|
+
**포함 정보**:
|
|
54
|
+
|
|
55
|
+
- ✅/❌ 배포 결과
|
|
56
|
+
- 📦 새 버전 정보
|
|
57
|
+
- 🏷️ 배포 타입 (자동/태그)
|
|
58
|
+
- 🌿 브랜치/태그 정보
|
|
59
|
+
- 🔗 NPM 패키지 링크
|
|
60
|
+
- 💻 설치 명령어
|
|
61
|
+
- 👤 배포자 정보
|
|
62
|
+
|
|
63
|
+
**예시 메시지**:
|
|
64
|
+
|
|
65
|
+
```
|
|
66
|
+
🚀 패키지 배포 성공 🚀
|
|
67
|
+
tylersong v1.0.5이 NPM에 성공적으로 배포되었습니다!
|
|
68
|
+
|
|
69
|
+
버전: v1.0.5 배포 타입: Auto Deploy
|
|
70
|
+
브랜치/태그: main
|
|
71
|
+
|
|
72
|
+
NPM: tylersong 패키지
|
|
73
|
+
설치 명령어: npx tylersong
|
|
74
|
+
배포자: tylersong
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
## 🎨 Discord 메시지 스타일
|
|
78
|
+
|
|
79
|
+
### 색상 코드
|
|
80
|
+
|
|
81
|
+
- 🟢 **성공**: 초록색 (`00FF00`)
|
|
82
|
+
- 🔴 **실패**: 빨간색 (`FF0000`)
|
|
83
|
+
- 🟠 **취소**: 주황색 (`FFA500`)
|
|
84
|
+
- 🔵 **기본**: Discord 파란색 (`5865F2`)
|
|
85
|
+
|
|
86
|
+
### 이모지 사용
|
|
87
|
+
|
|
88
|
+
- ✅ 성공 작업
|
|
89
|
+
- ❌ 실패 작업
|
|
90
|
+
- ⚠️ 경고/취소
|
|
91
|
+
- 🎉 CI 성공
|
|
92
|
+
- 🚀 배포 성공
|
|
93
|
+
- 💥 오류 발생
|
|
94
|
+
|
|
95
|
+
## 🔧 고급 설정
|
|
96
|
+
|
|
97
|
+
### 알림 비활성화
|
|
98
|
+
|
|
99
|
+
Discord 알림을 일시적으로 비활성화하려면:
|
|
100
|
+
|
|
101
|
+
1. GitHub Secrets에서 `DISCORD_WEBHOOK_URL` 삭제 또는
|
|
102
|
+
2. Secret 값을 빈 문자열로 설정
|
|
103
|
+
|
|
104
|
+
### 커스텀 알림
|
|
105
|
+
|
|
106
|
+
특정 상황에서만 알림을 받고 싶다면 워크플로우 파일을 수정:
|
|
107
|
+
|
|
108
|
+
```yaml
|
|
109
|
+
- name: Send Discord notification
|
|
110
|
+
if: env.DISCORD_WEBHOOK_URL != '' && github.ref == 'refs/heads/main'
|
|
111
|
+
# main 브랜치에서만 알림
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
### 멘션 추가
|
|
115
|
+
|
|
116
|
+
특정 사용자나 역할을 멘션하려면 description에 추가:
|
|
117
|
+
|
|
118
|
+
```yaml
|
|
119
|
+
echo "description=<@사용자ID> 배포가 완료되었습니다!" >> $GITHUB_OUTPUT
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
## 🛠️ 트러블슈팅
|
|
123
|
+
|
|
124
|
+
### 알림이 오지 않는 경우
|
|
125
|
+
|
|
126
|
+
1. **Discord 웹후크 URL 확인**
|
|
127
|
+
|
|
128
|
+
- GitHub Secrets에 올바른 URL이 저장되었는지 확인
|
|
129
|
+
- 웹후크가 삭제되지 않았는지 Discord에서 확인
|
|
130
|
+
|
|
131
|
+
2. **권한 확인**
|
|
132
|
+
|
|
133
|
+
- 봇/웹후크가 해당 채널에 메시지를 보낼 권한이 있는지 확인
|
|
134
|
+
|
|
135
|
+
3. **워크플로우 로그 확인**
|
|
136
|
+
- GitHub Actions 로그에서 Discord 알림 단계 확인
|
|
137
|
+
- curl 명령어 실행 결과 확인
|
|
138
|
+
|
|
139
|
+
### 메시지 포맷 오류
|
|
140
|
+
|
|
141
|
+
JSON 구문 오류가 발생하면:
|
|
142
|
+
|
|
143
|
+
- 필드 값에 특수문자나 따옴표가 있는지 확인
|
|
144
|
+
- 멀티라인 텍스트는 적절히 이스케이프 처리
|
|
145
|
+
|
|
146
|
+
### 웹후크 제한사항
|
|
147
|
+
|
|
148
|
+
Discord 웹후크 제한사항:
|
|
149
|
+
|
|
150
|
+
- 요청당 최대 10개의 embeds
|
|
151
|
+
- Embed당 최대 25개의 fields
|
|
152
|
+
- 분당 30개 메시지 제한
|
|
153
|
+
|
|
154
|
+
## 📚 참고 자료
|
|
155
|
+
|
|
156
|
+
- [Discord Webhook 가이드](https://support.discord.com/hc/ko/articles/228383668)
|
|
157
|
+
- [Discord API - Webhook](https://discord.com/developers/docs/resources/webhook)
|
|
158
|
+
- [GitHub Actions - Secrets](https://docs.github.com/ko/actions/security-guides/encrypted-secrets)
|