更新 Glean SDK

项目 FOG 使用发布为 gleanglean-core crates 的 Glean SDK,位于 crates.io 上。

这两个 crates 的版本包含在 mozilla-central 的多个位置。要更新所有这些版本,您应该使用命令 mach update-glean <version, like "54.1.0">

这是一个半手动过程。请注意 mach update-glean 的输出以获取说明,并仔细遵循说明。

Rust 依赖项的版本不匹配

其他已引入的 crates 可能需要与 Glean SDK 所需的相同依赖项的不同版本。Rust 依赖项的一般策略是在树中保留一个依赖项的唯一版本(参见 bug 1591555 中的注释 #8)。在现实中这可能很难做到,因为某些依赖项可能需要进行调整才能正常工作。可以遵循以下策略来决定版本不匹配

  • 如果版本仅 **在补丁版本方面有所不同**,Cargo 将保留引入的版本,除非某些其他依赖项固定了特定的补丁版本;假设它不会破坏 Glean SDK;如果确实如此,请按照后续步骤操作;

  • 如果 **引入的依赖项的版本** 比 Glean SDK 所需的版本更新(更高的主版本或次版本),请 在 Glean SDK 组件中提交错误报告,让 Glean 要求使用相同的版本;

    • 您将不得不放弃将 Glean SDK 更新到此版本。您需要等待 Glean SDK 更新其依赖项并发布新的 Glean SDK。然后,您需要更新到该新的 Glean SDK 版本。

  • 如果 **引入的依赖项的版本** 更旧(较低的主版本或次版本),请考虑将引入的版本更新到较新的版本;寻求最初引入该依赖项的人员的审查;如果这不可行或会破坏 mozilla-central 构建,则考虑在树中保留两个版本;请注意,此选项可能仅适用于小型 crates,并且需要更新 TOLERATED_DUPES 列表,位于 mach vendor 中(说明会在您操作过程中提供)。

保持版本同步

Glean SDK 和 glean_parser 目前作为单独的项目发布。但是,每个 Glean SDK 版本都需要特定的 glean_parser 版本。在更新其中一个或另一个时,请确保版本保持兼容。您可以在 Glean SDK 源码树中找到当前使用的 glean_parser 版本,例如在 sdk_generator.sh 中。

在大多数情况下,您应该在更新 SDK 之前先更新 glean_parser

主要版本更新的特殊注意事项

如果您要更新 Glean SDK 的主版本(例如从“32.x.y”更新到“33.z.a”),则需要采取特定的步骤。 application-services 存储库单独集成了 Glean SDK。它接受主版本内的任何版本,因此对于非主版本更新,它会愉快地遵循 mozilla-central 的引导。当进行主版本更新时,我们需要首先更新 application-services,允许它生成一个新的(每日)版本,并确保 mozilla-central 在切换到新的 Glean SDK 版本的同时拾取该版本。

要更新 application-services 使用的 Glean SDK 版本

  1. 如果团队中其他人以前做过并且有时间,请考虑不要自己操作。 设置 application-services 的构建和测试环境 非常简单,但并非微不足道。您可能会发现向他们寻求帮助更容易。

  2. 将 Glean SDK 的 git 子模块更新到最新版本的标签。例如:

    • cd components/external/glean

    • git checkout tags/v62.0.0

  3. 更新用于代码生成的 glean-build crate 依赖项

    • cargo update -p glean-build

  4. 更新 Gradle 的 Glean 依赖项版本以支持 Android

    • 编辑 gradle/libs.versions.toml 以指定例如 glean = "62.0.0"

  5. 更新 Xcode 的 Glean 依赖项版本以支持 iOS

    • 编辑 megazords/ios-rust/MozillaTestServices/MozillaTestServices.xcodeproj/project.pbxproj 以指定例如 minimumVersion = 62.0.0;,用于 glean-swift 包引用。

    • Xcode 还有一个锁定文件。如果您没有 Xcode,或者只是不想运行它,请编辑 megazords/ios-rust/MozillaTestServices/MozillaTestServices.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved 以指定新版本以及 mozilla/glean-swift 的新版本的 git SHA,例如 "revision" : "5c614b4af5a1f1ffe23b46bd03696086d8ce9d0d","version": "62.0.0"

  6. 运行 cargo test 以确保没有明显的错误。

  7. 提交您的 PR 以供审查并合并。

  8. 使您的 mozilla-central 更改依赖于自动更新机器人创建的补丁,以将 mozilla-central 更新到包含您的更改的新 application-services 版本。

    • 如果您等待一天,就会发生这种情况。查找自动提交的错误报告(例如)。

    • 如果您需要更快地操作,您可以要求 application-services 团队为您触发构建,然后自己编写补丁。

  9. 将整个堆栈推送到 try 以确保树能够协同工作。

  10. 当一切正常后,将整个堆栈提供给 Lando 以进行合并。