Skip to content

chore: dev → main(统一 tag 三产品发布 + main 目录归位 navop_app) - #493

Merged
feigeCode merged 2 commits into
mainfrom
dev
Oct 31, 2026
Merged

feigeCode merged 2 commits into
mainfrom
dev

Conversation

@feigeCode

Copy link
Copy Markdown
Owner

本 PR 把 dev 上两个提交合入 main。

1. b696f4ddb feat(release): 统一 tag 三产品发布,独立产品接入自更新链路

动机:navop / navop-shell / navop-data 原先各自发版,独立产品还要单独跑一段 standalone-products.yml 的矩阵,版本、产物命名、更新清单三处不同步。

修法

  • release.yml 的矩阵加 product 维度(products 输入 all / full / standalone 可裁剪),独立产品覆盖四个主力平台并复用全量的构建/打包/上传步骤;产物公开命名统一 {product}-{version}-{label},Windows 补裸 exe zip 供自更新器直连。
  • 版本校验(prepare job、release-tag.sh、beta-release.sh、release_pr.py)扩成四个 manifest(应用外壳 + 三个 app crate)统一比对。
  • upload-r2.yml 给三个产品各生成一份更新清单:全量 updates/latest.json,独立产品 updates/navop-shell/shell/latest.json、updates/navop-data/data/latest.json(beta 通道各插 beta/ 段),键位与 app_kit::update::config 的 feed_url() 一致。
  • app_kit::update::install 自更新安装器按运行时 identity 参数化 bundle/exe/binary 候选名;全量保留 OnetCli.app / onetcli.exe legacy 兼容。
  • 删除 standalone-products.yml,package-linux-product.sh 支持显式产物命名。

2. 46a597844 refactor(product-split): main 目录归位 crates/navop_app,包名统一 navop_app

根因:产品装配移出后 main/ 只剩库(没有 bin、没有产品装配),却仍占着仓库根目录、与 apps/* 并列,看起来像一个产品;包名 main 与 lib 名 navop_app 也不一致。

修法

  • git mv main crates/navop_app;[package] name 由 main 改为 navop_app(与 lib 名一致),删掉冗余 [lib] 块,根 members 同步。
  • 三个 app 改为直接相对路径依赖 navop_app = { path = "../../crates/navop_app" };不进 [workspace.dependencies](Cargo 不允许子 crate 再关继承来的 default-features)。
  • 26 处逃出 crate 根的 include_str! 各加一层 ../(resources/*、core/build.rs、apps/* 与 crates/*_view 的 Cargo.toml、app_kit 源码);build.rs 的 icon/manifest 路径同步。
  • env_file.rs 与 i18n_locale_keys_contract 的「工作区根」改为上两级;跨 crate 源码断言(core/window_close、db_view、one_ui、windows_rdp_host)指向新路径。
  • locales/main.yml 保持原名(i18n 命名空间与全仓 t!() key 绑定,改名是另一件事)。
  • 发布链路同步:release_pr.py(MANIFEST_PATH、lock_app_version、报错文案)、beta-release.sh 版本包名集合、release-tag.sh / ci.yml / release.yml / .github/RELEASE.md / AGENTS.md / CLAUDE.md 等文档的路径与 -p navop_app。
  • 顺带修两处未推送提交遗留的 CI 红线:app_kit::install::expected_binary_name 的 cfg 过宽(macOS dead_code)、测试里多余的 is_supported_app_bundle import;release PR 测试夹具补齐四个 manifest;windows_rdp_host 的 ALLOWED_FILES 断言对齐 release_pr.py 现状。

验证

  • cargo test -p navop_app:595 lib tests + 4 个集成契约(i18n / product_dependency_isolation / navigation_toggle_slot / workspace_order)全通过。
  • cargo test -p app_kit --lib:149 passed;cargo test -p windows_rdp_host --test contract:40 passed;cargo test -p one-ui --test dialog_footer_contract 通过。
  • cargo check -p navop_app -p app_kit -p one-core -p db_view -p db -p one-ui --all-targets、cargo build -p navop -p navop-shell -p navop-data 全通过;cargo check 无新增 rustc 警告。
  • python3 -m unittest discover -s script/tests:32 passed;node script/test-release-packaging.mjs、node --test scripts/ai/automation.test.cjs 全绿。
  • cargo metadata OK;cargo tree -p navop|navop-shell|navop-data --depth 1 均指向 navop_app v0.22.0 (crates/navop_app)。

说明

  • 不含 CHANGELOG.md 条目,不含版本 bump(四个 manifest 仍为 0.22.0)。
  • 真正的 navop_app → app_kit 逐块下沉(56k 行、大量 pub(crate) 与循环引用)留待后续按模块单独搬,方案与现状记在 docs/design/navop-product-split.md §28。

一个 tag 同时发布全量 navop、navop-shell、navop-data 三个产品:

- release.yml 矩阵加 product 维度(products 输入 all/full/standalone 可裁剪),
  独立产品覆盖四个主力平台,复用全量的构建/打包/上传步骤;独立产物公开命名
  统一 {product}-{version}-{label},Windows 补裸 exe zip 供自更新器直连。
- 版本校验(prepare job / release-tag.sh / beta-release.sh / release_pr.py)
  全部扩成四个 manifest(main + 三个 app crate)统一比对,app 版本对齐 0.22.0。
- upload-r2.yml 为三个产品各生成一份更新清单:全量 updates/latest.json,
  独立产品 updates/navop-shell/shell/latest.json 与 updates/navop-data/data/
  latest.json(beta 通道各插 beta/ 段),键位与 config.rs feed_url() 一致。
- install.rs 自更新安装器按运行时 identity 参数化 bundle/exe/binary 候选名,
  独立产品可自更新,全量保留 OnetCli.app / onetcli.exe legacy 兼容。
- 删除 standalone-products.yml(能力并入 release.yml);package-linux-product.sh
  支持显式产物命名并入统一发布;RELEASE.md 补统一发布与 products 输入文档。

验证:cargo test -p app_kit --lib 149 passed;clippy 无新告警;
node --test script/test-release-packaging.mjs 40/40;工作流 YAML 解析通过。
产品装配移出后 main 已只剩库,却仍占着仓库根目录、与 apps/* 并列,看起来像一个
产品。本次把它落回 crate 层:

- git mv main crates/navop_app;package name 由 main 改为 navop_app(与 lib 名
  一致),删掉冗余的 [lib] 块;根 members 同步。
- 三个 app 改为直接相对路径依赖 navop_app = { path = "../../crates/navop_app" },
  不进 workspace.dependencies(Cargo 不允许再关继承来的 default-features)。
- 26 处逃出 crate 根的 include_str! 各加一层 ../(resources/*、core/build.rs、
  apps/* 与 crates/*_view 的 Cargo.toml、app_kit 源码);build.rs 的 icon/manifest
  路径同步。
- env_file.rs 与 i18n_locale_keys_contract 的「工作区根」改为上两级;
  cross-crate 源码断言(core/window_close、db_view、one_ui、windows_rdp_host)指向
  新路径。
- locales/main.yml 保持原名:i18n 命名空间与全仓 t!() key 绑定,改名是另一件事。
- 发布链路同步:release_pr.py(MANIFEST_PATH、lock_app_version、报错文案)、
  beta-release.sh 版本包名集合、release-tag.sh / ci.yml / release.yml /
  .github/RELEASE.md / AGENTS.md / CLAUDE.md 等文档的路径与 -p navop_app。
- 顺带修两处未推送提交遗留的 CI 红线:app_kit::install 的
  expected_binary_name cfg 过宽(macOS dead_code)、测试里多余的
  is_supported_app_bundle import;release PR 测试夹具补齐四个 manifest;
  windows_rdp_host 的 ALLOWED_FILES 断言对齐 release_pr.py 现状。

验证:cargo test -p navop_app(595 lib + 4 集成契约)、-p app_kit(149)、
one-ui/windows_rdp_host 契约、三个 app cargo build、cargo check --all-targets
全通过;script/tests 32 项、release-packaging 与 scripts/ai 的 node 测试全绿。
@feigeCode
feigeCode merged commit 0372d9f into main Oct 31, 2026
8 checks passed
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