crates.io:开发更新
2025年7月11日 · Tobias Bieniek
代表 crates.io 团队
自2025年2月上次开发更新以来,我们持续对crates.io进行了重大改进。在这篇博客文章中,我们将向您介绍过去几个月中对crates.io所做的最新更改。
可信发布
我们很高兴地宣布,我们已经在crates.io上实现了"可信发布"支持,如RFC #3691中所述。这个功能的灵感来自PyPI团队在这一领域的优秀工作,我们要感谢他们带来的启发!
可信发布消除了从CI/CD流水线发布crate时对GitHub Actions secrets的需求。您现在可以直接在crates.io上配置信任的GitHub仓库,而无需管理API令牌。然后,该仓库被允许使用OpenID Connect(OIDC)以安全方式请求短期API令牌进行发布。虽然可信发布目前仅限于GitHub Actions,但我们构建的方式允许将来支持其他CI/CD提供商,如GitLab CI。
要开始使用可信发布,您需要手动发布第一个版本。之后,您可以为将来的版本设置可信发布。详细文档可在 https://crates.io/docs/trusted-publishing 获取。
以下是设置GitHub Actions使用可信发布的示例:
|
|
OpenGraph图像
之前,crates.io对所有页面使用单一的OpenGraph图像。我们现在实现了动态OpenGraph图像生成,每个crate都有一个专用图像,在发布新版本时会重新生成。
这些图像包括crate名称、关键词、描述、最新版本(或者更准确地说,我们为crate显示的默认版本)、发布数量、许可证和crate大小。当crates.io链接在社交媒体平台或聊天应用程序中共享时,这提供了更有用的信息。
图像生成已提取到一个专门的crate中:crates_io_og_image(GitHub)。我们还在PR #3中添加了基本的主题支持,以允许docs.rs重用他们自己的OpenGraph图像的代码。
在底层,图像生成使用了另外两个优秀的Rust项目:Typst用于布局和文本渲染,oxipng用于PNG优化。
docs.rs重建
crate所有者现在可以直接从crates.io上的crate版本列表触发docs.rs的文档重建。当docs.rs构建失败时,或者当您想要利用新的docs.rs功能而不必仅仅为此发布新版本时,这可能很有用。
我们要感谢我们的crates.io团队成员@eth3lbert在PR #11422中实现了此功能的初始版本。
此增强功能也由@eth3lbert在PR #11441中实现,基于@kbdharun的初步工作。
其他改进
这些是过去几个月中对crates.io的一些更明显的变化,但"底层"也发生了很多事情。以下是一些示例:
电子邮件系统重构
之前,我们使用format!()宏和字符串连接来创建电子邮件,这使得它们难以维护且样式不一致。我们已经迁移到minijinja crate,现在使用模板代替。
新系统包括一个模板继承系统,用于在所有电子邮件中保持一致的品牌形象。此更改还使我们能够在将来支持HTML电子邮件。
SemVer排序优化
之前,我们必须从数据库加载所有版本并在API服务器上按SemVer排序,这对于具有许多版本的crate来说效率低下。我们的PostgreSQL提供商不支持semver扩展,因此我们必须在应用程序代码中实现排序。
PR #10763利用PostgreSQL中的JSONB支持及其btree排序规范,在数据库端实现SemVer排序。这减少了我们API服务器的负载,并提高了具有许多版本的crate的响应时间。
反馈
我们希望您喜欢这次关于crates.io开发的更新。如果您有任何反馈或问题,请在Zulip或GitHub上告诉我们。我们始终很高兴收到您的来信,并期待您的反馈!