aaden-cli 1.6.105 → 1.6.107

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.
@@ -9,22 +9,41 @@
9
9
  # 写死 /usr/local/bin/aaden-cli 在那种设备上会失败,而保留 "$PATH" 两者都能命中。
10
10
  export PATH="/usr/local/bin:$PATH"
11
11
 
12
- mkdir -p /etc/aaden/config
13
- chmod -R 777 /etc/aaden/config
12
+ # 每一步的退出码和耗时写进 $AADEN_UPGRADE_STEPS(auto-upgrade 读出来随「自动执行了更新aaden-cli」事件上报),
13
+ # 失败的那步再带上输出末尾。起因:2026-10 约 35 台在 cron 里 auto-upgrade 3 秒跑完、后端从不更新,
14
+ # 同样的命令 SSH 进去跑却正常,而 /var/log/aaden-auto-upgrade.log 远程读不到。
15
+ # 输出照常打到 stdout(cron 重定向进日志);单独跑这个脚本、没设变量时写 /dev/null。
16
+ STEPS="${AADEN_UPGRADE_STEPS:-/dev/null}"
17
+ step() {
18
+ local name=$1 start=$SECONDS out code
19
+ shift
20
+ out=$("$@" 2>&1)
21
+ code=$?
22
+ printf '%s\n' "$out"
23
+ if [ "$code" = 0 ]; then
24
+ echo "$name=0/$((SECONDS - start))s" >>"$STEPS"
25
+ else
26
+ echo "$name=$code/$((SECONDS - start))s($(printf '%s' "$out" | tail -n 2 | tr '\n' ' ' | cut -c1-160))" >>"$STEPS"
27
+ fi
28
+ }
14
29
 
15
- sudo rm -rf /usr/local/lib/node_modules/.aaden-cli-P0eVNKj8
16
- sudo npm i aaden-cli -g
30
+ step config sh -c 'mkdir -p /etc/aaden/config && chmod -R 777 /etc/aaden/config'
17
31
 
18
- aaden-cli patch
32
+ # npm 全局重装会先把旧目录改名成 .aaden-cli-<随机串>;上次失败留下的这种目录会让之后每次都 ENOTEMPTY 失败,
33
+ # CLI 永远停在老版本(10-03 车队里有几台卡在 1.6.88~1.6.98)。以前这里只删一个写死名字的目录,现在全删。
34
+ step clean sudo sh -c 'rm -rf /usr/local/lib/node_modules/.aaden-cli-*'
35
+ step npm sudo npm i aaden-cli -g
36
+
37
+ step patch aaden-cli patch
19
38
 
20
39
  # 前端目录访问量上报(AppCenter 各应用 + 根目录老前端;只读 Apache 日志,20 小时内报过就空跑)。放在 light-update 前面,后端部署出问题也不影响统计
21
- aaden-cli appcenter-usage
40
+ step usage aaden-cli appcenter-usage
22
41
 
23
42
  # 后端也走 aaden-cli 通道自愈:light-update 自带 版本门/灰度门/活动单门,
24
43
  # 已最新则空跑,营业时间被 @reboot 触发也不会打断收银(不 snap refresh 前端、不 apt)。
25
44
  # 这条让"后端自动更新"重新依赖活着的 npm+S3 管线,而不是失效的 git token。
26
- aaden-cli light-update
45
+ step lu aaden-cli light-update
27
46
 
28
47
  # AppCenter 前端(Admin 等)单独同步:light-update 不发 AppCenter。灰度由 S3 manifest 的 rollout 控制,
29
48
  # 不在灰度内 / 已最新时空跑(一次几 KB 的 manifest 请求);不碰 PHP 和数据库,营业时间触发也安全。
