GitHub iOSチームは、GitHub Actionsを使ったアプリのビルドとテストにかかる時間を短縮するために、Apple Siliconを搭載したmacOSランナーを採用した。その過程で、GitHub Actionsの並列性をより活用できるようにアプリのリファクタリングも行った。
Apple Siliconランナーにはいくつかの利点があると、GitHubエンジニアのStephen Glass氏とEli Perkins氏は説明する。
Apple Siliconはビルドのパフォーマンスを向上させ、信頼性を高め、iOSチームはソフトウェア開発のライフサイクルを通じて、すべてのAppleプラットフォームに対してネイティブにテストできます。クロスコンパイルやエミュレーションによる問題を回避し、GitHub Actionsのランナーイメージで最新のシミュレーターを使えます。
さらに、Apple Siliconランナーを使うことで、iOS、iPadOS、watchOS、tvOSの最新リリースとコードの互換性を確保できる、とGitHubは言う。
GitHubチームはこの移行を機に、ワークフローを他にもいくつか最適化した。
Apple Siliconランナーへの移行を開始したとき、彼らはIntelベースのランナーで38分かかる単一のビルド・テスト・ワークフローを使っていたとGlass氏とPerkins氏は語る。
彼らが最初に行ったのは、アプリに約60のファーストパーティモジュールが含まれており、そのほとんどが単独でビルドとテストが可能である事実を利用するために、テストスイートを別々のジョブに分割することだった。この変更だけで、PRのターンアラウンドタイムが大幅に改善されたとGlass氏とPerkins氏は言う。いくつかのモジュールは、Apple Silicon上でわずか2〜3分でビルドしてテストでき、開発者にほぼ即座にフィードバックを提供できたからだ。
もう一つの注目すべき改善点は、xcodebuildのbuild-without-testingとtest-without-buildingを使って、ビルドステップとテストステップを分離したことで、長時間実行される単体テストを特定し、さらに最適化が可能になった。
全体として、Apple Silicon上で単一のワークフローからモジュールごとのビルドとテストのワークフローに移行することで、ビルド時間を38分から15分に短縮可能になった。
ベータ版ではあるが、Apple Siliconランナーにはいくつかの既知の制限がある。特に、コミュニティが提供するすべてのアクションがarm64アーキテクチャと互換性があるとは限らない。さらに、ネストされた仮想化やMetal Performance Shaders(MPS)といった一部の高度な機能は、アップルの仮想化フレームワークの制限により利用できない。
GitHub Actionsでは、エンタープライズ・アカウントでは最大50人、GitHub FreeおよびTeamプランでは最大5人の同時実行が可能だ。公開レポではM1プロセッサを使用できるが、より強力なハードウェアは有料で利用できる。