@greatjoy/gy 0.1.0 → 0.1.2

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 CHANGED
@@ -1,4 +1,4 @@
1
- # gy
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
- - 包名 `gy` 已确认在公共源未被占用
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 个人脚手架 CLI')
10
- .version('0.1.0');
12
+ .description('gy 个人开发工具集:常用流水线,一条命令搞定')
13
+ .version(pkg.version);
11
14
 
12
15
  registerCommands(program);
13
16
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
- {
1
+ {
2
2
  "name": "@greatjoy/gy",
3
- "version": "0.1.0",
3
+ "version": "0.1.2",
4
4
  "description": "个人脚手架 CLI:一键发布 cartech-library 组件库等",
5
5
  "type": "module",
6
6
  "bin": {
@@ -12,7 +12,8 @@
12
12
  ],
13
13
  "scripts": {
14
14
  "test": "node --test",
15
- "pub": "npm publish --registry=https://registry.npmjs.org/"
15
+ "pub:patch": "npm version patch && npm publish --registry=https://registry.npmjs.org/ --access public",
16
+ "pub": "npm publish --registry=https://registry.npmjs.org/ --access public"
16
17
  },
17
18
  "engines": {
18
19
  "node": ">=16"
@@ -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
- if (dryRun) {
314
- run('git', ['add', '-A'], runOpts);
315
- run('git', ['commit', '-F', '<临时文件: release: 发布内容>'], runOpts);
316
- run('git', ['push', 'origin', branch], runOpts);
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
- const msgFile = path.join(os.tmpdir(), `gy-commit-${Date.now()}.txt`);
320
- fs.writeFileSync(msgFile, `release: ${answers.summary.trim()}`, 'utf-8');
321
- run('git', ['commit', '-F', msgFile], { cwd: repoDir });
322
- fs.rmSync(msgFile, { force: true });
323
- run('git', ['push', 'origin', branch], { cwd: repoDir });
324
- log.ok(`已推送 origin/${branch}`);
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 name of answers.selected) log.info(` ${name}`);
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
  }