tylersong 1.0.8 → 1.0.9

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,4 +1,4 @@
1
- name: Continuous Integration
1
+ name: CI
2
2
 
3
3
  on:
4
4
  push:
@@ -7,170 +7,39 @@ on:
7
7
  branches: [main, develop]
8
8
 
9
9
  jobs:
10
- test:
11
- name: Test
10
+ # 간소화된 CI - 핵심 검증만
11
+ ci:
12
+ name: Lint & Test
12
13
  runs-on: ubuntu-latest
13
-
14
- strategy:
15
- matrix:
16
- runtime: [node, bun]
17
-
14
+
18
15
  steps:
19
- - name: Checkout code
16
+ - name: Checkout
20
17
  uses: actions/checkout@v4
21
18
 
22
- - name: Setup runtime environment
23
- uses: ./.github/actions/setup-runtime
19
+ - name: Setup Node.js
20
+ uses: actions/setup-node@v4
24
21
  with:
25
- runtime: ${{ matrix.runtime }}
22
+ node-version: "20.x"
23
+ cache: "npm"
26
24
 
27
- - name: Run tests (Node.js)
28
- if: matrix.runtime == 'node'
29
- run: npm test
25
+ - name: Install
26
+ run: npm ci
30
27
 
31
- - name: Run tests (Bun)
32
- if: matrix.runtime == 'bun'
33
- run: bun test || echo "No bun tests specified"
28
+ - name: Type check
29
+ run: npx tsc --noEmit
30
+
31
+ - name: Build
32
+ run: npm run build
34
33
 
35
- - name: Test CLI functionality (Node.js)
36
- if: matrix.runtime == 'node'
34
+ - name: Test CLI
37
35
  run: |
38
- npm run build
39
36
  node dist/index.js --version
40
37
  node dist/index.js --help
41
38
 
