发布 Persisting¶
稳定发布由 GitHub Actions 从版本 tag 构建,并通过 Trusted Publishing 发布到 PyPI。项目仍然以 Python wheel 交付,但不包含 PyO3 扩展,也不使用 Maturin。
每个平台 wheel 标记为 py3-none-<platform>,并包含:
- Python
persisting包; - 原生
pchronicle命令; - 捆绑的 pChronicle Web 资源;
当前发布集包含 Linux x86_64 和 Apple Silicon macOS wheel。源码分发不是已 发布产物的一部分。
一次性设置¶
- 创建名为
pypi的 GitHub environment。不要要求 reviewer;把部署限制到 匹配v*的 tag。 - 在 PyPI 发布设置中添加 pending Trusted Publisher:
- PyPI project:
persisting - GitHub owner:
DeepLink-org - Repository:
Persisting - Workflow:
release.yml - Environment:
pypi
GitHub 中不存放 PyPI API token。pending publisher 可以在首次成功上传时 创建项目,但不预留名称。
准备一次发布¶
- 在
pyproject.toml、Cargo.toml的 workspace package 段以及persisting/__init__.py中更新同一X.Y.Z版本。 - 刷新 lockfile 中的本地 workspace 版本,且不升级依赖:
- 提交版本变更并合并到
main。工作流会拒绝其 commit 无法从main到达 的 tag。 - 可选地手动运行 Publish PyPI。手动运行会构建并校验全部 wheel,但不 发布它们。
- 创建并推送匹配的稳定 tag:
构建与校验路径¶
PEP 517 backend 是 setuptools,配合仓库自有的
scripts/packaging/build_backend.py。组装 wheel 之前,它会构建 pChronicle Rust
CLI,并确保 Dioxus bundle 存在。setup.py 把 wheel 标为
平台相关,同时把 Python 与 ABI tag 保持为 py3-none。
Linux wheel 使用 manylinux_2_28 / glibc 2.28 标签。当前 rustc libstd 需要 statx 与 copy_file_range,
manylinux2014 上没有这些符号。
每个 wheel 都会检查组件集和安装时 CLI smoke test。发布集检查随后要求每个 平台恰好一个受支持 wheel、版本匹配、包元数据有效,以及发布前产物大小有界。
对部分完成的 tagged 发布再跑一遍时,会跳过 PyPI 已经接受的文件,并补齐 缺失的 GitHub Release 资源。