| content |
{"Commits":[{"Sha1":"083385f1c {"Commits":[{"Sha1":"083385f1c38217147aacf74d0f2251a65fbce450","Message":"feat(integrations): 接入报价优惠券核销\n\nCo-authored-by: Qwen-Coder \u003cqwen-coder@alibabacloud.com\u003e\n","AuthorEmail":"hlj@g-hi.com","AuthorName":"huangliujian","CommitterEmail":"hlj@g-hi.com","CommitterName":"huangliujian","Timestamp":"2026-08-19T13:12:36+08:00"},{"Sha1":"be60de1f7e3c6183500ea7d65fc2bf039a86f1d0","Message":"Merge remote-tracking branch 'origin/main' into hljTest\n\n# Conflicts:\n#\tCLAUDE.md\n#\tapps/api-fastify/prisma/schema.prisma\n#\tapps/api-fastify/src/routes/quotations.ts\n#\tapps/api-nestjs/prisma/schema.prisma\n#\tapps/api-nestjs/src/quotations/quotations.service.ts\n#\tapps/web/src/features/quotations/api/quotations-api.ts\n#\tapps/web/src/features/quotations/components/PublicQuotationView.tsx\n#\tapps/web/src/hooks/useRealtime.ts\n#\tdeploy/vm/Dockerfile\n#\tdeploy/vm/compose.yaml\n#\tdocs/governance-experience.md\n#\tpackages/contracts/src/index.ts\n#\tpackages/contracts/src/quotation.ts\n#\tpackages/contracts/src/realtime.ts\n#\tscripts/vm-deploy.sh\n","AuthorEmail":"hlj@g-hi.com","AuthorName":"huangliujian","CommitterEmail":"hlj@g-hi.com","CommitterName":"huangliujian","Timestamp":"2026-08-19T09:54:43+08:00"},{"Sha1":"125c54d328d3da221b5d91c0a2dd0475712c6e96","Message":"Merge pull request #12 from laoluojuhai/fix/vm-dockerfile-build-path\n\nfix(vm): 打通容器构建路径——保住 slim 运行镜像,不靠放宽红线换构建成功","AuthorEmail":"158980461+laoluojuhai@users.noreply.github.com","AuthorName":"laoluojuhai","CommitterEmail":"noreply@github.com","CommitterName":"GitHub","Timestamp":"2026-08-17T07:09:44-07:00"},{"Sha1":"6f13a78de9c02ae6a36fcebfb4bde63fbd092158","Message":"fix(vm): 打通容器构建路径——保住 slim 运行镜像,不靠放宽红线换构建成功\n\n`deploy/vm/Dockerfile` 的构建路径从未真正跑通过(并发治理会话只用 pnpm/turbo 跑门禁,\n从不 docker build)。而 check:vm-deploy 一直是绿的——它查 Dockerfile 的**结构**\n(每个 stage 用哪个 FROM、有没有 fat runtime),不查它**能不能构建出来**。\n于是棘轮报告写着「镜像瘦身非 root、可回滚、备份可恢复」✅,而那个镜像根本产不出来。\n\n5 处构建 bug:\n1. contracts 的 `prepare`(tsc) 在只有 manifest 的依赖层里跑,找不到 tsconfig/src → TS5058。\n 先 COPY contracts 的 tsconfig + src 给它当输入。\n2. 新 workspace 包 @repo/password-auth(两后端 runtime 依赖)未进 manifest COPY、\n 也没被显式 build。\n3. `pnpm deploy --prod --legacy`:pnpm 9.15.9 不认 `--legacy`(Unknown option)。\n 旧注释称「未开启 inject-workspace-packages 时需要 --legacy」——实测在本仓版本上\n 不成立,去掉即可正常打平 workspace 包(sharp 这类 lockfile 原生依赖也照常带出)。\n4. `pnpm deploy` 只按 lockfile 物化依赖,而 .prisma/client(含平台相关 query engine)\n 是 `prisma generate` **生成**的、不在任何 lockfile 里,永远不会被带出去 →\n 新增一步从 build 树复制。路径由 @prisma/client 的解析结果反推,不硬编码 pnpm store\n 的哈希目录名;且必须从 app 目录解析(workspace 根 node_modules 里没有它)。\n5. web stage `COPY apps/web/public` 失败——git 未跟踪任何 public 资产。\n ⚠️ 本机可能有个空的 public/(git 不跟踪空目录),docker build 读本地上下文因而能过,\n CI 与全新 clone 上必挂,注释已写明这个陷阱。\n\n**刻意不采用**此前 `dockerfile-vm-deploy-fixes-ec411c0.patch` 的策略(放弃 slim、\n运行镜像改 FROM build):那会撞 4 条门禁红线(runtime-from-base-* / no-fat-runtime-*),\n而实测 slim 路径的两个阻塞点(3、4)都可解,「镜像瘦身作为后续项不阻塞」的前提不成立。\n体积实测:api-nestjs 741MB / api-fastify 695MB / web 546MB,\n对照 fat 方案 8.46GB、2026-08-06 实际部署的 2.69GB。非 root 由镜像层 USER node 保证,\n而非仅靠 compose 的 user: 覆盖。\n\n顺带两处断链(均为 MinIO 进 compose 后没人跟上):\n- .env.example 与 vm:init 都不认识 S3_*,而它们是 compose 的必填变量 → 新机器\n `vm:init` 后 `vm:up` 必然卡在变量插值。已补占位符 + 随机生成 + 存量 .env 自愈。\n- .dockerignore 只写 `**/.next`,匹配不到本仓工具链自建的 distDir\n (.next-ui-* / .next-dev-* / .next-manual-*),也没排除 sites/(G26 那套独立\n Cloudflare 系统,其 .sites-runtime 本机 1.0GB)→ COPY . . 层 3.79GB → 270MB。\n\n证据(作用域=本地工作区):\n- docker build 四个 target 全部 EXIT=0(api-nestjs / api-fastify / web / migrate)\n- 镜像内实测 @prisma/client 与原生模块 sharp 均可加载、dist 入口就位、uid=1000 非 root\n- Dockerfile 里那条「Prisma Client 缺失即构建失败」的断言**首次真正执行并通过**\n- pnpm vm:config EXIT=0(7 个服务解析通过)\n- pnpm check 22 项全绿 exit=0\n\n未验证:未跑 vm:up / vm:smoke(整栈起停与真实写链冒烟),故不得宣称「可部署」。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"luoguoguo@gmail.com","AuthorName":"luoguoguo","CommitterEmail":"luoguoguo@gmail.com","CommitterName":"luoguoguo","Timestamp":"2026-08-17T06:57:55-07:00"},{"Sha1":"8ae98649e077fa188f8e9c1b0a11b78a2377c836","Message":"Merge pull request #11 from laoluojuhai/feat/product-catalog-search-and-image-upload\n\nfeat(products): 商品库服务端搜索筛选 + 图片上传至对象存储","AuthorEmail":"158980461+laoluojuhai@users.noreply.github.com","AuthorName":"laoluojuhai","CommitterEmail":"noreply@github.com","CommitterName":"GitHub","Timestamp":"2026-08-17T04:16:44-07:00"}],"HeadCommit":{"Sha1":"083385f1c38217147aacf74d0f2251a65fbce450","Message":"feat(integrations): 接入报价优惠券核销\n\nCo-authored-by: Qwen-Coder \u003cqwen-coder@alibabacloud.com\u003e\n","AuthorEmail":"hlj@g-hi.com","AuthorName":"huangliujian","CommitterEmail":"hlj@g-hi.com","CommitterName":"huangliujian","Timestamp":"2026-08-19T13:12:36+08:00"},"CompareURL":"luoanwu/juhai-quotation-system/compare/d2c99c9fc71e8a1c48d1aa3684c30ead3eb110c0...083385f1c38217147aacf74d0f2251a65fbce450","Len":51}... |