Skip to content

feat(release): PKG-2A PG 二进制分发源——上游直拉,零配置产物含嵌入式 PG#201

Open
KerroKapple wants to merge 1 commit into
mainfrom
feat/pkg-2a-pg-upstream
Open

feat(release): PKG-2A PG 二进制分发源——上游直拉,零配置产物含嵌入式 PG#201
KerroKapple wants to merge 1 commit into
mainfrom
feat/pkg-2a-pg-upstream

Conversation

@KerroKapple

Copy link
Copy Markdown
Owner

这是什么

上线前 UI/UX 1-10 收官(#200)后发布工程线的关键路径卡:PKG-2A PG 二进制分发源(方案 A 上游直拉)——beta.1 硬阻塞名单里唯一零用户依赖的一项。此前 PG_ARTIFACT_BASE_URL 未配 → release 产物不含嵌入式 PG → 干净机装不上;本 PR 后零配置即产出含 PG 的双平台安装物。

改动

scripts/pg/fetch-binaries.sh 双模式重写

  • upstream(默认):Windows = EDB 官方 zip 直拉,URL+SHA256 锁定在新增 scripts/pg/upstream.lock,只取 pgsql/{bin,lib,share} 并裁 share/{doc,man,locale}lib/*.lib(MSVC 导入库)、bin/wx*.dll(StackBuilder GUI 残留)——111MB→82MB;macOS = Homebrew postgresql@17 委托既有 make-relocatable-macos.sh(brew 补丁位浮动 → 只锁主版本)
  • bucket(覆盖):设 PG_ARTIFACT_BASE_URL 走对象存储,历史语义不变
  • 不变量:.partial 装配+校验通过才对换(失败零残留);verify_tree 统一校验(五必需工具含 pg_dump/pg_restore + lib/share 在位 + 版本右锚定);幂等短路零下载,残缺树触发重建

release.yml:双平台去门控无条件 fetch;macOS brew 步(不以 cache-hit 门控——坏缓存重建需 keg 兜底;主版本从 pg-version.txt 推导);cache key 加 lock hash+模式判别子;publish 顺带 QG-6 的 checksums.txtci.yml:release-scripts job 挂新回归测试。

验证

  • test/scripts/fetch_binaries_test.sh:9 Task / 38 断言全绿(TDD 先红后绿;沙箱+PATH-stub curl/brew,零网络,ubuntu 可跑)
  • 本机真栈验收:真 EDB 下载 → SHA 锁定校验 → 裁剪 82MB → postgres.exe --version=17.2 → realpg E2E 全链绿(真 initdb SCRAM → pg_ctl → 迁移 v1→v7 → pg_dump → pg_restore 对换 → teardown)——顺带证明裁剪不伤 pgcrypto→libcrypto 依赖链
  • 两路评审:3 镜头对抗(shell/CI/文档)+ 独立复跑。P2×1(upstream.lock CRLF 形态)+ P3×11 全修或记债;CI 镜头独立重下 EDB zip 复核 SHA 逐字一致,并确认 windows-latest bash 无 unzip 但 7z 在 PATH(三级兜底链接住)
  • flutter analyze 0 issue;全量测试 1720 过 0 败(本卡零 Dart 改动)
  • ⚠️ mac 侧 brew+relocate 路径待 release CI 首跑验证(本机仅能验 Windows;已如实记 BOARD/MASTERPLAN)

风险与处置

EDB 撤旧包/变更 → SHA 锁死硬报错绝不静默换包,届时实测新包更新 lock。macOS 跨架构误标(操作员失误场景)记 BOARD 债,随 PKG-7 x64 matrix 同窗修。

🤖 Generated with Claude Code

fetch-binaries.sh 双模式重写:upstream 默认(Windows=EDB 官方 zip 按
scripts/pg/upstream.lock 锁 URL+SHA256,只取 pgsql/{bin,lib,share} 并裁
share/{doc,man,locale}+lib/*.lib+bin/wx*.dll,111MB→82MB;macOS=Homebrew
postgresql@17 委托 make-relocatable,brew 补丁位浮动故只锁主版本),
PG_ARTIFACT_BASE_URL 保留为对象存储覆盖(方案 B,语义不变)。

不变量:.partial 装配+校验通过才对换,任何失败零残留;verify_tree 统一校验
(必需工具 postgres/initdb/pg_ctl/pg_dump/pg_restore + lib/share 在位 +
版本右锚定匹配);幂等短路零下载,残缺树不短路触发重建。

release.yml:双平台去 PG_ARTIFACT_BASE_URL 门控无条件 fetch;macOS brew 步
不以 cache-hit 门控(坏缓存重建需 keg 兜底)且主版本从 pg-version.txt 推导;
cache key 加 upstream.lock hash+模式判别子;publish 顺带 QG-6 checksums.txt
(sha256+pipefail)。ci.yml release-scripts 挂 fetch_binaries_test.sh。

评审修复(3 镜头对抗+独立复跑):P2 upstream.lock CRLF 形态防护
(.gitattributes 锁 LF+lock_get tr -d '\r');P3 全修=verify 补 lib/share、
版本锚定防 17.2 匹配 17.20、陈旧 .partial 先于幂等短路清理、测试工具循环
恒真 pass、GNU-only 依赖双轨化、补 Task 9 坏树重建覆盖;文档一致性 9 处
(MASTERPLAN 现状/阻塞名单/模型侧清单、ROADMAP、BUILD-RELEASE 预算与
§13.4、ARCHITECTURE §14.3/14.4 幽灵脚本名、CMake/Podfile 注释);macOS
跨架构误标记 BOARD 债。

验证:fetch_binaries_test.sh 9 Task 38 断言绿(先红后绿);release_tag_test
17 断言绿;本机真栈验收=真 EDB 下载→SHA 校验→裁剪 82MB→postgres.exe
--version=17.2→realpg E2E 全链绿(initdb SCRAM/pg_ctl/迁移 v7/pg_dump/
pg_restore 对换/teardown);flutter analyze 0 issue;全量测试 1720 过 0 败。
mac 侧待 release CI 首跑验证(已如实记 BOARD/MASTERPLAN)。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant