Skip to content

v3.18.2

Choose a tag to compare

@github-actions github-actions released this 28 Aug 14:56
· 37 commits to master since this release
88e3d7f

修复编译版单文件二进制的 Dashboard 整站 404

编译版二进制(curl 安装的单文件)Dashboard 完全打不开:登录链接把
cookie 种上、跳到 /,返回 {"error":"not_found_yet","path":"/"},
用户视角是整站 404、token 有效也没用。npm / 源码安装不受影响。

两条原因叠加,都只在编译态成立:

  1. Dashboard 用 join(__dirname, 'dashboard-web') 定位前端,而编译态
    __dirname 是虚拟的 /$bunfs/root,该目录在磁盘上不存在,statSync
    抛错后落到最底层兜底 404。
  2. 更根本的是 bun build --compile 只嵌入能静态追踪到的 import,而前端
    产物与服务端模块之间没有任何 import 边 —— 二进制里根本没有前端。

改法:编译时由 build plugin 把整个 dist/dashboard-web 以
import … with { type: 'file' } 注入 dist/dashboard.js,并生成
「请求路径 → 嵌入路径」映射表;服务端新增 resolveWebAsset() 统一两种
形态的资源定位,源码态仍走磁盘目录。必须用映射表而非直接指向 /$bunfs
根目录,因为 Bun 会给嵌入文件改成内容哈希名,请求路径无法直接寻址。

同时堵上让本缺陷发到线上的检测缺口:smoke 原先接受任何 HTTP 状态码,
对「因为没有前端而 404」完全免疫;现改为按原因判别,命中兜底 404 即
让构建失败。

验证:真编译版二进制 smoke 七项全绿;各类静态资源均正常返回,lazy
chunk 得到 immutable 缓存、ETag 协商回 304;路径穿越与原型链键名均
被拒且不泄露;源码形态回归无差异。另以单行变异关闭映射表查表,确认
新增检查能准确捕获并归因原缺陷。


✨ 新功能

  • lark: 普通群 @ 策略支持按群设置与 /mention-mode 动态切换 (#939)

🐛 修复

  • issue: 固定默认目录兜底领取仓库扫描 (#1039)
  • vc: 隔离监听群人工追问输出协议 (#941)
  • ci: musl 门的自报行也传一次性 PM2_HOME,不再可能污染共享 ~/.pm2 (6f25ee7)
  • dashboard: 编译版二进制内嵌前端产物,Dashboard 不再整站 404 (#1066)

🙏 感谢贡献者

@pixystone @XiangYu-BD @ejjcc

Full Changelog: v3.18.1...v3.18.2