博客
2024 年 7 月 23 日
2024 年 6 月 RubyGems 更新
欢迎来到 RubyGems 月度更新!作为我们在 Ruby Central 的工作的一部分,我们发布了上个月所做的工作的回顾。继续阅读以了解在 6 月对 RubyGems 和 RubyGems.org 做了哪些更新。
RubyGems 新闻
6 月份,我们发布了 RubyGems 3.5.12、3.5.13 和 3.5.14,以及 Bundler 2.5.12、2.5.13 和 2.5.14。这些版本带来了旨在提高 RubyGems 整体开发者体验的一系列增强功能和错误修复。显着的改进包括:即使在使用 binstubs
的情况下,改进 自动切换到已锁定的 Bundler 版本;修复使用 fallback_timeout
URI 选项时生成的重复配置密钥;修复如果锁定文件只在平台部分中包含“RUBY”,将 sorbet
添加到 Gemfile 时出现缓慢且不正确的解析。
本月团队完成的一些其他重要工作包括
使用 bundle gem
创建新宝石时,获得更好的开箱即用体验
- 一位用户向我们提醒了宝石创建过程中一个潜在的摩擦点:用户需要在运行 Bundler 和虚拟生成的测试之前,编辑 gemspec 中的所有 TODO。
- 问题在于,例如宝石的主页、源代码和变更日志 URI 等值虽然很重要,但并不是用户在创建新宝石时想到的(还没有)。他们只想开始使用新宝石。在许多情况下,输入此信息可以延迟到宝石构建/推送时间。
- 由于我们新增内部 RubyGems 方法来验证宝石有几种不同的用途——例如 RubyGems.org、Bundler 和 RubyGems——仅对 Bundler 更改验证(并由此在各个地方放松验证)风险太大。替代方案是在
Gem::Specification#validate
中添加新参数,感觉过于复杂。因此,我们添加了新的Gem::Specification#validate_for_resolution
方法供 Bundler 使用,它跳过 Bundler 使用本地 gemspec 工作时非必需的验证。
通过在 Gemfile.lock
文件中跟踪插件修复长期存在的插件问题
- 几年来,通过 Gemfile 指定的插件出现了一些令人沮丧的问题:它们不断被重新安装,并导致不必要的解析元数据被获取,即使在部署模式下也是如此。我们希望通过确保用户拥有流畅的使用体验,来鼓励他们创建和使用 Bundler 插件。
- 经过几轮迭代,我们意识到我们可以将插件视为常规宝石,因此可以通过锁文件来避免所有不必要的工作。因此,该解决方案最终很简单:将插件作为宝石包含在锁文件中。
- 我们需要在对锁文件进行更改时执行一些向后兼容的工作,但除此之外,我们期望这一解决方案能够解决大多数问题。
- 作为提供选择加入锁文件校验和功能的第一步,我们希望确保大多数 Bundler 规范使用精简索引(在底层保留校验和)。
- Bundler 规范当前默认使用回退到完整索引的功能。这是一个很罕见的运行模式,因为它要求所有依赖项 API 都出现故障。除此之外,完整索引不支持校验和。默认切换到使用精简索引会增强我们启用锁文件校验和的信心。
- 这是一个很大的 PR,其中包含了从跳过依赖项 API 的 file:// 源迁移到定位精简索引的虚拟 https 源的大量更改。让所有通过都有些棘手,但我们相信它还是安全的,因为大部分更改仅限于测试代码。
六月份,RubyGems 获得了 18 位作者提交的 153 个新提交。它们跨 231 个文件新增了 5,907 项并删除了 4,833 项。
RubyGems.org 新闻
本月在 RubyGems.org 上执行的更新反映了我们对改进用户体验、增强安全性以及实现平台现代化的坚定承诺。六月由 AWS、Fastly 和 DataDog 为 RubyGems.org 提供赞助托管。以下是团队本月工作的亮点
RubyGems 组织帐号
- 我们在为 RubyGems.org 构建一项新功能,该功能将提供组织帐号、成员资格并增强对 gem 权限的控制。该功能将为 gem 所有者提供对 gem 所有权和组织成员权限的更精确控制。
- 我们知道,在现有的 RubyGems.org 框架中引入此组织附加层需要细致入微,并且我们计划在不中断现有工作流的情况下引入此新功能。
- 本月,我们创建了用户流以识别潜在的挑战和临界情况,重构了权限模型以使用著名的 Pundit gem,并添加了基本模型以做好准备。
将 RubyGems.org 上的身份验证与最佳实践保持一致
- 今年 1 月,当我们发布有关 密码重置中 MFA 绕过 的详细信息时,显而易见的是,我们的 MFA 策略未以有助于我们减少错误的方式得到统一应用。我们有一些流程不遵循 OWASP 密码重置指南、电子邮件令牌或 MFA。
- @martinemde 一直在努力仔细重构 RubyGems.org 中的所有 MFA 交互点,增加测试覆盖率,并将 MFA 进程统一为一条代码路径。我们采用了 OWASP 和其他指南定义的用于保护身份验证进程的许多最佳实践。
- 一个示例是,我们现在已经停止了以前在密码更改或电子邮件验证后自动登录的做法,以确保所有可能导致会话的进程都必须通过完整的登录流程。
Ruby 生态系统新闻
下面我们将概述其他 Ruby 生态系统中激动人心的额外更新。
Ruby 工具箱
- 现如今,数据转储非常庞大,在本地导入它们可能需要数个小时。提供一个苗条的数据转储来获得一个现实但较小的本地开发数据集将很有帮助,从而为直接参与该网站的构建创造一个更便捷的方式。
- @colszowka 已将部分生产数据库导出添加到 Ruby 工具箱,从而更容易获得一个现实的数据集以用于开发目的。此外,现在有一个 devcontainer 设置,用于更轻松地进行本地或基于浏览器的开发环境设置,例如使用 Codespaces。
在 Ruby 工具箱上显示 RubyGems 的历史和最近的安全建议
- 为了提高透明度并且确保每个人都能获得最新的数据库信息,Christoph 目前正在开展一项工作,那就是将 Ruby 建议数据库导入到 Ruby Toolbox 中,以便在网站上显示安全建议。数据已经在导入中,剩下的步骤是将它实际显示在用户界面上。
六月期间,RubyGems.org 获得了 11 位作者提交的 110 次新的提交。211 个文件中,有 3,655 次添加和 2,518 次删除。
感谢
感谢所有 RubyGems 和 RubyGems.org 的贡献者们这个月所做出的贡献!我们对你们的贡献表示衷心的感谢,我们对你们的支持表示感激。
RubyGems 的贡献者
- @deivid-rodriguez David Rodríguez
- @hsbt Hiroshi Shibata
- @tompng Tomoya Ishida
- @sobrinho Gabriel Sobrinho
- @martinemde Martin Emde
- @nobu Nobuyoshi Nakada
- @MSP-Greg MSP Greg
- @kddnewton Kevin Newton
- @kateinoigakukun Yuta Saito
- @Earlopain Earlopain
- @alexeyschepin Alexey Schepin
- @x-yuri X Yuri
- @simi Josef Šimánek
- @ccmywish CCMyWish
- @thomasmarshall Thomas Marshall
- @jeromedalbert Jerome Dalbert
RubyGems.org 的贡献者
- @martinemde Martin Emde
- @segiddins Samuel Giddins
- @simi Josef Šimánek
- @colby-swandale Colby Swandale
- @jacklynhma Jacklyn Ma
- @nateberkopec Nate Berkopec
- @javier-menendez Javier Menéndez Rizo
- @hsbt Hiroshi Shibata
- @indirect André Arko
- @robbyrussell Robby Russell
- @gemmaro Gemmaro
- @okuramasafumi Okura Masafumi
- @hsbt Hiroshi Shibata
如果我们错过了谁,请告诉我们,以便我们能够在我们的欢呼声中加入你们!
通过访问 RubyGems 贡献指南 了解更多关于如何为 RubyGems 做贡献的信息。我们欢迎所有类型的贡献,包括错误修复、特性实现、编写和更新文档以及错误分类。