Skip to content

fix(ci): unify ax-errno resolution before release - #1930

Merged
ZR233 merged 1 commit into
devfrom
codex/fix-release-ax-errno-resolution
Aug 9, 2026
Merged

fix(ci): unify ax-errno resolution before release#1930
ZR233 merged 1 commit into
devfrom
codex/fix-release-ax-errno-resolution

Conversation

@ZR233

@ZR233 ZR233 commented Aug 9, 2026

Copy link
Copy Markdown
Member

问题

release-plz 的工作区发布预检在打包 starry-kernel 时失败。kbpf-basic 0.6.0 通过传递依赖声明 ax-errno ^0.6.0,但现有 Cargo.lock 仍将这条依赖解析到 crates.io 的 ax-errno 0.6.2;与此同时,工作区直接依赖使用 path 来源的 ax-errno 0.6.3

Cargo 在发布打包时会把 path 依赖改写为 registry 依赖,因此 registry/path 双来源会在同一发布依赖图中发生冲突。这个冲突出现在全工作区上传前预检阶段;若缺少该预检,则可能在部分 crate 已上传后才暴露问题,形成半发布状态。

修改

  • 在根 Cargo.toml 使用 Cargo 官方的 [patch.crates-io],将 crates.io 上的 ax-errno 统一替换为 components/axerrno
  • 重新生成 Cargo.lock,移除 registry 来源的 ax-errno 0.6.2,使包括 kbpf-basic 在内的依赖边全部解析到 path 来源的 ax-errno 0.6.3
  • 在 release-plz workflow 的全局环境固定 RUSTUP_TOOLCHAIN=stable,使 release PR 与 release 发布任务使用相同的 stable Cargo 行为。
  • 保留 dependencies_update = true、release-plz 的拓扑顺序发布行为,以及上传前的 cargo publish --workspace --dry-run --no-verify 全工作区预检。

方案逻辑

kbpf-basic 并未锁死 ax-errno 0.6.2,其 ^0.6.0 版本要求能够接受 0.6.3;真正锁定旧版本的是工作区锁文件。根级 [patch.crates-io] 会作用于整个依赖图,因此既覆盖工作区直接依赖,也覆盖 registry crate 的传递依赖,从源头消除双来源解析,而不需要修改上游 crate 或放宽发布检查。

全工作区预检继续承担发布事务边界:只有所有待发布 crate 都能按拓扑完成打包后,release-plz 才进入实际上传流程。

本地验证

  • cargo +stable metadata --locked --format-version=1:通过;依赖图仅包含 path 来源的 ax-errno 0.6.3
  • cargo +stable publish --manifest-path os/StarryOS/kernel/Cargo.toml --dry-run --no-verify:成功进入 starry-kernel 打包;随后按预期因同批待发布的 ax-alloc 0.8.15 尚未存在于 crates.io 而停止,说明单包模式无法表达本次多 crate 拓扑发布。
  • cargo +stable publish --workspace --dry-run --no-verify:通过;ax-errno 0.6.3ax-alloc 0.8.15starry-kernel 0.7.7starryos 0.5.28 均完成打包,命令退出码为 0。
  • cargo xtask clippy --package starry-kernel:通过,25/25 checks passed。
  • cargo fmt --all -- --check:通过。
  • git diff --check:通过。

本地全工作区预检在与 GitHub Actions 相同的 clean worktree 中执行,避免本机 ignored 生成文件影响 Cargo 的 dirty-tree 检查。

mai-team-app[bot]
mai-team-app Bot previously requested changes Aug 9, 2026

@mai-team-app mai-team-app Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

本 PR 为 release-plz 发布预检的依赖解析修复:固定 stable toolchain、更新锁文件,并尝试统一 ax-errno 解析。它不新增用户可见功能、公共 API、syscall 或 app;因此 feature-development、syscall 与 app 运行验证不适用。

发现 1 个阻塞问题:新增的 [patch.crates-io] 不符合仓库强制依赖策略,且会使工作区与发布后消费者的解析条件不同,详见行内评论。

验证:组织 CI(当前 head)中的路径路由、同步检查和格式检查均成功;大量 skipped 是 host/container 矩阵分支。git diff --checkcargo fmt --all -- --checkcargo +stable metadata --locked --format-version=1 --no-deps 本地通过。未执行重复的全工作区测试,因为当前组织 CI 已覆盖相关检查;未发现历史 review/comment,相关开放 PR 搜索未见独立的重叠实现。

最终 todo 审计:改动文件、发布语义、锁文件和右侧锚点已核验;唯一未解决项为下述阻塞问题。建议移除该 patch 后,使用正常 registry 解析下可发布的依赖升级或明确的边界适配重新验证发布预检。

Powered by gpt-5.6-terra

Comment thread Cargo.toml
kmod-tools = "0.3"
kprobe = "0.6"

[patch.crates-io]

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

阻塞(依赖解析策略):这里新增了工作区级 [patch.crates-io],会覆盖整个依赖图中 ax-errno 的 crates.io 解析。项目的依赖策略明确禁止任何 crates.io patch(包括本地 path 覆盖);该覆盖只在工作区内生效,发布后的消费者不会继承它,因而本地/发布依赖图可能不一致。请移除该 patch,保持正常 registry 解析,并在边界处做显式适配或采用上游可发布的依赖升级方案。

@mai-team-app
mai-team-app Bot requested a review from ZCShou August 9, 2026 08:26
@ZR233 ZR233 linked an issue Aug 9, 2026 that may be closed by this pull request
@ZR233
ZR233 merged commit 339a022 into dev Aug 9, 2026
132 of 150 checks passed
@ZR233
ZR233 deleted the codex/fix-release-ax-errno-resolution branch August 9, 2026 09:52
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.

ci: publish dry-run fails on unpublished ax-errno 0.6.3

1 participant