@greatjoy/gy 0.1.0 → 0.1.1
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 +13 -8
- package/bin/gy.js +5 -2
- package/package.json +2 -2
- package/src/commands/ktcpub.js +53 -15
package/README.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
# gy
|
|
2
2
|
|
|
3
3
|
个人脚手架 CLI:在项目内一键发布 cartech-library 组件库。
|
|
4
4
|
|
|
@@ -10,10 +10,10 @@ gy ktcpub
|
|
|
10
10
|
|
|
11
11
|
```bash
|
|
12
12
|
# 公共源全局安装(推荐)
|
|
13
|
-
npm install -g gy
|
|
13
|
+
npm install -g @greatjoy/gy
|
|
14
14
|
|
|
15
15
|
# 海尔内网:通过 npm.haier.net 代理同样可安装(nexus 代理公共源)
|
|
16
|
-
npm install -g gy --registry=http://npm.haier.net/
|
|
16
|
+
npm install -g @greatjoy/gy --registry=http://npm.haier.net/
|
|
17
17
|
```
|
|
18
18
|
|
|
19
19
|
## 用法
|
|
@@ -35,17 +35,22 @@ gy ktcpub
|
|
|
35
35
|
5. **发布内容**:必填,写入 CHANGELOG(随后作为 git commit message)
|
|
36
36
|
6. **认证**:自动复用 `~/.npmrc` 中 haier 发布源的 token,缺失时才提示输入
|
|
37
37
|
7. **ver 后暂停**:`changeset version` 更新完版本号与 CHANGELOG 后询问是否继续(此时 git 可见中间变更,可先核对/修改再放行;选择暂停会给出手动继续的命令)
|
|
38
|
+
8. **git 处理**:最后询问本次改动如何处理 —— 不提交 / 提交(不推送)/ 提交并推送
|
|
38
39
|
|
|
39
40
|
执行流水线(复用仓库既有 changeset 链路,不重新发明):
|
|
40
41
|
|
|
41
42
|
```
|
|
42
|
-
正式: [nrm use haier → pnpm i] → 生成 changeset → changeset version → turbo build
|
|
43
|
-
→ nrm use haierpub → changeset publish → 回读校验 dist-tag → git add/commit/push
|
|
44
|
-
Beta: [nrm use haier → pnpm i] → 自动 enter beta → 生成 changeset → changeset version
|
|
43
|
+
正式: git pull → [nrm use haier → pnpm i] → 生成 changeset → changeset version → turbo build
|
|
44
|
+
→ nrm use haierpub → changeset publish → 回读校验 dist-tag → git add/commit/push(可选)
|
|
45
|
+
Beta: git pull → [nrm use haier → pnpm i] → 自动 enter beta → 生成 changeset → changeset version
|
|
45
46
|
→ 自动 exit beta → turbo build → nrm use haierpub → changeset publish --tag beta
|
|
46
|
-
→ 校验 beta tag → git add/commit/push
|
|
47
|
+
→ 校验 beta tag → git add/commit/push(可选)
|
|
47
48
|
```
|
|
48
49
|
|
|
50
|
+
> 流程开头自动 `git pull` 拉取最新代码;依赖安装与发布前会自动执行 `nrm use haier` / `nrm use haierpub` 切换镜像;若未安装 nrm,会提示你手动执行对应命令切换(按回车确认后继续)。
|
|
51
|
+
>
|
|
52
|
+
> 全部执行完后会汇总输出发布成功的组件及新版本号。
|
|
53
|
+
|
|
49
54
|
> 依赖安装与发布前会自动执行 `nrm use haier` / `nrm use haierpub` 切换镜像;若未安装 nrm,会提示你手动执行对应命令切换(按回车确认后继续)。
|
|
50
55
|
|
|
51
56
|
常用选项:
|
|
@@ -80,7 +85,7 @@ npm run pub # npm publish --registry=https://registry.npmjs.org/
|
|
|
80
85
|
|
|
81
86
|
- 首次发布前需登录公共源:`npm login --registry=https://registry.npmjs.org/`
|
|
82
87
|
- 发布后海尔内网通过 `npm.haier.net` 代理即可安装(nexus proxy 仓库会回源公共 npm)
|
|
83
|
-
-
|
|
88
|
+
- 包名为 `@greatjoy/gy`(公共源 scoped 包)
|
|
84
89
|
|
|
85
90
|
## 配置
|
|
86
91
|
|
package/bin/gy.js
CHANGED
|
@@ -1,13 +1,16 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
+
import { readFileSync } from 'node:fs';
|
|
2
3
|
import { Command } from 'commander';
|
|
3
4
|
import { registerCommands } from '../src/commands/index.js';
|
|
4
5
|
|
|
6
|
+
const pkg = JSON.parse(readFileSync(new URL('../package.json', import.meta.url), 'utf-8'));
|
|
7
|
+
|
|
5
8
|
const program = new Command();
|
|
6
9
|
|
|
7
10
|
program
|
|
8
11
|
.name('gy')
|
|
9
|
-
.description('gy
|
|
10
|
-
.version(
|
|
12
|
+
.description('gy 个人开发工具集:常用流水线,一条命令搞定')
|
|
13
|
+
.version(pkg.version);
|
|
11
14
|
|
|
12
15
|
registerCommands(program);
|
|
13
16
|
|
package/package.json
CHANGED
package/src/commands/ktcpub.js
CHANGED
|
@@ -202,6 +202,16 @@ async function runKtcpub(opts) {
|
|
|
202
202
|
let step = 0;
|
|
203
203
|
const next = (title) => log.step(`${++step}. ${title}`);
|
|
204
204
|
|
|
205
|
+
// 9.0 拉取最新代码(发布基于最新基线,避免 push 冲突)
|
|
206
|
+
next('git pull 拉取最新代码');
|
|
207
|
+
try {
|
|
208
|
+
run('git', ['pull'], runOpts);
|
|
209
|
+
} catch (e) {
|
|
210
|
+
log.error(`git pull 失败:${e.message}`);
|
|
211
|
+
log.error('请先解决本地冲突/网络问题后重试');
|
|
212
|
+
process.exit(1);
|
|
213
|
+
}
|
|
214
|
+
|
|
205
215
|
// 9.1 安装依赖(haier 源:先 nrm use haier)
|
|
206
216
|
if (answers.install === 'haier') {
|
|
207
217
|
next('使用 haier 源安装依赖');
|
|
@@ -308,25 +318,53 @@ async function runKtcpub(opts) {
|
|
|
308
318
|
}
|
|
309
319
|
}
|
|
310
320
|
|
|
311
|
-
// 9.8 git
|
|
312
|
-
next('git
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
321
|
+
// 9.8 git 提交与推送(用户选择:不提交 / 提交 / 提交并推送)
|
|
322
|
+
next('git 提交与推送');
|
|
323
|
+
let gitAction = 'push';
|
|
324
|
+
if (!dryRun) {
|
|
325
|
+
const { gitChoice } = await inquirer.prompt([
|
|
326
|
+
themed({
|
|
327
|
+
type: 'list',
|
|
328
|
+
name: 'gitChoice',
|
|
329
|
+
message: '本次改动如何处理?',
|
|
330
|
+
choices: [
|
|
331
|
+
{ name: '不提交', value: 'none' },
|
|
332
|
+
{ name: '提交(不推送)', value: 'commit' },
|
|
333
|
+
{ name: '提交并推送', value: 'push' },
|
|
334
|
+
],
|
|
335
|
+
default: 'push',
|
|
336
|
+
}),
|
|
337
|
+
]);
|
|
338
|
+
gitAction = gitChoice;
|
|
339
|
+
}
|
|
340
|
+
if (gitAction === 'none') {
|
|
341
|
+
log.info('跳过 git 提交(版本与改动日志改动保留在工作区)');
|
|
317
342
|
} else {
|
|
318
343
|
run('git', ['add', '-A'], { cwd: repoDir });
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
344
|
+
if (dryRun) {
|
|
345
|
+
run('git', ['commit', '-F', '<临时文件: release: 发布内容>'], runOpts);
|
|
346
|
+
} else {
|
|
347
|
+
const msgFile = path.join(os.tmpdir(), `gy-commit-${Date.now()}.txt`);
|
|
348
|
+
fs.writeFileSync(msgFile, `release: ${answers.summary.trim()}`, 'utf-8');
|
|
349
|
+
run('git', ['commit', '-F', msgFile], { cwd: repoDir });
|
|
350
|
+
fs.rmSync(msgFile, { force: true });
|
|
351
|
+
}
|
|
352
|
+
if (gitAction === 'push') {
|
|
353
|
+
run('git', ['push', 'origin', branch], { cwd: repoDir });
|
|
354
|
+
log.ok(`已推送 origin/${branch}`);
|
|
355
|
+
} else {
|
|
356
|
+
log.ok('已提交(未推送),可稍后手动 git push');
|
|
357
|
+
}
|
|
325
358
|
}
|
|
326
359
|
|
|
327
|
-
// 10.
|
|
328
|
-
log.title(isBeta ? 'Beta 发布完成' : '正式发布完成');
|
|
329
|
-
for (const
|
|
360
|
+
// 10. 汇总:发布成功的组件版本
|
|
361
|
+
log.title(isBeta ? 'Beta 发布完成 ✔' : '正式发布完成 ✔');
|
|
362
|
+
for (const p of packages.filter((x) => answers.selected.includes(x.name))) {
|
|
363
|
+
const finalVersion = JSON.parse(
|
|
364
|
+
fs.readFileSync(path.join(repoDir, 'packages', p.dir, 'package.json'), 'utf-8'),
|
|
365
|
+
).version;
|
|
366
|
+
log.info(` ${p.name} \x1b[2m→\x1b[0m \x1b[1;32m${finalVersion}\x1b[0m`);
|
|
367
|
+
}
|
|
330
368
|
if (isBeta) {
|
|
331
369
|
log.warn('Beta 已自动退出 pre 模式;如需续发下一个 Beta,下次执行会自动重新进入');
|
|
332
370
|
}
|