![](http://mmbiz.qpic.cn/sz_mmbiz_jpg/YriaiaJPb26VOffgI3l2GdLzLI4SbDPL6oic7iaWq8IYX6SKX7o5KYzEWiaewiaOUVlOALKylN6AnpIrLd9S49rzL36A/640?wx_fmt=jpeg&from=appmsg)
![](http://mmbiz.qpic.cn/mmbiz_gif/YriaiaJPb26VPQqHC66RJFpttVIMWG83T3lWHahUD4bvhxlKSayjeV2ibvC5ydqklP9QHDPD3qHJM07TV3IfHstjA/640?wx_fmt=gif)
GitHub iOS 团队采用基于 Apple Silicon 的 macOS Runner 减少使用 GitHub Actions 构建和测试应用所需的时间。在此过程中,为了更好地利用 GitHub Actions 的并行性,他们还重构了应用。
对于 Apple Silicon Runner 带来的好处,GitHub 工程师 Stephen Glass 和 Eli Perkins 解释说:
Apple Silicon 改进了构建性能,提高了可靠性,使得 iOS 团队可以在整个软件开发生命周期内针对所有苹果平台进行本地测试。它们可以避免交叉编译或模拟存在的问题,并且使用了我们 GitHub Actions Runner 镜像上最新的模拟器。
此外,GitHub 表示,使用 Apple Silicon Runner 有助于确保代码与 iOS、iPadOS、watchOS 和 tvOS 的最新版本兼容。
利用这次迁移机会,GitHub 团队还对他们的工作流程做了一些其他优化。
Glass 和 Perkins 回忆说,一开始迁移到 Apple Silicon Runner 的时候,他们使用了单个 build-test 工作流,在基于英特尔处理器的 Runner 上需要 38 分钟才能完成。
他们首先将测试套件划分成不同的作业。正好,其应用包含大约 60 个第一方模块,其中大多数模块可以单独构建和测试。Glass 和 Perkins 表示,单是这一项修改就大大缩短了 PR 周转时间,因为有些模块在 Apple Silicon 上只花 2-3 分钟就可以完成构建和测试,开发者几乎立即就能获得反馈。
另一个值得注意的改进是,使用 xcodebuild 的 build-without-testing 和 test-without-build 将构建步骤与测试步骤分开,这样可以方便地识别出运行时间比较长的单元测试并进一步进行优化。
总的来说,从使用单个工作流到在 Apple Silicon 上使用逐模块构建和测试的工作流,使构建时间从 38 分钟减少到了 15 分钟。
Apple Silicon Runner 尚处于 Beta 测试阶段,已知还有一些限制。特别是,并不是社区提供的每个 Action 都可以与 ARM64 体系结构兼容。此外,由于苹果虚拟化框架的限制,一些高级功能,如嵌套虚拟化和 Metal Performance Shaders(MPS)都无法使用。
对于企业账户,GitHub Actions 可以使用多达 50 个并发 Runner,而对于 GitHub 免费和团队账户,则仅可以使用 5 个并发 Runner。公共存储库可以使用 M1 处理器,想要使用更强大的硬件则需要额外付费。
原文链接:
https://www.infoq.com/news/2024/06/github-actions-apple-silicon/
声明:本文由 InfoQ 翻译,未经许可禁止转载。