跳转至

发布 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。源码分发不是已 发布产物的一部分。

一次性设置

  1. 创建名为 pypi 的 GitHub environment。不要要求 reviewer;把部署限制到 匹配 v* 的 tag。
  2. 在 PyPI 发布设置中添加 pending Trusted Publisher:
  3. PyPI project: persisting
  4. GitHub owner: DeepLink-org
  5. Repository: Persisting
  6. Workflow: release.yml
  7. Environment: pypi

GitHub 中不存放 PyPI API token。pending publisher 可以在首次成功上传时 创建项目,但不预留名称。

准备一次发布

  1. 在 pyproject.toml、Cargo.toml 的 workspace package 段以及 persisting/__init__.py 中更新同一 X.Y.Z 版本。
  2. 刷新 lockfile 中的本地 workspace 版本,且不升级依赖:
cargo metadata --format-version 1 --no-deps >/dev/null
  1. 提交版本变更并合并到 main。工作流会拒绝其 commit 无法从 main 到达 的 tag。
  2. 可选地手动运行 Publish PyPI。手动运行会构建并校验全部 wheel,但不 发布它们。
  3. 创建并推送匹配的稳定 tag:
git tag vX.Y.Z
git push origin vX.Y.Z

构建与校验路径

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 资源。

相关文档