tylersong 1.0.5 → 1.0.6
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/publish.yml +114 -26
- package/README.md +72 -27
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/docs/auto-deployment.md +191 -0
- package/docs/direct-deployment.md +116 -0
- package/package.json +1 -1
- package/src/index.ts +1 -1
|
@@ -9,6 +9,10 @@ on:
|
|
|
9
9
|
types: [completed]
|
|
10
10
|
branches: [main]
|
|
11
11
|
|
|
12
|
+
permissions:
|
|
13
|
+
contents: write
|
|
14
|
+
packages: write
|
|
15
|
+
|
|
12
16
|
jobs:
|
|
13
17
|
check-ci:
|
|
14
18
|
name: Check CI Status
|
|
@@ -33,56 +37,135 @@ jobs:
|
|
|
33
37
|
echo "success=true" >> $GITHUB_OUTPUT
|
|
34
38
|
fi
|
|
35
39
|
|
|
36
|
-
version
|
|
37
|
-
name:
|
|
40
|
+
auto-version:
|
|
41
|
+
name: Auto Version Update
|
|
38
42
|
runs-on: ubuntu-latest
|
|
39
43
|
if: |
|
|
40
44
|
(github.event_name == 'push' && github.ref == 'refs/heads/main') ||
|
|
41
|
-
startsWith(github.ref, 'refs/tags/v') ||
|
|
42
45
|
(github.event_name == 'workflow_run' && needs.check-ci.outputs.ci-success == 'true')
|
|
43
46
|
needs:
|
|
44
47
|
- check-ci
|
|
45
48
|
outputs:
|
|
46
|
-
should-publish: ${{ steps.version-
|
|
47
|
-
current-version: ${{ steps.version-
|
|
49
|
+
should-publish: ${{ steps.version-update.outputs.should-publish }}
|
|
50
|
+
current-version: ${{ steps.version-update.outputs.current-version }}
|
|
51
|
+
version-updated: ${{ steps.version-update.outputs.version-updated }}
|
|
48
52
|
|
|
49
53
|
steps:
|
|
50
54
|
- name: Checkout code
|
|
51
55
|
uses: actions/checkout@v4
|
|
56
|
+
with:
|
|
57
|
+
token: ${{ secrets.GITHUB_TOKEN }}
|
|
58
|
+
fetch-depth: 0
|
|
52
59
|
|
|
53
60
|
- name: Setup Node.js environment
|
|
54
61
|
uses: ./.github/actions/setup-runtime
|
|
55
62
|
with:
|
|
56
63
|
runtime: node
|
|
57
64
|
|
|
58
|
-
- name:
|
|
59
|
-
|
|
65
|
+
- name: Configure Git
|
|
66
|
+
run: |
|
|
67
|
+
git config user.name "github-actions[bot]"
|
|
68
|
+
git config user.email "github-actions[bot]@users.noreply.github.com"
|
|
69
|
+
|
|
70
|
+
- name: Auto version update and check
|
|
71
|
+
id: version-update
|
|
60
72
|
run: |
|
|
61
73
|
CURRENT_VERSION=$(node -p "require('./package.json').version")
|
|
62
74
|
PUBLISHED_VERSION=$(npm view tylersong version 2>/dev/null || echo "0.0.0")
|
|
63
|
-
|
|
64
|
-
echo "current-version=$CURRENT_VERSION" >> $GITHUB_OUTPUT
|
|
75
|
+
|
|
65
76
|
echo "Current version: $CURRENT_VERSION"
|
|
66
77
|
echo "Published version: $PUBLISHED_VERSION"
|
|
67
78
|
|
|
68
|
-
# Tag push는 항상 배포
|
|
79
|
+
# Tag push는 항상 배포 (버전 체크만)
|
|
69
80
|
if [[ "${{ github.ref }}" == refs/tags/v* ]]; then
|
|
70
81
|
echo "should-publish=true" >> $GITHUB_OUTPUT
|
|
71
|
-
echo "
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
82
|
+
echo "current-version=$CURRENT_VERSION" >> $GITHUB_OUTPUT
|
|
83
|
+
echo "version-updated=false" >> $GITHUB_OUTPUT
|
|
84
|
+
echo "Tag push detected: will publish without version update"
|
|
85
|
+
exit 0
|
|
86
|
+
fi
|
|
87
|
+
|
|
88
|
+
# 이미 같은 버전이 배포되어 있으면 자동으로 버전 업데이트
|
|
89
|
+
if [ "$CURRENT_VERSION" == "$PUBLISHED_VERSION" ]; then
|
|
90
|
+
echo "Same version exists, auto-updating version..."
|
|
91
|
+
|
|
92
|
+
# 최근 커밋 메시지 분석하여 semantic versioning 적용
|
|
93
|
+
LAST_COMMIT_MSG=$(git log -1 --pretty=%B)
|
|
94
|
+
echo "Last commit: $LAST_COMMIT_MSG"
|
|
95
|
+
|
|
96
|
+
# 커밋 메시지에 따라 버전 업데이트 타입 결정
|
|
97
|
+
if echo "$LAST_COMMIT_MSG" | grep -qE "BREAKING CHANGE|feat!|fix!"; then
|
|
98
|
+
VERSION_TYPE="major"
|
|
99
|
+
elif echo "$LAST_COMMIT_MSG" | grep -qE "^feat(\(.+\))?:"; then
|
|
100
|
+
VERSION_TYPE="minor"
|
|
101
|
+
else
|
|
102
|
+
VERSION_TYPE="patch"
|
|
103
|
+
fi
|
|
104
|
+
|
|
105
|
+
echo "Detected version type: $VERSION_TYPE"
|
|
106
|
+
|
|
107
|
+
# package.json 버전 업데이트
|
|
108
|
+
npm version $VERSION_TYPE --no-git-tag-version
|
|
109
|
+
NEW_VERSION=$(node -p "require('./package.json').version")
|
|
110
|
+
|
|
111
|
+
# TypeScript 소스 코드의 하드코딩된 버전도 업데이트
|
|
112
|
+
if [ -f "src/index.ts" ]; then
|
|
113
|
+
sed -i.bak "s/program\.version(\".*\")/program.version(\"$NEW_VERSION\")/g" src/index.ts
|
|
114
|
+
rm -f src/index.ts.bak
|
|
115
|
+
fi
|
|
116
|
+
|
|
117
|
+
echo "Updated version to: $NEW_VERSION"
|
|
118
|
+
echo "current-version=$NEW_VERSION" >> $GITHUB_OUTPUT
|
|
119
|
+
echo "should-publish=true" >> $GITHUB_OUTPUT
|
|
120
|
+
echo "version-updated=true" >> $GITHUB_OUTPUT
|
|
121
|
+
|
|
122
|
+
# 변경사항 커밋 및 푸시
|
|
123
|
+
git add package.json package-lock.json src/index.ts
|
|
124
|
+
git commit -m "chore: bump version to v$NEW_VERSION [skip ci]"
|
|
125
|
+
git push origin main
|
|
126
|
+
|
|
76
127
|
else
|
|
77
|
-
echo "
|
|
78
|
-
echo "
|
|
128
|
+
echo "Version already different: will publish"
|
|
129
|
+
echo "current-version=$CURRENT_VERSION" >> $GITHUB_OUTPUT
|
|
130
|
+
echo "should-publish=true" >> $GITHUB_OUTPUT
|
|
131
|
+
echo "version-updated=false" >> $GITHUB_OUTPUT
|
|
79
132
|
fi
|
|
80
133
|
|
|
134
|
+
version-check:
|
|
135
|
+
name: Check Version Changes (for tags)
|
|
136
|
+
runs-on: ubuntu-latest
|
|
137
|
+
if: startsWith(github.ref, 'refs/tags/v')
|
|
138
|
+
outputs:
|
|
139
|
+
should-publish: ${{ steps.version-check.outputs.should-publish }}
|
|
140
|
+
current-version: ${{ steps.version-check.outputs.current-version }}
|
|
141
|
+
|
|
142
|
+
steps:
|
|
143
|
+
- name: Checkout code
|
|
144
|
+
uses: actions/checkout@v4
|
|
145
|
+
|
|
146
|
+
- name: Setup Node.js environment
|
|
147
|
+
uses: ./.github/actions/setup-runtime
|
|
148
|
+
with:
|
|
149
|
+
runtime: node
|
|
150
|
+
|
|
151
|
+
- name: Check version for tag
|
|
152
|
+
id: version-check
|
|
153
|
+
run: |
|
|
154
|
+
CURRENT_VERSION=$(node -p "require('./package.json').version")
|
|
155
|
+
echo "current-version=$CURRENT_VERSION" >> $GITHUB_OUTPUT
|
|
156
|
+
echo "should-publish=true" >> $GITHUB_OUTPUT
|
|
157
|
+
echo "Tag push detected: will publish"
|
|
158
|
+
|
|
81
159
|
publish:
|
|
82
160
|
name: Publish Package
|
|
83
161
|
runs-on: ubuntu-latest
|
|
84
|
-
needs: [version-check]
|
|
85
|
-
if:
|
|
162
|
+
needs: [auto-version, version-check]
|
|
163
|
+
if: |
|
|
164
|
+
always() &&
|
|
165
|
+
(
|
|
166
|
+
(needs.auto-version.outputs.should-publish == 'true') ||
|
|
167
|
+
(needs.version-check.outputs.should-publish == 'true')
|
|
168
|
+
)
|
|
86
169
|
|
|
87
170
|
steps:
|
|
88
171
|
- name: Checkout code
|
|
@@ -126,7 +209,7 @@ jobs:
|
|
|
126
209
|
script: |
|
|
127
210
|
const { owner, repo } = context.repo;
|
|
128
211
|
const tagName = context.ref.replace('refs/tags/', '');
|
|
129
|
-
const version = '${{ needs.version-check.outputs.current-version }}';
|
|
212
|
+
const version = '${{ needs.auto-version.outputs.current-version || needs.version-check.outputs.current-version }}';
|
|
130
213
|
|
|
131
214
|
await github.rest.repos.createRelease({
|
|
132
215
|
owner,
|
|
@@ -149,8 +232,13 @@ jobs:
|
|
|
149
232
|
notify:
|
|
150
233
|
name: Notification
|
|
151
234
|
runs-on: ubuntu-latest
|
|
152
|
-
needs: [publish, version-check]
|
|
153
|
-
if:
|
|
235
|
+
needs: [publish, auto-version, version-check]
|
|
236
|
+
if: |
|
|
237
|
+
always() &&
|
|
238
|
+
(
|
|
239
|
+
(needs.auto-version.outputs.should-publish == 'true') ||
|
|
240
|
+
(needs.version-check.outputs.should-publish == 'true')
|
|
241
|
+
)
|
|
154
242
|
|
|
155
243
|
steps:
|
|
156
244
|
- name: Checkout code
|
|
@@ -162,11 +250,11 @@ jobs:
|
|
|
162
250
|
if [ "${{ needs.publish.result }}" == "success" ]; then
|
|
163
251
|
echo "status=success" >> $GITHUB_OUTPUT
|
|
164
252
|
echo "title=패키지 배포 성공 🚀" >> $GITHUB_OUTPUT
|
|
165
|
-
echo "description=tylersong v${{ needs.version-check.outputs.current-version }}이 NPM에 성공적으로 배포되었습니다!" >> $GITHUB_OUTPUT
|
|
253
|
+
echo "description=tylersong v${{ needs.auto-version.outputs.current-version || needs.version-check.outputs.current-version }}이 NPM에 성공적으로 배포되었습니다!" >> $GITHUB_OUTPUT
|
|
166
254
|
else
|
|
167
255
|
echo "status=failure" >> $GITHUB_OUTPUT
|
|
168
256
|
echo "title=패키지 배포 실패 💥" >> $GITHUB_OUTPUT
|
|
169
|
-
echo "description=tylersong v${{ needs.version-check.outputs.current-version }} 배포 중 오류가 발생했습니다." >> $GITHUB_OUTPUT
|
|
257
|
+
echo "description=tylersong v${{ needs.auto-version.outputs.current-version || needs.version-check.outputs.current-version }} 배포 중 오류가 발생했습니다." >> $GITHUB_OUTPUT
|
|
170
258
|
fi
|
|
171
259
|
|
|
172
260
|
- name: Create fields JSON
|
|
@@ -177,7 +265,7 @@ jobs:
|
|
|
177
265
|
[
|
|
178
266
|
{
|
|
179
267
|
"name": "버전",
|
|
180
|
-
"value": "v${{ needs.version-check.outputs.current-version }}",
|
|
268
|
+
"value": "v${{ needs.auto-version.outputs.current-version || needs.version-check.outputs.current-version }}",
|
|
181
269
|
"inline": true
|
|
182
270
|
},
|
|
183
271
|
{
|
|
@@ -224,7 +312,7 @@ jobs:
|
|
|
224
312
|
- name: Console output
|
|
225
313
|
run: |
|
|
226
314
|
if [ "${{ needs.publish.result }}" == "success" ]; then
|
|
227
|
-
echo "✅ Package v${{ needs.version-check.outputs.current-version }} published successfully!"
|
|
315
|
+
echo "✅ Package v${{ needs.auto-version.outputs.current-version || needs.version-check.outputs.current-version }} published successfully!"
|
|
228
316
|
echo "📦 NPM: https://www.npmjs.com/package/tylersong"
|
|
229
317
|
else
|
|
230
318
|
echo "❌ Package publish failed!"
|
package/README.md
CHANGED
|
@@ -1,47 +1,92 @@
|
|
|
1
|
-
# tylersong
|
|
1
|
+
# 📝 tylersong
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
> 안녕하세요! 프론트엔드 개발자 **송민성**의 자기소개 CLI 도구입니다 ✨
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
[](https://www.npmjs.com/package/tylersong)
|
|
6
|
+
[](https://www.npmjs.com/package/tylersong)
|
|
7
|
+
[](https://opensource.org/licenses/MIT)
|
|
6
8
|
|
|
7
|
-
|
|
9
|
+
터미널에서 간단한 명령어로 개발자 프로필을 확인하고, GitHub 링크에 빠르게 접근할 수 있습니다.
|
|
8
10
|
|
|
11
|
+
## 🚀 빠른 시작
|
|
12
|
+
|
|
13
|
+
### 즉시 실행 (권장)
|
|
9
14
|
```bash
|
|
10
15
|
npx tylersong
|
|
11
16
|
```
|
|
12
17
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
- **Discord 알림**: [docs/discord-setup.md](./docs/discord-setup.md)
|
|
19
|
-
- **GitHub Actions 수정사항**: [docs/github-actions-fixes.md](./docs/github-actions-fixes.md)
|
|
18
|
+
### 전역 설치
|
|
19
|
+
```bash
|
|
20
|
+
npm install -g tylersong
|
|
21
|
+
tylersong
|
|
22
|
+
```
|
|
20
23
|
|
|
21
|
-
##
|
|
24
|
+
## 💻 사용법
|
|
22
25
|
|
|
23
|
-
###
|
|
26
|
+
### 기본 실행
|
|
27
|
+
```bash
|
|
28
|
+
tylersong
|
|
29
|
+
# ✨ 저에 대해 궁금하신가요? 라는 질문에 답하면 프로필이 표시됩니다
|
|
30
|
+
```
|
|
24
31
|
|
|
32
|
+
### 명령어 옵션
|
|
25
33
|
```bash
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
34
|
+
tylersong --help # 도움말 보기
|
|
35
|
+
tylersong --version # 버전 정보 확인
|
|
36
|
+
tylersong --github # GitHub 프로필 바로 열기
|
|
37
|
+
tylersong -g # GitHub 프로필 바로 열기 (단축)
|
|
29
38
|
```
|
|
30
39
|
|
|
31
|
-
|
|
40
|
+
## 🎨 스크린샷
|
|
32
41
|
|
|
33
|
-
```bash
|
|
34
|
-
bun install
|
|
35
|
-
bun run dev:bun # TypeScript 직접 실행
|
|
36
|
-
bun run build:bun # bun 번들러로 빌드
|
|
37
|
-
bun run src/index.ts # 소스 직접 실행
|
|
38
42
|
```
|
|
43
|
+
╭───────────────────────────────────────────╮
|
|
44
|
+
│ 🚀 Frontend Developer Profile 🚀 │
|
|
45
|
+
╰───────────────────────────────────────────╯
|
|
46
|
+
|
|
47
|
+
👋 안녕하세요!
|
|
48
|
+
💻 프론트엔드 개발자 송민성입니다.
|
|
49
|
+
|
|
50
|
+
📌 Github: https://github.com/alstjd0051
|
|
51
|
+
✉️ E-mail: wsc7202@gmail.com
|
|
52
|
+
|
|
53
|
+
💡 더 많은 정보는 --help를 통해 확인해주세요.
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
## 👨💻 개발자 정보
|
|
57
|
+
|
|
58
|
+
- **이름**: 송민성 (Tyler Song)
|
|
59
|
+
- **직업**: Frontend Developer
|
|
60
|
+
- **GitHub**: [@alstjd0051](https://github.com/alstjd0051)
|
|
61
|
+
- **Email**: wsc7202@gmail.com
|
|
62
|
+
|
|
63
|
+
## 🛠️ 기술 스택
|
|
64
|
+
|
|
65
|
+
이 CLI 도구는 다음 기술로 제작되었습니다:
|
|
66
|
+
- **TypeScript** - 타입 안전성
|
|
67
|
+
- **Node.js** - 크로스 플랫폼 실행
|
|
68
|
+
- **Commander.js** - CLI 인터페이스
|
|
69
|
+
- **Inquirer.js** - 대화형 프롬프트
|
|
70
|
+
- **Chalk** - 터미널 색상 및 스타일링
|
|
71
|
+
|
|
72
|
+
## 📦 패키지 정보
|
|
73
|
+
|
|
74
|
+
- **크기**: 작고 가벼운 패키지 (~20KB)
|
|
75
|
+
- **의존성**: 최소한의 검증된 의존성만 사용
|
|
76
|
+
- **호환성**: Node.js 14+ 지원
|
|
77
|
+
- **플랫폼**: Windows, macOS, Linux 모두 지원
|
|
78
|
+
|
|
79
|
+
## 🤝 피드백 및 연락
|
|
80
|
+
|
|
81
|
+
버그 리포트나 기능 제안은 언제든 환영합니다!
|
|
82
|
+
|
|
83
|
+
- **GitHub Issues**: [npm_readMe/issues](https://github.com/alstjd0051/npm_readMe/issues)
|
|
84
|
+
- **Email**: wsc7202@gmail.com
|
|
39
85
|
|
|
40
|
-
##
|
|
86
|
+
## 📄 라이센스
|
|
41
87
|
|
|
42
|
-
|
|
43
|
-
2. 태그와 함께 GitHub에 푸시: `git push origin main --tags`
|
|
88
|
+
MIT License - 자유롭게 사용하세요!
|
|
44
89
|
|
|
45
|
-
|
|
90
|
+
---
|
|
46
91
|
|
|
47
|
-
|
|
92
|
+
**Made with ❤️ by Tyler Song**
|
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.
|
|
14
|
+
program.version("1.0.6");
|
|
15
15
|
program.option("-g, --github", "GitHub 프로필 열기");
|
|
16
16
|
program.parse(process.argv);
|
|
17
17
|
const options = program.opts();
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAUrC,MAAM,OAAO,GAAG,CAAC,GAAW,EAAQ,EAAE;IACpC,MAAM,OAAO,GACX,OAAO,CAAC,QAAQ,KAAK,OAAO;QAC1B,CAAC,CAAC,OAAO;QACT,CAAC,CAAC,OAAO,CAAC,QAAQ,KAAK,QAAQ;YAC/B,CAAC,CAAC,MAAM;YACR,CAAC,CAAC,UAAU,CAAC;IACjB,IAAI,CAAC,GAAG,OAAO,IAAI,GAAG,EAAE,CAAC,CAAC;AAC5B,CAAC,CAAC;AAEF,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAUrC,MAAM,OAAO,GAAG,CAAC,GAAW,EAAQ,EAAE;IACpC,MAAM,OAAO,GACX,OAAO,CAAC,QAAQ,KAAK,OAAO;QAC1B,CAAC,CAAC,OAAO;QACT,CAAC,CAAC,OAAO,CAAC,QAAQ,KAAK,QAAQ;YAC/B,CAAC,CAAC,MAAM;YACR,CAAC,CAAC,UAAU,CAAC;IACjB,IAAI,CAAC,GAAG,OAAO,IAAI,GAAG,EAAE,CAAC,CAAC;AAC5B,CAAC,CAAC;AAEF,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AAEzB,OAAO,CAAC,MAAM,CAAC,cAAc,EAAE,eAAe,CAAC,CAAC;AAEhD,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAE5B,MAAM,OAAO,GAAmB,OAAO,CAAC,IAAI,EAAE,CAAC;AAE/C,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;IACpC,IAAI,OAAO,CAAC,MAAM;QAAE,OAAO,CAAC,+BAA+B,CAAC,CAAC;IAC7D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,IAAI,GAAG,KAAK,IAAmB,EAAE;IACrC,YAAY;IACZ,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QACpC,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,MAAM,CAAC;;;;;;;;;;;KAWd,CAAC,CACD,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,SAAS;IACT,MAAM,MAAM,GAAe,MAAM,QAAQ,CAAC,MAAM,CAAC;QAC/C;YACE,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,UAAU;YAChB,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC;YACtC,OAAO,EAAE,IAAI;SACd;KACF,CAAC,CAAC;IAEH,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QACpB,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;;;;;OAKf,CAAC;YACA,KAAK,CAAC,KAAK,CAAC;qBACC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;;OAEtC,CAAC;YACA,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,cAAc,KAAK,CAAC,SAAS,CAAC,WAAW,CAC5D,+BAA+B,CAChC;OACF,CAAC;YACA,KAAK,CAAC,IAAI,CAAC,eAAe,KAAK,CAAC,SAAS,CAAC,WAAW,CACnD,mBAAmB,CACpB;OACF,CAAC;YACA,KAAK,CAAC,OAAO,CAAC;oBACF,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC;OACjC,CAAC,CACH,CAAC;IACJ,CAAC;AACH,CAAC,CAAC;AAEF,IAAI,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC"}
|
|
@@ -0,0 +1,191 @@
|
|
|
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에 배포됩니다! 🚀
|
|
@@ -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 로그인 상태를 확인하세요.
|
package/package.json
CHANGED