修复 Windows 本地驱动挂载并完善可复现的一键打包流程 - #858
Conversation
|
感谢PR,我下班回去时就看下,目前在上班QAQ。 |
Codecov Report❌ Patch coverage is Additional details and impacted files@@ Coverage Diff @@
## main #858 +/- ##
============================================
+ Coverage 57.20% 57.53% +0.33%
- Complexity 1702 1731 +29
============================================
Files 269 270 +1
Lines 11241 11313 +72
Branches 594 608 +14
============================================
+ Hits 6430 6509 +79
+ Misses 4577 4562 -15
- Partials 234 242 +8 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
|
还需要commit吗?没有commit的话我合并了? |
1df6381 |
|
你直接本地revert comit,然后push就行。 |
|
那个commit,单开个PR如何?先把OK的功能合并了? |
This reverts commit 1df6381.
没问题 |
|
这波CI跑完通过后,这个PR我就合并了。 |
|
额,突然想起来,CHAGELOG没写,你可以加上这个新功能的更新日志。 |
更新日志就是我上面发的一堆。没搞分支是因为我本来打算弄完就删库的🤣 |
|
我后面加也行,我主要是怕后面忘记了,这段时间工作有点太忙了。 |
那一会儿吧,最后一个新功能测试完毕我再写 |
|
是指pr里面的commit?这个好像没找到哪压缩,合并后的pr相当于是归档了的。 |


背景
在 Windows 环境中,
LOCAL/DISK附件驱动无法正常挂载ikaros.work-dir之外的本地目录。例如服务端工作目录位于D:盘时,配置E:/收藏作为远端目录虽然可以成功保存并启用驱动,但附件根目录只显示Covers和Downloads,目标目录内容不会被挂载。进一步排查还发现,当前发布流程依赖未显式锁定的 Node.js、pnpm、主题子模块和预先生成的控制台资源。仅执行
bootJar虽然能够生成 JAR,但可能缺少templates/simple/index.html或console/index.html,最终在启动网页界面时出现 Thymeleaf 模板解析异常。本 PR 统一处理本地驱动挂载、路径安全、前端工具链复现和完整 JAR 打包四项问题。
改动概览
LOCAL/DISK驱动可以挂载ikaros.work-dir之外的 Windows 本地目录22.22.1和 pnpm10.32.1,不再依赖运行环境中的动态最新版bootJar自动生成完整 JAR./gradlew bootJar即可自动构建前端并打包主题与控制台资源详细改动
1. 修复本地驱动挂载根目录语义
ikaros.work-dir为可信根目录,原有访问范围保持不变。LOCAL/DISK驱动改为使用自身的remote_path作为可信根目录,不再错误地受ikaros.work-dir限制。2. 完善路径安全与 Windows 路径格式校验
新增统一的本地附件路径校验器,所有本地驱动文件访问均经过以下校验:
toRealPath()获取驱动根目录和目标文件的真实路径。startsWith判断目标是否仍位于驱动根目录中。Windows 盘符路径支持以下形式:
以下形式会被拒绝:
盘符后的根分隔符序列允许混用;后续路径段之间可以使用正斜杠或反斜杠,也可以重复使用同一种分隔符,但同一个后续分隔符序列中不能同时混用
\和/。3. 锁定前端构建工具链
22.22.1。10.32.1。console/package.json同步声明精确的packageManager和engines版本。.npmrc启用 Node.js 引擎和 pnpm 版本严格检查,版本不匹配时立即失败。.nvmrc与前端开发文档同步为 Node.js22.22.1。npx间接调用 pnpm,改为直接使用PnpmTask。lint-staged中残留的 npm 调用,统一使用 pnpm。npm install -g pnpm,避免随着时间安装到不兼容的新主版本。锁定 Node.js
22.22.1的原因是当前锁文件中的lint-staged 17.0.5明确要求 Node.js 不低于该版本。此前 Node.js 20 能够完成构建,是因为没有启用严格引擎校验,并不代表该版本满足依赖声明。4. 让
bootJar自动生成完整 JARbootJar显式依赖buildFrontend。buildFrontend → processResources → bootJar,确保前端产物生成后才处理服务端资源。templates/simple/index.htmlconsole/index.htmlbuild或bootJar自动触发前端构建。checkConsoleCI 任务保持不变。现在完整打包只需要:
.\gradlew.bat bootJarLinux 或 macOS 环境使用:
主题
templates/simple仍是 Git 子模块。全新检出源码时需要正常初始化子模块;如果主题资源不存在,bootJar会给出明确错误并停止,不会修改 Git 工作区或在构建期间隐式执行网络检出。安全性说明
ikaros.work-dir的限制。LOCAL/DISK驱动可以访问自身remote_path下的文件。..、符号链接和 Windows Junction 最终都以真实路径进行边界判断。git submodule update,避免一次普通构建隐式修改源码仓库或触发网络访问。性能影响
运行时
构建时
bootJar现在会自动执行完整前端构建,首次执行时间会比原先只打包后端更长。验证结果
自动化测试
LocalAttachmentPathValidatorTest:通过。AttachmentDriverEnableListenerTest:通过。DynamicDirectoryResolverTest:通过。AttachmentServiceImplTest相关路径用例:通过。构建验证
以下任务均已使用 JDK 21 验证成功:
单独执行
bootJar的任务图已确认自动包含前端依赖安装、共享包构建、API 客户端构建、控制台构建、资源处理和 JAR 打包。JAR 内容验证
BOOT-INF/classes/templates/simple/index.html:存在。BOOT-INF/classes/console/index.html:存在。建议审查重点
LOCAL/DISK驱动以自身remote_path为安全根目录是否符合驱动设计预期。toRealPath()与startsWith的组合是否覆盖项目支持平台上的符号链接和 Junction 场景。bootJar自动依赖前端构建是否符合发布和本地开发流程预期。22.22.1与 pnpm10.32.1是否适合作为当前分支的固定构建基线。额外内容
优化附件删除交互与工具栏布局
附件驱动仅处理变化文件