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.
- package/.github/workflows/ci.yml +22 -153
- package/.github/workflows/deploy.yml +170 -0
- package/README.md +2 -2
- package/dist/index.js +1 -1
- package/package.json +1 -1
- package/src/index.ts +1 -1
- package/docs/auto-deployment.md +0 -191
- package/docs/deployment.md +0 -82
- package/docs/direct-deployment.md +0 -116
- package/docs/discord-setup.md +0 -158
- package/docs/github-actions-fixes.md +0 -142
- package/docs/usage.md +0 -112
- package/docs/workflows.md +0 -176
package/.github/workflows/ci.yml
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
name:
|
|
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
|
-
|
|
11
|
-
|
|
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
|
|
16
|
+
- name: Checkout
|
|
20
17
|
uses: actions/checkout@v4
|
|
21
18
|
|
|
22
|
-
- name: Setup
|
|
23
|
-
uses:
|
|
19
|
+
- name: Setup Node.js
|
|
20
|
+
uses: actions/setup-node@v4
|
|
24
21
|
with:
|
|
25
|
-
|
|
22
|
+
node-version: "20.x"
|
|
23
|
+
cache: "npm"
|
|
26
24
|
|
|
27
|
-
- name:
|
|
28
|
-
|
|
29
|
-
run: npm test
|
|
25
|
+
- name: Install
|
|
26
|
+
run: npm ci
|
|
30
27
|
|
|
31
|
-
- name:
|
|
32
|
-
|
|
33
|
-
|
|
28
|
+
- name: Type check
|
|
29
|
+
run: npx tsc --noEmit
|
|
30
|
+
|
|
31
|
+
- name: Build
|
|
32
|
+
run: npm run build
|
|
34
33
|
|
|
35
|
-
- name: Test CLI
|
|
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
|
-
|
|
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
|
-
|
|
118
|
-
|
|
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
|
-
> 안녕하세요!
|
|
3
|
+
> 안녕하세요! 개발자 **송민성**의 자기소개 CLI 도구입니다 ✨
|
|
4
4
|
|
|
5
5
|
[](https://www.npmjs.com/package/tylersong)
|
|
6
6
|
[](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
package/package.json
CHANGED
package/src/index.ts
CHANGED
package/docs/auto-deployment.md
DELETED
|
@@ -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에 배포됩니다! 🚀
|
package/docs/deployment.md
DELETED
|
@@ -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 로그인 상태를 확인하세요.
|
package/docs/discord-setup.md
DELETED
|
@@ -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
|
-
이 구조를 통해 각 워크플로우의 책임이 명확히 분리되어 유지보수가 쉬워집니다.
|