30
- aaden-cli appcenter-sync
49
+ step sync aaden-cli appcenter-sync
package/dist/index.js CHANGED
@@ -18577,7 +18577,7 @@ module.exports = JSON.parse('{"name":"axios","version":"0.19.2","description":"P
18577
18577
  /***/ ((module) => {
18578
18578
 
18579
18579
  "use strict";
18580
- module.exports = {"i8":"1.6.105"};
18580
+ module.exports = {"i8":"1.6.107"};
18581
18581
 
18582
18582
  /***/ })
18583
18583
 
@@ -19395,17 +19395,44 @@ async function autoUpgrade() {
19395
19395
  if (!ngrokNewestVersion()) {
19396
19396
  await fixNgrok()
19397
19397
  }
19398
- await upgrade()
19399
- await logAction("自动执行了更新aaden-cli")
19398
+ const summary = await upgrade()
19399
+ await logAction("自动执行了更新aaden-cli" + summary)
19400
19400
  }
19401
19401
 
19402
+ /**
19403
+ * upgrade.sh 每步把 `名字=退出码/耗时` 写进 AADEN_UPGRADE_STEPS 指向的文件,这里读出来拼进事件:
19404
+ * 全部成功是一串 `npm=0/1s patch=0/0s …`;有失败(或脚本根本没跑起来——前面 `sudo chmod`、`cd` 是 && 串起来的)
19405
+ * 时再带上运行用户、PATH、node/npm/aaden-cli 的位置。
19406
+ * 起因:2026-10 约 35 台在 cron 里 auto-upgrade 3 秒跑完、后端从不更新,SSH 进去手动跑却正常,日志又远程读不到。
19407
+ */
19402
19408
  async function upgrade() {
19409
+ const stepsFile = path.join(os.tmpdir(), `aaden-upgrade-steps-${process.pid}`)
19410
+ try { fs.writeFileSync(stepsFile, '') } catch (_) {}
19403
19411
  const command = [
19404
19412
  ...getPrivilegeCMD('AadenDeploy/upgrade.sh'),
19405
19413
  'cd AadenDeploy',
19406
- `./upgrade.sh`
19414
+ `AADEN_UPGRADE_STEPS=${stepsFile} ./upgrade.sh`
19407
19415
  ]
19408
- await cli.executeInShell(command, program.debug)
19416
+ const {code} = await cli.executeInShell(command, program.debug)
19417
+ let steps = ''
19418
+ try {
19419
+ steps = fs.readFileSync(stepsFile, 'utf8').split('\n').filter(Boolean).join(' ')
19420
+ fs.unlinkSync(stepsFile)
19421
+ } catch (_) {}
19422
+ const failed = code !== 0 || !steps || /=[1-9]/.test(steps)
19423
+ return ' [' + (steps || 'upgrade.sh 没跑起来') + (code ? ' exit=' + code : '') + ']'
19424
+ + (failed ? ' ' + upgradeEnvInfo() : '')
19425
+ }
19426
+
19427
+ function upgradeEnvInfo() {
19428
+ try {
19429
+ return execSync(
19430
+ 'echo "user=$(id -un) PATH=$PATH node=$(command -v node) npm=$(command -v npm) cli=$(command -v aaden-cli)"',
19431
+ {encoding: 'utf-8', shell: '/bin/sh', timeout: 5000}
19432
+ ).trim()
19433
+ } catch (e) {
19434
+ return ''
19435
+ }
19409
19436
  }
19410
19437
 
19411
19438
  function getStorageBackendFileVersion() {
package/index.js CHANGED
@@ -744,17 +744,44 @@ async function autoUpgrade() {
744
744
  if (!ngrokNewestVersion()) {
745
745
  await fixNgrok()
746
746
  }
747
- await upgrade()
748
- await logAction("自动执行了更新aaden-cli")
747
+ const summary = await upgrade()
748
+ await logAction("自动执行了更新aaden-cli" + summary)
749
749
  }
750
750
 
751
+ /**
752
+ * upgrade.sh 每步把 `名字=退出码/耗时` 写进 AADEN_UPGRADE_STEPS 指向的文件,这里读出来拼进事件:
753
+ * 全部成功是一串 `npm=0/1s patch=0/0s …`;有失败(或脚本根本没跑起来——前面 `sudo chmod`、`cd` 是 && 串起来的)
754
+ * 时再带上运行用户、PATH、node/npm/aaden-cli 的位置。
755
+ * 起因:2026-10 约 35 台在 cron 里 auto-upgrade 3 秒跑完、后端从不更新,SSH 进去手动跑却正常,日志又远程读不到。
756
+ */
751
757
  async function upgrade() {
758
+ const stepsFile = path.join(os.tmpdir(), `aaden-upgrade-steps-${process.pid}`)
759
+ try { fs.writeFileSync(stepsFile, '') } catch (_) {}
752
760
  const command = [
753
761
  ...getPrivilegeCMD('AadenDeploy/upgrade.sh'),
754
762
  'cd AadenDeploy',
755
- `./upgrade.sh`
763
+ `AADEN_UPGRADE_STEPS=${stepsFile} ./upgrade.sh`
756
764
  ]
757
- await cli.executeInShell(command, program.debug)
765
+ const {code} = await cli.executeInShell(command, program.debug)
766
+ let steps = ''
767
+ try {
768
+ steps = fs.readFileSync(stepsFile, 'utf8').split('\n').filter(Boolean).join(' ')
769
+ fs.unlinkSync(stepsFile)
770
+ } catch (_) {}
771
+ const failed = code !== 0 || !steps || /=[1-9]/.test(steps)
772
+ return ' [' + (steps || 'upgrade.sh 没跑起来') + (code ? ' exit=' + code : '') + ']'
773
+ + (failed ? ' ' + upgradeEnvInfo() : '')
774
+ }
775
+
776
+ function upgradeEnvInfo() {
777
+ try {
778
+ return execSync(
779
+ 'echo "user=$(id -un) PATH=$PATH node=$(command -v node) npm=$(command -v npm) cli=$(command -v aaden-cli)"',
780
+ {encoding: 'utf-8', shell: '/bin/sh', timeout: 5000}
781
+ ).trim()
782
+ } catch (e) {
783
+ return ''
784
+ }
758
785
  }
759
786
 
760
787
  function getStorageBackendFileVersion() {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "aaden-cli",
3
- "version": "1.6.105",
3
+ "version": "1.6.107",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "scripts": {