Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Lyft iOS tooling infrastructure summary

Lyft iOS tooling infrastructure summary

A short presentation about Lyft's iOS tooling infrastructure presented at an informal meetup.

Brentley Jones

June 16, 2021
Tweet

More Decks by Brentley Jones

Other Decks in Programming

Transcript

  1. Scale Code • 9 apps • 100% Swift • App

    code: 22k files, 1.3m loc • Test code: 4k files, 300k loc People • 100 committers per month • 320 commits per week
  2. Continuous Integration Hardware • 100 Intel Mac minis, many AWS

    Linux containers • Macs are Bare Metal, managed with ARD Software • Buildkite, generated pipelines for many concurrent jobs • Xcode upgrades performed ASAP, single version supported • macOS upgrades performed as needed for Xcode
  3. Build Speed CI (Build + Test) • P50: 8 min

    • P95: 15 min Local (Build) • P50: 89-121 sec • P95: 205-621 sec
  4. Tooling • IDE: Xcode • Build System: Bazel • Dependency

    Management: Bazel + Artifactory • Caching: Currently Google RBE, evaluating others • Testing: XCTest & XCUITest
  5. Recent Updates SwiftUI Previews • Works with our Bazel Xcode

    integration Snapshot Tests • Checked with CI, a command can accept changes in PR CLI • Migrating away from our Makefile based solution Remote Execution • Evaluated a lot of solutions, finalizing soon • Up to 50% faster incremental builds
  6. Pain Points Growing codebase • Builds times increasing • More

    longer running tests (e.g. XCUITest) Bazel Xcode integration • “Not quite the same” (i.e. Run Script Phase) • Can only run a single test target • Flakiness (e.g. Indexing, debugging, profiling, etc.)
  7. Future plans Remote Execution • Repurpose about 66% of minis

    for runners Apple Silicon • Ensure Bazel fully works, try not to have 2x cache usage Improved Bazel Xcode integration • Possibly leveraging XCBBuildServiceProxy Use managed hardware • Possibly AWS EC2 minis