@vv0rkz/js-template 1.6.4 → 1.8.0
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/README.md +224 -150
- package/bin/cli.js +227 -196
- package/bin/init.js +244 -236
- package/package.json +1 -1
- package/templates/.husky/commit-msg +3 -64
- package/templates/.husky/post-commit +3 -25
- package/templates/.husky/pre-push +3 -17
- package/templates/changelog.config.js +16 -9
- package/templates/commitlint.config.js +13 -6
- package/templates/jst.config.js +125 -0
- package/tools-gh/check-demo-for-release.js +36 -30
- package/tools-gh/config.js +126 -0
- package/tools-gh/post-commit-hook.js +40 -0
- package/tools-gh/release.js +120 -102
- package/tools-gh/report-issue.js +32 -0
- package/tools-gh/setup-deps.js +59 -0
- package/tools-gh/setup-labels.js +53 -58
- package/tools-gh/upgrade.js +72 -0
- package/tools-gh/validate-branch.js +33 -0
- package/tools-gh/validate-commit.js +86 -0
package/bin/cli.js
CHANGED
|
@@ -1,196 +1,227 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import { spawnSync } from 'child_process'
|
|
3
|
-
import { platform } from 'os'
|
|
4
|
-
import { dirname, join } from 'path'
|
|
5
|
-
import { fileURLToPath } from 'url'
|
|
6
|
-
|
|
7
|
-
const __dirname = dirname(fileURLToPath(import.meta.url))
|
|
8
|
-
const toolsDir = join(__dirname, '../tools-gh')
|
|
9
|
-
|
|
10
|
-
const args = process.argv.slice(2)
|
|
11
|
-
const command = args[0]
|
|
12
|
-
const commandArgs = args.slice(1)
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
const
|
|
16
|
-
const
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
spawnSync('
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
}
|
|
63
|
-
},
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
console.log(
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { spawnSync } from 'child_process'
|
|
3
|
+
import { platform } from 'os'
|
|
4
|
+
import { dirname, join } from 'path'
|
|
5
|
+
import { fileURLToPath } from 'url'
|
|
6
|
+
|
|
7
|
+
const __dirname = dirname(fileURLToPath(import.meta.url))
|
|
8
|
+
const toolsDir = join(__dirname, '../tools-gh')
|
|
9
|
+
|
|
10
|
+
const args = process.argv.slice(2)
|
|
11
|
+
const command = args[0]
|
|
12
|
+
const commandArgs = args.slice(1)
|
|
13
|
+
|
|
14
|
+
const isWin = platform() === 'win32'
|
|
15
|
+
const npxCmd = isWin ? 'npx.cmd' : 'npx'
|
|
16
|
+
const ghCmd = isWin ? 'gh.exe' : 'gh'
|
|
17
|
+
|
|
18
|
+
const commands = {
|
|
19
|
+
init: () => {
|
|
20
|
+
const initScript = join(__dirname, 'init.js')
|
|
21
|
+
spawnSync('node', [initScript], { stdio: 'inherit' })
|
|
22
|
+
},
|
|
23
|
+
|
|
24
|
+
'init-readme': () => {
|
|
25
|
+
spawnSync('node', [join(toolsDir, 'init-readme.js')], { stdio: 'inherit' })
|
|
26
|
+
},
|
|
27
|
+
|
|
28
|
+
'setup-labels': () => {
|
|
29
|
+
spawnSync('node', [join(toolsDir, 'setup-labels.js')], { stdio: 'inherit' })
|
|
30
|
+
},
|
|
31
|
+
|
|
32
|
+
changelog: () => {
|
|
33
|
+
spawnSync(npxCmd, ['changelogen', ...commandArgs], { stdio: 'inherit' })
|
|
34
|
+
},
|
|
35
|
+
|
|
36
|
+
release: () => {
|
|
37
|
+
spawnSync('node', [join(toolsDir, 'release.js')], { stdio: 'inherit' })
|
|
38
|
+
},
|
|
39
|
+
|
|
40
|
+
'update-readme': () => {
|
|
41
|
+
spawnSync('node', [join(toolsDir, 'update-readme.js')], { stdio: 'inherit' })
|
|
42
|
+
},
|
|
43
|
+
|
|
44
|
+
'push-release': () => {
|
|
45
|
+
spawnSync('node', [join(toolsDir, 'push-release-to-main.js')], { stdio: 'inherit' })
|
|
46
|
+
},
|
|
47
|
+
|
|
48
|
+
bugs: () => {
|
|
49
|
+
spawnSync(ghCmd, ['issue', 'list', '--label', 'bug', '--state', 'open'], { stdio: 'inherit' })
|
|
50
|
+
},
|
|
51
|
+
|
|
52
|
+
'create-bug': () => {
|
|
53
|
+
if (commandArgs.length === 0) {
|
|
54
|
+
spawnSync('node', [join(toolsDir, 'create-bug.js')], { stdio: 'inherit' })
|
|
55
|
+
} else {
|
|
56
|
+
const title = commandArgs.join(' ')
|
|
57
|
+
spawnSync(ghCmd, ['issue', 'create', '--label', 'bug', '--title', title], { stdio: 'inherit' })
|
|
58
|
+
}
|
|
59
|
+
},
|
|
60
|
+
|
|
61
|
+
tasks: () => {
|
|
62
|
+
spawnSync(ghCmd, ['issue', 'list', '--label', 'task', '--state', 'open'], { stdio: 'inherit' })
|
|
63
|
+
},
|
|
64
|
+
|
|
65
|
+
'create-task': () => {
|
|
66
|
+
if (commandArgs.length === 0) {
|
|
67
|
+
spawnSync('node', [join(toolsDir, 'create-task.js')], { stdio: 'inherit' })
|
|
68
|
+
} else {
|
|
69
|
+
const title = commandArgs.join(' ')
|
|
70
|
+
spawnSync(ghCmd, ['issue', 'create', '--label', 'task', '--title', title], { stdio: 'inherit' })
|
|
71
|
+
}
|
|
72
|
+
},
|
|
73
|
+
|
|
74
|
+
'create-refactor': () => {
|
|
75
|
+
const args = process.argv.slice(3)
|
|
76
|
+
spawnSync('node', [join(toolsDir, 'create-refactor.js'), ...args], { stdio: 'inherit' })
|
|
77
|
+
},
|
|
78
|
+
|
|
79
|
+
refactors: () => {
|
|
80
|
+
spawnSync(ghCmd, ['issue', 'list', '--label', 'refactor'], { stdio: 'inherit' })
|
|
81
|
+
},
|
|
82
|
+
|
|
83
|
+
'create-perf': () => {
|
|
84
|
+
const args = process.argv.slice(3)
|
|
85
|
+
spawnSync('node', [join(toolsDir, 'create-perf.js'), ...args], { stdio: 'inherit' })
|
|
86
|
+
},
|
|
87
|
+
|
|
88
|
+
perfs: () => {
|
|
89
|
+
spawnSync(ghCmd, ['issue', 'list', '--label', 'perf'], { stdio: 'inherit' })
|
|
90
|
+
},
|
|
91
|
+
|
|
92
|
+
'all-issues': () => {
|
|
93
|
+
spawnSync(ghCmd, ['issue', 'list', '--state', 'open'], { stdio: 'inherit' })
|
|
94
|
+
},
|
|
95
|
+
|
|
96
|
+
'report-issue': () => {
|
|
97
|
+
spawnSync('node', [join(toolsDir, 'report-issue.js'), ...commandArgs], { stdio: 'inherit' })
|
|
98
|
+
},
|
|
99
|
+
|
|
100
|
+
'setup-deps': () => {
|
|
101
|
+
spawnSync('node', [join(toolsDir, 'setup-deps.js')], { stdio: 'inherit' })
|
|
102
|
+
},
|
|
103
|
+
|
|
104
|
+
upgrade: () => {
|
|
105
|
+
spawnSync('node', [join(toolsDir, 'upgrade.js')], { stdio: 'inherit' })
|
|
106
|
+
},
|
|
107
|
+
|
|
108
|
+
apply: () => {
|
|
109
|
+
console.log('⚙️ Применение jst.config.js...\n')
|
|
110
|
+
spawnSync('node', [join(toolsDir, 'setup-labels.js')], { stdio: 'inherit' })
|
|
111
|
+
spawnSync('node', [join(toolsDir, 'setup-deps.js')], { stdio: 'inherit' })
|
|
112
|
+
console.log('\n✅ Конфиг применён!')
|
|
113
|
+
},
|
|
114
|
+
|
|
115
|
+
'pr-list': () => {
|
|
116
|
+
console.log('📋 Список Pull Requests...\n')
|
|
117
|
+
spawnSync(ghCmd, ['pr', 'list'], { stdio: 'inherit' })
|
|
118
|
+
},
|
|
119
|
+
|
|
120
|
+
'pr-view': () => {
|
|
121
|
+
const prNumber = process.argv[3]
|
|
122
|
+
if (!prNumber) {
|
|
123
|
+
console.log('❌ Укажи номер PR: npm run _ pr-view 5')
|
|
124
|
+
process.exit(1)
|
|
125
|
+
}
|
|
126
|
+
console.log(`👀 Просмотр PR #${prNumber}...\n`)
|
|
127
|
+
spawnSync(ghCmd, ['pr', 'view', prNumber], { stdio: 'inherit' })
|
|
128
|
+
},
|
|
129
|
+
|
|
130
|
+
'pr-view-web': () => {
|
|
131
|
+
const prNumber = process.argv[3]
|
|
132
|
+
if (!prNumber) {
|
|
133
|
+
console.log('❌ Укажи номер PR: npm run _ pr-view-web 5')
|
|
134
|
+
process.exit(1)
|
|
135
|
+
}
|
|
136
|
+
console.log(`🌐 Открываю PR #${prNumber} в браузере...`)
|
|
137
|
+
spawnSync(ghCmd, ['pr', 'view', prNumber, '--web'], { stdio: 'inherit' })
|
|
138
|
+
},
|
|
139
|
+
|
|
140
|
+
'pr-merge': () => {
|
|
141
|
+
const prNumber = process.argv[3]
|
|
142
|
+
if (!prNumber) {
|
|
143
|
+
console.log('❌ Укажи номер PR: npm run _ pr-merge 5')
|
|
144
|
+
process.exit(1)
|
|
145
|
+
}
|
|
146
|
+
console.log(`🔀 Мерджу PR #${prNumber}...\n`)
|
|
147
|
+
spawnSync(ghCmd, ['pr', 'merge', prNumber, '--merge'], { stdio: 'inherit' })
|
|
148
|
+
console.log('\n✅ PR смерджен!')
|
|
149
|
+
},
|
|
150
|
+
|
|
151
|
+
'pr-close': () => {
|
|
152
|
+
const prNumber = process.argv[3]
|
|
153
|
+
if (!prNumber) {
|
|
154
|
+
console.log('❌ Укажи номер PR: npm run _ pr-close 5')
|
|
155
|
+
process.exit(1)
|
|
156
|
+
}
|
|
157
|
+
console.log(`❌ Закрываю PR #${prNumber}...\n`)
|
|
158
|
+
spawnSync(ghCmd, ['pr', 'close', prNumber], { stdio: 'inherit' })
|
|
159
|
+
console.log('\n✅ PR закрыт!')
|
|
160
|
+
},
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
if (commands[command]) {
|
|
164
|
+
commands[command]()
|
|
165
|
+
} else {
|
|
166
|
+
console.log(`
|
|
167
|
+
⚡ JS Template CLI
|
|
168
|
+
|
|
169
|
+
Использование: npm run _ <команда> [аргументы]
|
|
170
|
+
|
|
171
|
+
📋 ПРОЕКТ:
|
|
172
|
+
init Инициализация нового проекта
|
|
173
|
+
upgrade Обновить конфиги после npm update
|
|
174
|
+
apply Применить изменения из jst.config.js
|
|
175
|
+
init-readme Создать стартовый README.md
|
|
176
|
+
setup-labels Настроить GitHub labels
|
|
177
|
+
setup-deps Настроить dependabot/renovate
|
|
178
|
+
|
|
179
|
+
🔧 РАЗРАБОТКА:
|
|
180
|
+
update-readme Обновить README с версией
|
|
181
|
+
release Полный релиз (changelog + README)
|
|
182
|
+
push-release Создать PR и смерджить в main
|
|
183
|
+
|
|
184
|
+
📝 ISSUES (текущий проект):
|
|
185
|
+
tasks Список задач (фичи)
|
|
186
|
+
create-task [название] Создать задачу
|
|
187
|
+
bugs Список багов
|
|
188
|
+
create-bug [название] Создать баг
|
|
189
|
+
refactors Список рефакторингов
|
|
190
|
+
create-refactor [название] Создать рефакторинг
|
|
191
|
+
perfs Список оптимизаций
|
|
192
|
+
create-perf [название] Создать оптимизацию
|
|
193
|
+
all-issues Все issues
|
|
194
|
+
|
|
195
|
+
📮 ISSUES (jst инструмент):
|
|
196
|
+
report-issue [описание] Сообщить о проблеме в js-template
|
|
197
|
+
|
|
198
|
+
🔀 PULL REQUESTS:
|
|
199
|
+
pr-list Показать все PR
|
|
200
|
+
pr-view <number> Посмотреть PR в терминале
|
|
201
|
+
pr-view-web <number> Открыть PR в браузере
|
|
202
|
+
pr-merge <number> Смерджить PR
|
|
203
|
+
pr-close <number> Закрыть PR без merge
|
|
204
|
+
|
|
205
|
+
⚙️ КОНФИГУРАЦИЯ:
|
|
206
|
+
jst.config.js Настройки веток, labels, коммитов, релизов
|
|
207
|
+
|
|
208
|
+
📝 ФОРМАТ КОММИТОВ:
|
|
209
|
+
feat: #9 описание Фича (ссылка на issue)
|
|
210
|
+
feat(scope): #9 описание Фича со scope
|
|
211
|
+
feat: close #9 описание Фича + закрыть issue
|
|
212
|
+
fix: #10 описание Фикс (ссылка на issue)
|
|
213
|
+
fix(scope): close #10 описание Фикс + scope + закрыть
|
|
214
|
+
refactor: описание Рефакторинг (без issue)
|
|
215
|
+
refactor(utils): описание Рефакторинг со scope
|
|
216
|
+
chore(release): v1.2.0 Авто-релиз
|
|
217
|
+
|
|
218
|
+
📚 ПРИМЕРЫ:
|
|
219
|
+
npm run _ init
|
|
220
|
+
npm run _ create-task "Добавить темную тему"
|
|
221
|
+
npm run _ release
|
|
222
|
+
npm run _ report-issue "Баг в release команде"
|
|
223
|
+
npm run _ pr-list
|
|
224
|
+
|
|
225
|
+
`)
|
|
226
|
+
process.exit(command ? 1 : 0)
|
|
227
|
+
}
|