42
- - name: Test CLI functionality (Bun)
43
- if: matrix.runtime == 'bun'
44
- run: |
45
- bun run build:bun
46
- bun run dist/index.js --version
47
- bun run dist/index.js --help
48
-
49
- build:
50
- name: Build & Upload Artifacts
51
- runs-on: ubuntu-latest
52
- needs: test
53
-
54
- steps:
55
- - name: Checkout code
56
- uses: actions/checkout@v4
57
-
58
- - name: Setup Node.js environment
59
- uses: ./.github/actions/setup-runtime
60
- with:
61
- runtime: node
62
-
63
- - name: Build TypeScript
64
- run: npm run build
65
-
66
- - name: Upload build artifacts
67
- uses: actions/upload-artifact@v4
68
- with:
69
- name: dist-files-${{ github.sha }}
70
- path: dist/
71
- retention-days: 30
72
-
73
- - name: Upload type definitions
74
- uses: actions/upload-artifact@v4
75
- with:
76
- name: types-${{ github.sha }}
77
- path: |
78
- dist/*.d.ts
79
- dist/*.d.ts.map
80
- retention-days: 30
81
-
82
- lint:
83
- name: Code Quality
84
- runs-on: ubuntu-latest
85
-
86
- steps:
87
- - name: Checkout code
88
- uses: actions/checkout@v4
89
-
90
- - name: Setup Node.js environment
91
- uses: ./.github/actions/setup-runtime
92
- with:
93
- runtime: node
94
-
95
- - name: Check TypeScript compilation
96
- run: npx tsc --noEmit
97
-
98
- - name: Check code formatting (if prettier is added)
99
- run: echo "Add prettier check here if needed"
100
-
101
39
  - name: Security audit
102
- run: npm audit --audit-level=moderate
40
+ run: npm audit --audit-level=moderate || true
103
41
 
104
- notify:
105
- name: Notify Results
106
- runs-on: ubuntu-latest
107
- needs: [test, build, lint]
108
- if: always()
109
-
110
- steps:
111
- - name: Checkout code
112
- uses: actions/checkout@v4
113
-
114
- - name: Determine overall status
115
- id: status
42
+ - name: Results
116
43
  run: |
117
- if [ "${{ needs.test.result }}" == "success" ] && [ "${{ needs.build.result }}" == "success" ] && [ "${{ needs.lint.result }}" == "success" ]; then
118
- echo "status=success" >> $GITHUB_OUTPUT
119
- echo "title=CI 성공 🎉" >> $GITHUB_OUTPUT
120
- echo "description=모든 테스트, 빌드, 린팅이 성공적으로 완료되었습니다." >> $GITHUB_OUTPUT
121
- else
122
- echo "status=failure" >> $GITHUB_OUTPUT
123
- echo "title=CI 실패 💥" >> $GITHUB_OUTPUT
124
- echo "description=CI 파이프라인에서 오류가 발생했습니다. 로그를 확인해주세요." >> $GITHUB_OUTPUT
125
- fi
126
-
127
- - name: Create fields JSON
128
- id: fields
129
- run: |
130
- FIELDS=$(cat << EOF
131
- [
132
- {
133
- "name": "브랜치",
134
- "value": "${{ github.ref_name }}",
135
- "inline": true
136
- },
137
- {
138
- "name": "커밋",
139
- "value": "[\`${GITHUB_SHA:0:7}\`](https://github.com/${{ github.repository }}/commit/${{ github.sha }})",
140
- "inline": true
141
- },
142
- {
143
- "name": "테스트",
144
- "value": "${{ needs.test.result == 'success' && '✅ 성공' || '❌ 실패' }}",
145
- "inline": true
146
- },
147
- {
148
- "name": "빌드",
149
- "value": "${{ needs.build.result == 'success' && '✅ 성공' || '❌ 실패' }}",
150
- "inline": true
151
- },
152
- {
153
- "name": "린팅",
154
- "value": "${{ needs.lint.result == 'success' && '✅ 성공' || '❌ 실패' }}",
155
- "inline": true
156
- },
157
- {
158
- "name": "작업자",
159
- "value": "${{ github.actor }}",
160
- "inline": true
161
- }
162
- ]
163
- EOF
164
- )
165
- echo "fields<<EOF" >> $GITHUB_OUTPUT
166
- echo "$FIELDS" >> $GITHUB_OUTPUT
167
- echo "EOF" >> $GITHUB_OUTPUT
168
-
169
- - name: Send Discord notification
170
- uses: ./.github/actions/discord-notify
171
- with:
172
- webhook-url: ${{ secrets.DISCORD_WEBHOOK_URL }}
173
- status: ${{ steps.status.outputs.status }}
174
- title: ${{ steps.status.outputs.title }}
175
- description: ${{ steps.status.outputs.description }}
176
- fields: ${{ steps.fields.outputs.fields }}
44
+ echo " All CI checks passed!"
45
+ echo "📦 Ready for deployment"
@@ -0,0 +1,170 @@
1
+ name: Deploy to NPM
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ tags: ["v*"]
7
+ pull_request:
8
+ branches: [main]
9
+
10
+ permissions:
11
+ contents: write
12
+ packages: write
13
+
14
+ jobs:
15
+ # 통합된 CI + 배포 작업
16
+ deploy:
17
+ name: CI & Deploy
18
+ runs-on: ubuntu-latest
19
+
20
+ steps:
21
+ # === 기본 Setup ===
22
+ - name: Checkout
23
+ uses: actions/checkout@v4
24
+ with:
25
+ token: ${{ secrets.GITHUB_TOKEN }}
26
+ fetch-depth: 0
27
+
28
+ - name: Setup Node.js
29
+ uses: actions/setup-node@v4
30
+ with:
31
+ node-version: "20.x"
32
+ registry-url: "https://registry.npmjs.org/"
33
+ cache: "npm"
34
+
35
+ - name: Install dependencies
36
+ run: npm ci
37
+
38
+ # === CI 단계 ===
39
+ - name: Type check
40
+ run: npx tsc --noEmit
41
+
42
+ - name: Build
43
+ run: npm run build
44
+
45
+ - name: Test CLI
46
+ run: |
47
+ node dist/index.js --version
48
+ node dist/index.js --help
49
+
50
+ - name: Security audit
51
+ run: npm audit --audit-level=moderate || true
52
+
53
+ # === 버전 관리 (main 브랜치만) ===
54
+ - name: Auto version update
55
+ if: github.ref == 'refs/heads/main' && github.event_name == 'push'
56
+ run: |
57
+ # Git 설정
58
+ git config user.name "github-actions[bot]"
59
+ git config user.email "github-actions[bot]@users.noreply.github.com"
60
+
61
+ CURRENT_VERSION=$(node -p "require('./package.json').version")
62
+ PUBLISHED_VERSION=$(npm view tylersong version 2>/dev/null || echo "0.0.0")
63
+
64
+ echo "📦 Current: $CURRENT_VERSION | Published: $PUBLISHED_VERSION"
65
+
66
+ # 같은 버전이면 자동 업데이트
67
+ if [ "$CURRENT_VERSION" == "$PUBLISHED_VERSION" ]; then
68
+ echo "🔄 Auto-updating version..."
69
+
70
+ # 커밋 메시지로 버전 타입 결정
71
+ COMMIT_MSG=$(git log -1 --pretty=%B)
72
+ if echo "$COMMIT_MSG" | grep -qE "BREAKING CHANGE|feat!|fix!"; then
73
+ VERSION_TYPE="major"
74
+ elif echo "$COMMIT_MSG" | grep -qE "^feat(\(.+\))?:"; then
75
+ VERSION_TYPE="minor"
76
+ else
77
+ VERSION_TYPE="patch"
78
+ fi
79
+
80
+ echo "📈 Version type: $VERSION_TYPE"
81
+
82
+ # 버전 업데이트
83
+ npm version $VERSION_TYPE --no-git-tag-version
84
+ NEW_VERSION=$(node -p "require('./package.json').version")
85
+
86
+ # 소스코드 버전 업데이트
87
+ if [ -f "src/index.ts" ]; then
88
+ sed -i.bak "s/program\.version(\".*\")/program.version(\"$NEW_VERSION\")/g" src/index.ts
89
+ rm -f src/index.ts.bak
90
+ fi
91
+
92
+ echo "✅ Updated to v$NEW_VERSION"
93
+ echo "NEW_VERSION=$NEW_VERSION" >> $GITHUB_ENV
94
+
95
+ # 재빌드 (버전 반영)
96
+ npm run build
97
+
98
+ # 커밋 & 푸시
99
+ git add package.json package-lock.json src/index.ts dist/
100
+ git commit -m "chore: bump version to v$NEW_VERSION [skip ci]"
101
+ git push origin main
102
+
103
+ echo "SHOULD_PUBLISH=true" >> $GITHUB_ENV
104
+ else
105
+ echo "✅ Version already updated"
106
+ echo "NEW_VERSION=$CURRENT_VERSION" >> $GITHUB_ENV
107
+ echo "SHOULD_PUBLISH=true" >> $GITHUB_ENV
108
+ fi
109
+
110
+ # === 태그 기반 배포 ===
111
+ - name: Tag deployment check
112
+ if: startsWith(github.ref, 'refs/tags/v')
113
+ run: |
114
+ VERSION=$(node -p "require('./package.json').version")
115
+ echo "🏷️ Tag deployment for v$VERSION"
116
+ echo "NEW_VERSION=$VERSION" >> $GITHUB_ENV
117
+ echo "SHOULD_PUBLISH=true" >> $GITHUB_ENV
118
+
119
+ # === NPM 배포 ===
120
+ - name: Publish to NPM
121
+ if: |
122
+ env.SHOULD_PUBLISH == 'true' &&
123
+ github.event_name != 'pull_request'
124
+ run: npm publish
125
+ env:
126
+ NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
127
+
128
+ # === GitHub Release (태그만) ===
129
+ - name: Create GitHub Release
130
+ if: startsWith(github.ref, 'refs/tags/v')
131
+ uses: actions/github-script@v7
132
+ with:
133
+ github-token: ${{ secrets.GITHUB_TOKEN }}
134
+ script: |
135
+ const version = process.env.NEW_VERSION;
136
+ const tagName = context.ref.replace('refs/tags/', '');
137
+
138
+ await github.rest.repos.createRelease({
139
+ owner: context.repo.owner,
140
+ repo: context.repo.repo,
141
+ tag_name: tagName,
142
+ name: `Release v${version}`,
143
+ body: `🚀 **tylersong CLI v${version}**
144
+
145
+ ### 설치
146
+ \`\`\`bash
147
+ npx tylersong
148
+ \`\`\`
149
+
150
+ ### 변경사항
151
+ 전체 변경사항은 [커밋 히스토리](https://github.com/${context.repo.owner}/${context.repo.repo}/commits/v${version})를 확인해주세요.`,
152
+ draft: false,
153
+ prerelease: false
154
+ });
155
+
156
+ # === 성공 알림 ===
157
+ - name: Success notification
158
+ if: success() && env.SHOULD_PUBLISH == 'true'
159
+ run: |
160
+ echo "🎉 Successfully deployed tylersong v${{ env.NEW_VERSION }}"
161
+ echo "📦 NPM: https://www.npmjs.com/package/tylersong"
162
+ echo "🚀 Install: npx tylersong"
163
+
164
+ # === 실패 알림 ===
165
+ - name: Failure notification
166
+ if: failure()
167
+ run: |
168
+ echo "❌ Deployment failed!"
169
+ echo "📋 Check the logs above for details"
170
+ exit 1
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # 📝 tylersong
2
2
 
3
- > 안녕하세요! 프론트엔드 개발자 **송민성**의 자기소개 CLI 도구입니다 ✨
3
+ > 안녕하세요! 개발자 **송민성**의 자기소개 CLI 도구입니다 ✨
4
4
 
5
5
  [![NPM Version](https://img.shields.io/npm/v/tylersong)](https://www.npmjs.com/package/tylersong)
6
6
  [![NPM Downloads](https://img.shields.io/npm/dm/tylersong)](https://www.npmjs.com/package/tylersong)
@@ -49,7 +49,7 @@ tylersong -g # GitHub 프로필 바로 열기 (단축)
49
49
  ╰───────────────────────────────────────────╯
50
50
 
51
51
  👋 안녕하세요!
52
- 💻 프론트엔드 개발자 송민성입니다.
52
+ 💻 개발자 송민성입니다.
53
53
 
54
54
  📌 Github: https://github.com/alstjd0051
55
55
  ✉️ E-mail: wsc7202@gmail.com
package/dist/index.js CHANGED
@@ -11,7 +11,7 @@ const openUrl = (url) => {
11
11
  : "xdg-open";
12
12
  exec(`${command} ${url}`);
13
13
  };
14
- program.version("1.0.8");
14
+ program.version("1.0.9");
15
15
  program.option("-g, --github", "GitHub 프로필 열기");
16
16
  program.parse(process.argv);
17
17
  const options = program.opts();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tylersong",
3
- "version": "1.0.8",
3
+ "version": "1.0.9",
4
4
  "description": "나의 CLI 자기소개 도구",
5
5
  "main": "dist/index.js",
6
6
  "bin": {
package/src/index.ts CHANGED
@@ -23,7 +23,7 @@ const openUrl = (url: string): void => {
23
23
  exec(`${command} ${url}`);
24
24
  };
25
25
 
26
- program.version("1.0.8");
26
+ program.version("1.0.9");
27
27
 
28
28
  program.option("-g, --github", "GitHub 프로필 열기");
29
29
 
@@ -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,116 +0,0 @@
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 로그인 상태를 확인하세요.
@@ -1,158 +0,0 @@
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)
@@ -1,142 +0,0 @@
1
- # GitHub Actions 수정 사항
2
-
3
- ## 🔧 주요 수정 내용
4
-
5
- ### 1. YAML 구조 문제 수정
6
-
7
- #### CI 워크플로우 (ci.yml)
8
- - **문제**: `lint` job이 `build` job 내부에 잘못 배치됨
9
- - **수정**: 올바른 들여쓰기로 독립적인 job으로 분리
10
-
11
- #### 배포 워크플로우 (publish.yml)
12
- - **문제**: `notify` job이 잘못된 들여쓰기
13
- - **수정**: 올바른 job 레벨로 수정
14
-
15
- ### 2. Job Dependency 문제 수정
16
-
17
- #### 문제점
18
- - `version-check` job이 항상 `check-ci`를 필요로 함
19
- - `check-ci`는 `workflow_run` 이벤트에서만 실행되어 다른 이벤트에서 오류 발생
20
-
21
- #### 수정 방안
22
- ```yaml
23
- check-ci:
24
- if: always() # 모든 이벤트에서 실행
25
- steps:
26
- - name: Check CI workflow status
27
- run: |
28
- if [ "${{ github.event_name }}" == "workflow_run" ]; then
29
- # workflow_run 이벤트에서만 CI 상태 체크
30
- else
31
- # 다른 이벤트에서는 성공으로 가정
32
- echo "success=true" >> $GITHUB_OUTPUT
33
- fi
34
- ```
35
-
36
- ### 3. Discord 알림 조건 수정
37
-
38
- #### 문제점
39
- - `if: env.DISCORD_WEBHOOK_URL != ''` 조건이 작동하지 않음
40
- - Environment variables는 secrets에 접근할 수 없음
41
-
42
- #### 수정 방안
43
- ```yaml
44
- - name: Send Discord notification
45
- if: secrets.DISCORD_WEBHOOK_URL != ''
46
- # secrets 직접 체크로 변경
47
- ```
48
-
49
- ### 4. Deprecated Action 대체
50
-
51
- #### 문제점
52
- - `actions/create-release@v1`은 deprecated됨
53
-
54
- #### 수정 방안
55
- ```yaml
56
- - name: Create GitHub Release
57
- uses: actions/github-script@v7
58
- with:
59
- script: |
60
- await github.rest.repos.createRelease({
61
- // 최신 API 사용
62
- });
63
- ```
64
-
65
- ### 5. Artifact 접근 문제 해결
66
-
67
- #### 문제점
68
- - `workflow_run` 이벤트에서 다른 워크플로우의 artifact 접근 어려움
69
-
70
- #### 수정 방안
71
- - 배포 시 직접 빌드하도록 변경
72
- - CI의 artifact 의존성 제거
73
-
74
- ### 6. Discord JSON 안전성 개선
75
-
76
- #### 문제점
77
- - 특수문자로 인한 JSON 파싱 오류 가능성
78
-
79
- #### 수정 방안
80
- ```bash
81
- # jq를 사용한 안전한 JSON 생성
82
- PAYLOAD=$(jq -n \
83
- --arg title "$TITLE" \
84
- --arg description "$DESCRIPTION" \
85
- '{embeds: [{title: $title, description: $description}]}')
86
- ```
87
-
88
- ## 🚀 개선된 기능
89
-
90
- ### 1. 안정성 향상
91
- - YAML 구문 오류 제거
92
- - Job dependency 안정화
93
- - JSON 파싱 오류 방지
94
-
95
- ### 2. 호환성 개선
96
- - 최신 GitHub Actions 사용
97
- - Deprecated action 제거
98
- - 모든 이벤트 타입 지원
99
-
100
- ### 3. 오류 처리 강화
101
- - curl 명령어에 오류 처리 추가
102
- - 빌드 artifact 검증 강화
103
- - 조건부 실행 로직 개선
104
-
105
- ## 📋 검증 체크리스트
106
-
107
- - [x] YAML 구문 오류 수정
108
- - [x] Job dependency 문제 해결
109
- - [x] Discord 알림 조건 수정
110
- - [x] Deprecated action 대체
111
- - [x] JSON 안전성 개선
112
- - [x] 오류 처리 강화
113
-
114
- ## 🔍 테스트 방법
115
-
116
- ### 1. CI 테스트
117
- ```bash
118
- # Pull Request 생성으로 CI 테스트
119
- git checkout -b test-ci
120
- git push origin test-ci
121
- # PR 생성 후 Actions 탭에서 확인
122
- ```
123
-
124
- ### 2. 배포 테스트
125
- ```bash
126
- # 버전 업데이트 후 main push
127
- npm version patch
128
- git push origin main
129
- # 자동 배포 확인
130
- ```
131
-
132
- ### 3. Discord 알림 테스트
133
- - Discord 웹훅 URL 설정 후
134
- - CI/배포 실행하여 알림 수신 확인
135
-
136
- ## 🛡️ 보안 고려사항
137
-
138
- 1. **Secret 관리**: Discord 웹훅 URL은 반드시 GitHub Secrets에 저장
139
- 2. **권한 최소화**: 필요한 최소 권한만 부여
140
- 3. **환경 분리**: Production 환경에서 안전한 배포
141
-
142
- 이제 GitHub Actions가 안정적으로 작동하며, 모든 이벤트 타입에서 정상적으로 실행됩니다.
package/docs/usage.md DELETED
@@ -1,112 +0,0 @@
1
- # tylersong CLI 사용법
2
-
3
- ## 설치
4
-
5
- NPX를 통해 바로 실행할 수 있습니다:
6
-
7
- ```bash
8
- npx tylersong
9
- ```
10
-
11
- ## 옵션
12
-
13
- ### 기본 사용법
14
-
15
- ```bash
16
- npx tylersong
17
- ```
18
-
19
- 인터랙티브 모드로 개발자 프로필 정보를 확인할 수 있습니다.
20
-
21
- ### 명령어 옵션
22
-
23
- - `-V, --version`: 버전 정보 출력
24
- - `-g, --github`: GitHub 프로필을 브라우저에서 바로 열기
25
- - `-h, --help`: 도움말 출력
26
-
27
- ### 예시
28
-
29
- ```bash
30
- # 버전 확인
31
- npx tylersong --version
32
-
33
- # GitHub 프로필 열기
34
- npx tylersong --github
35
-
36
- # 도움말 보기
37
- npx tylersong --help
38
- ```
39
-
40
- ## 개발
41
-
42
- ### TypeScript로 개발
43
-
44
- #### NPM 사용
45
-
46
- ```bash
47
- # 의존성 설치
48
- npm install
49
-
50
- # 개발 모드 실행
51
- npm run dev
52
-
53
- # 빌드
54
- npm run build
55
-
56
- # 빌드된 파일 실행
57
- npm start
58
- ```
59
-
60
- #### Bun 사용 (더 빠른 성능!)
61
-
62
- ```bash
63
- # 의존성 설치
64
- bun install
65
-
66
- # 개발 모드 실행 (TypeScript 직접 실행)
67
- bun run dev:bun
68
-
69
- # 빌드 (bun 번들러 사용)
70
- bun run build:bun
71
-
72
- # 빌드된 파일 실행
73
- bun run start:bun
74
-
75
- # 또는 TypeScript 소스를 직접 실행
76
- bun run src/index.ts
77
- ```
78
-
79
- ### 프로젝트 구조
80
-
81
- ```
82
- tylersong/
83
- ├── src/
84
- │ └── index.ts # 메인 TypeScript 소스 파일
85
- ├── dist/ # 빌드된 JavaScript 파일들
86
- ├── docs/ # 문서 파일들
87
- ├── package.json # 패키지 설정
88
- └── tsconfig.json # TypeScript 설정
89
- ```
90
-
91
- ## 기능
92
-
93
- - 🚀 개발자 프로필 정보 표시
94
- - 💻 GitHub 프로필 바로 열기
95
- - ✨ 터미널에서 색상과 아이콘으로 꾸며진 출력
96
- - 📧 이메일 연락처 정보 제공
97
-
98
- ## 배포
99
-
100
- 자세한 배포 가이드는 [docs/deployment.md](./deployment.md)를 참고해주세요.
101
-
102
- ### 빠른 배포
103
-
104
- ```bash
105
- # 패치 버전 업데이트 후 자동 배포
106
- npm version patch
107
- git push origin main
108
-
109
- # 또는 태그와 함께 즉시 배포
110
- npm version patch
111
- git push origin main --tags
112
- ```
package/docs/workflows.md DELETED
@@ -1,176 +0,0 @@
1
- # GitHub Actions 워크플로우 가이드
2
-
3
- 이 프로젝트는 모듈화된 GitHub Actions 워크플로우를 사용합니다.
4
-
5
- ## 📁 워크플로우 구조
6
-
7
- ```
8
- .github/
9
- ├── actions/
10
- │ └── setup-runtime/ # 재사용 가능한 컴포지트 액션
11
- │ └── action.yml
12
- └── workflows/
13
- ├── ci.yml # 지속적 통합 (테스트, 빌드, 린팅)
14
- └── publish.yml # NPM 배포
15
- ```
16
-
17
- ## 🔄 워크플로우 설명
18
-
19
- ### 1. Continuous Integration (ci.yml)
20
-
21
- **트리거:**
22
-
23
- - `main`, `develop` 브랜치로의 push
24
- - `main`, `develop` 브랜치로의 pull request
25
-
26
- **작업:**
27
-
28
- - **test**: Node.js와 Bun 환경에서 테스트 실행
29
- - **build**: TypeScript 빌드 및 아티팩트 업로드
30
- - **lint**: 코드 품질 검사, 타입 체크, 보안 감사
31
-
32
- ### 2. Publish to NPM (publish.yml)
33
-
34
- **트리거:**
35
-
36
- - `main` 브랜치로의 push
37
- - `v*` 형태의 태그 push
38
- - CI 워크플로우 완료 후 (workflow_run)
39
-
40
- **작업:**
41
-
42
- - **check-ci**: CI 워크플로우 성공 여부 확인
43
- - **version-check**: 버전 변경 사항 확인
44
- - **publish**: NPM에 패키지 배포
45
- - **notify**: 배포 결과 알림
46
-
47
- ## 🔧 재사용 가능한 액션
48
-
49
- ### setup-runtime
50
-
51
- Node.js 또는 Bun 런타임 환경을 설정하고 의존성을 설치합니다.
52
-
53
- **입력:**
54
-
55
- - `runtime`: 'node' 또는 'bun'
56
- - `node-version`: Node.js 버전 (기본: '20.x')
57
- - `bun-version`: Bun 버전 (기본: 'latest')
58
-
59
- **사용 예:**
60
-
61
- ```yaml
62
- - name: Setup runtime environment
63
- uses: ./.github/actions/setup-runtime
64
- with:
65
- runtime: node
66
- ```
67
-
68
- ### discord-notify
69
-
70
- Discord 웹후크를 통해 알림을 전송합니다.
71
-
72
- **입력:**
73
-
74
- - `webhook-url`: Discord 웹후크 URL (필수)
75
- - `status`: 워크플로우 상태 (success/failure/cancelled)
76
- - `title`: 알림 제목 (필수)
77
- - `description`: 알림 설명
78
- - `color`: Embed 색상 (hex, # 제외)
79
- - `fields`: 추가 필드 (JSON 배열)
80
-
81
- **사용 예:**
82
-
83
- ```yaml
84
- - name: Send Discord notification
85
- uses: ./.github/actions/discord-notify
86
- with:
87
- webhook-url: ${{ secrets.DISCORD_WEBHOOK_URL }}
88
- status: success
89
- title: "배포 완료!"
90
- description: "새 버전이 배포되었습니다."
91
- ```
92
-
93
- ## 🚀 배포 시나리오
94
-
95
- ### 자동 배포 (main 브랜치)
96
-
97
- 1. 코드를 `main` 브랜치에 push
98
- 2. CI 워크플로우 실행 (테스트, 빌드, 린팅)
99
- 3. CI 성공 시 배포 워크플로우 실행
100
- 4. package.json 버전이 NPM과 다르면 자동 배포
101
-
102
- ### 즉시 배포 (태그)
103
-
104
- 1. 버전 태그 push (`v1.0.5` 등)
105
- 2. CI와 배포 워크플로우 동시 실행
106
- 3. CI 성공 시 무조건 NPM에 배포
107
- 4. GitHub Release 자동 생성
108
-
109
- ### Pull Request
110
-
111
- 1. PR 생성 시 CI 워크플로우만 실행
112
- 2. 테스트, 빌드, 린팅 검사
113
- 3. 배포는 실행되지 않음 (dry-run만)
114
-
115
- ## 📋 워크플로우 흐름도
116
-
117
- ```mermaid
118
- graph TD
119
- A[코드 Push/PR] --> B[CI 워크플로우]
120
- B --> C{테스트 통과?}
121
- C -->|실패| D[❌ 빌드 실패]
122
- C -->|성공| E[빌드 & 아티팩트 업로드]
123
- E --> F{main 브랜치?}
124
- F -->|No| G[✅ CI 완료]
125
- F -->|Yes| H[배포 워크플로우]
126
- H --> I{버전 변경?}
127
- I -->|No| J[⏭️ 배포 스킵]
128
- I -->|Yes| K[NPM 배포]
129
- K --> L[✅ 배포 완료]
130
- ```
131
-
132
- ## ⚙️ 환경 설정
133
-
134
- ### GitHub Secrets
135
-
136
- Repository Settings → Secrets and variables → Actions에서 설정:
137
-
138
- - `NPM_TOKEN`: NPM 액세스 토큰
139
- - `DISCORD_WEBHOOK_URL`: Discord 웹후크 URL (선택사항)
140
- - `GITHUB_TOKEN`: 자동으로 제공됨 (Release 생성용)
141
-
142
- > 💬 **Discord 알림**: 자세한 설정은 [Discord 설정 가이드](./discord-setup.md)를 참고하세요.
143
-
144
- ### GitHub Environment
145
-
146
- `production` 환경 설정을 통해 배포 시 추가 보안 검토 가능
147
-
148
- ## 🔍 모니터링
149
-
150
- ### CI 상태 확인
151
-
152
- - Actions 탭에서 각 워크플로우 실행 상태 확인
153
- - 실패 시 로그를 통해 문제 진단
154
-
155
- ### 배포 상태 확인
156
-
157
- - NPM: https://www.npmjs.com/package/tylersong
158
- - GitHub Releases: 태그 배포 시 자동 생성
159
- - 알림 작업에서 성공/실패 상태 확인
160
-
161
- ## 🛠️ 트러블슈팅
162
-
163
- ### CI 실패 시
164
-
165
- 1. 테스트 실패: 코드 수정 후 재푸시
166
- 2. 빌드 실패: TypeScript 오류 확인
167
- 3. 린팅 실패: 코드 품질 이슈 해결
168
-
169
- ### 배포 실패 시
170
-
171
- 1. NPM_TOKEN 확인
172
- 2. package.json 버전 확인
173
- 3. 빌드 아티팩트 존재 확인
174
- 4. NPM 패키지명 중복 확인
175
-
176
- 이 구조를 통해 각 워크플로우의 책임이 명확히 분리되어 유지보수가 쉬워집니다.