这个团队在做什么
每当 Rust 发布新版本、开发者提交 PR、crates.io 接收新包、docs.rs 构建文档,背后都有一套基础设施在默默运转。Rust 基础设施团队负责维护这套系统:CI 流水线、开发工具、访问控制、自动化机器人、以及支撑整个项目日常运作的各类服务。
这支团队每季度发布一篇工作回顾。2026 Q1 是工作量相当密集的一个季度:六个方向的完成项,其中 Triagebot 一项就覆盖了八个独立改进。以下逐一拆解。
Q1 完成项
一、迁移到 GitHub Rulesets
Rust 组织的 200 多个仓库长期使用 GitHub 的传统 Branch Protection Rules 来保护分支和标签。这套机制存在几个局限:配置项有限、无法通过 API 设置 Merge Queue、也不支持以代码方式管理(IaC)。
Q1 里,团队完成了向GitHub Rulesets的全面迁移,这是 GitHub 现在推荐的保护分支和标签的方式。主要仓库(rust-lang/rust)由于规模和复杂度特殊,迁移工作仍在进行中。
除了切换机制本身,团队还把所有相关配置项接入了team仓库,实现基础设施即代码(IaC)管理——这意味着分支保护策略的变更现在和代码变更一样,走 PR 审查流程,有历史记录,可以回滚。
新增的六个可配置项:
allowed-merge-apps:允许哪些应用触发合并merge-queue:是否启用合并队列prevent-deletion:防止分支被删除prevent-force-push:防止强制推送require-conversation-resolution:要求对话全部解决才能合并require-linear-history:要求线性提交历史
二、CI 安全性三项改进
安全性改进是基础设施团队每季度的常规项,Q1 有三件具体的事:
Renovate 自动化依赖更新:在team仓库和compiler-builtins仓库启用了 Renovate。Renovate 是一个机器人,定期扫描依赖版本,自动发 PR 更新 GitHub Actions 和 Rust 依赖。靠人工定期检查依赖更新是不可持续的,自动化是更合理的默认状态。
zizmor 安全扫描:在compiler-builtins的 CI 里,团队用 zizmor 扫描并修复了安全问题,为接下来在 CI 里更安全地运行 RISC-V 自托管 runner 做准备。
crates-io-auth-action升级:发布了 v1.0.4,更新依赖,并将运行时从 Node 20 迁移到 Node 24——GitHub 已宣布 Actions runner 上 Node 20 将被废弃。
三、两台新开发桌面,启用 IPv6
基础设施团队为 Rust 贡献者提供远程开发桌面(dev desktop)——这些是运行在云端的高配开发机,贡献者可以通过 SSH 连接,用于编译、测试等重型任务,不需要在本地机器上等待漫长的构建。
Q1 新增了两台:
dev-desktop-us-2.infra.rust-lang.org(美东)dev-desktop-eu-2.infra.rust-lang.org(欧洲)
同时为所有开发桌面启用了 IPv6 访问,让更多网络环境下的贡献者可以直接连接,不需要借助额外的网络配置。
四、docs.rs 实例扩容
crates.io 上的包发布量正在经历前所未有的增长。这直接传导到了 docs.rs——每发布一个新 crate,docs.rs 需要为它构建文档,发布量增长,构建队列就跟着增长。
应对方式是把 docs.rs 的服务器实例升级到更高配置:RAM 和 CPU 同时翻倍。这是一个短期应急措施,长期的基础设施现代化工作(从单一 EC2 实例迁移到托管架构)被列入了 Q2 计划。
五、SAML SSO 统一访问控制
团队引入了 Google SSO 作为 Rust 基础设施的身份验证方式,为基础设施团队成员启用了 Google Workspace 账号,并对 Datadog 和 Fastly 两个关键服务商完成了 SAML 配置验证。
这是在向统一身份管理方向推进的第一步——现在访问不同的基础设施服务,可以用同一套凭证体系,而不是每个服务各自管一套账号密码。
六、Triagebot 八项增强
Triagebot 是 Rust 项目的自动化工作流机器人,持续在 GitHub 和 Zulip 上处理各种协作任务:分配评审者、处理标签、响应命令、自动化流程通知。Q1 对它做了相当大量的改进。
1. Issue/PR 全量评论查看器
GitHub 对于很长的 Issue 和 PR 有一个众所周知的痛点:评论过多时,只显示最新的几条,需要反复点"Load More"才能看到完整讨论,而且加载过程非常慢。
Triagebot 现在提供了一个独立的查看器,支持一次性加载全部评论。在长 Issue 或 PR 顶部会出现一个"View all comments"链接,点击后可以看到完整的讨论线程。
这个功能在上线后快速迭代,一个季度内就增加了:
- 导出按钮:把整个讨论导出为独立文件
- 评审线程目录:对于长 PR,自动生成评审评论的目录
- 线程折叠/展开:控制哪些讨论线程展开显示
2. 组织级默认配置
Triagebot 有很多功能,每个仓库可以单独配置启用哪些。问题在于:rust-lang 组织有 200 多个仓库,靠每个仓库各自提 PR 来配置功能,覆盖率极不均匀。很多有用的功能,只有少数活跃仓库才有。
Q1 引入了组织级默认配置:一些功能可以在组织范围内统一启用,不需要每个仓库单独配置。即将在组织级启用的功能会通过 Zulip 提前公告,给维护者时间了解和准备。
3.user-info命令:辅助识别 AI 生成 PR
这是一个 Zulip 命令,最初的设计是查看某个 GitHub 用户最近的评论,后来扩展成了user-info命令,可以显示:
- 用户近期的 PR 和参与的仓库
- 账号的创建时间
用途:帮助评审者和维护者识别低质量的 AI 生成 PR。一个账号创建时间极短、活动集中在短时间内批量提交的 PR、且 PR 质量参差不齐,这些信号组合在一起往往说明问题。这个命令让评审者可以快速查到这些信息,而不需要自己去翻账号页面。
4. per-team 轮换模式
Triagebot 会自动给 PR 分配评审者,通常按照轮换制度来保证工作负载均匀分配。此前,是否启用轮换是仓库级别的设置,无法按团队细分。
现在可以通过 Zulip 命令work set-team-rotation-mode <team> off/on为特定团队单独配置轮换模式。这对于有些团队人数少、暂时不适合严格轮换的情况很有用。
5. 跨仓库的个人评审偏好
此前,贡献者设置个人评审偏好(比如"我这段时间不接新 PR")只对rust-lang/rust仓库生效,在其他仓库无效,即便 Triagebot 也在管理那些仓库的评审分配。
现在这个偏好可以跨仓库生效。如果你在 Triagebot 里设置了评审偏好,所有由 Triagebot 管理评审分配的仓库都会尊重它。
6. 封禁用户自动上报到 Moderator 频道
当 GitHub 组织里有用户被封禁时,Triagebot 现在会自动收集相关信息(封禁原因、问题评论、用户操作记录)并推送到 Zulip 的 Moderator 频道。
在此之前,版主需要手动截图、手动记录、手动归档——这是一项繁琐的重复性工作。自动化上报让版主可以把精力放在判断和决策上,而不是信息收集上。
7. Clippy lint 提名自动创建 Zulip FCP 话题
T-clippy 团队在讨论是否引入某个新 lint 时,需要走一个正式决策流程(FCP,Final Comment Period)。现在当他们在 GitHub 上提名一个 lint 讨论时,Triagebot 会自动在 Zulip 上创建对应的 FCP 话题,并在 GitHub 评论里回复 Zulip 话题的链接,双向打通讨论入口。
8. 两条新 Zulip 命令
新增了两个面向项目成员的操作命令:
backport [stable | beta] [approve | decline] <pr #>:用于在 Zulip 里批准或拒绝某个修复回归问题的 patch 进行反向移植assign-prio <issue #> [critical | high | medium | low | <empty>]:用于给 Issue 分配优先级标签,主要供编译器团队使用,但对所有人开放
Q2 计划
完成 Q1 未竟的目标
Q1 有几项工作没有完成,顺延到 Q2:
docs.rs 基础设施现代化:当前 docs.rs 跑在单一的 EC2 实例上,这是一个单点故障。Q1 虽然完成了容器镜像推送的改进(使用 GitHub OIDC 发布到 AWS ECR),但从单 EC2 迁移到现代托管部署的目标还没有达到,Q2 继续推进。
外部硬件 CI 策略文档:明确在外部硬件上运行 Rust CI 的要求和规范,让有意提供硬件资源的合作方知道门槛在哪里。
rust 主仓库的 Ruleset 迁移:rust-lang/rust是整个项目里最复杂的仓库,迁移工作比其他仓库要细致得多,Q2 完成。
SAML SSO 扩展:两个方向——把 Google Workspace 账号的分配写入team仓库实现自动化,以及把 AWS 接入 SAML 体系。
CI 安全性和开发体验继续改进
这个方向的具体工作还没有完全确定优先级,但列出了几个候选方向:
- 让更多 Rust 项目仓库更容易接入 Renovate,降低依赖更新的门槛
- 检查所有依赖的已知 CVE 漏洞
- 把 zizmor 这类静态分析工具扩展到更多 CI 工作流
- 使用 Datadog(Rust 基金会已加入 Datadog 开源计划)建立 CI 监控仪表盘,追踪任务时长和失败率
- 提升 CI 测试覆盖率的可见性
硬件安全密钥
Rust 基金会与 Yubico 达成了合作。团队计划为有关键基础设施访问权限的成员分发YubiKey硬件安全密钥,进一步保护对关键系统的访问——硬件密钥比纯软件方式的双因素认证要难以被攻击。
发放时间计划在 5 月的 Rust All Hands 期间进行。
小结
基础设施团队的工作有一个特点:做得好的时候,所有人都感觉不到它的存在。CI 按时跑完、docs.rs 能打开、PR 得到了合理的评审者分配、依赖安全漏洞被及时修复——这些是正常状态,也是这个团队的工作目标。
这份季报里几个值得单独关注的信号:
Triagebot 的user-info命令是一个现实信号。专门为识别 AI 灌水 PR 而开发一个工具,说明这已经是一个足够规模的问题,需要系统性手段来应对,而不只是靠评审者的经验判断。
docs.rs 的扩容是一个被动响应。RAM 和 CPU 翻倍是应急措施,根本原因是 crates.io 的发布量增长超过了预期。Q2 要做的现代化部署,才是对这个趋势的长期回应。
YubiKey 计划的意义。在 All Hands 上集中分发硬件安全密钥,背后是"关键基础设施访问安全"这个越来越被重视的议题。开源项目的基础设施一旦被攻陷,波及范围可以非常大,前车之鉴不少。
参考链接
- 原文:https://blog.rust-lang.org/inside-rust/2026/04/14/infrastructure-team-q1-recap-and-q2-plan/
- 上期 Q4 回顾:https://blog.rust-lang.org/inside-rust/2026/01/13/infrastructure-team-q4-2025-recap-and-q1-2026-plan/
- Triagebot 仓库:https://github.com/rust-lang/triagebot
- 开发桌面文档:https://forge.rust-lang.org/infra/docs/dev-desktop.html
- 参与贡献:https://github.com/rust-lang/infra-team