| Index: docs/ios_infra.md
|
| diff --git a/docs/ios_infra.md b/docs/ios_infra.md
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..cd4231269b943b967f41e105e4c72bb10bc50957
|
| --- /dev/null
|
| +++ b/docs/ios_infra.md
|
| @@ -0,0 +1,140 @@
|
| +# Continuous build and test infrastructure for Chromium for iOS
|
| +
|
| +See the [instructions] for how to check out and build Chromium for iOS.
|
| +
|
| +The Chromium projects use buildbot for continuous integration. This doc starts
|
| +with an overview of the system, then gives detailed explanations about each
|
| +part.
|
| +
|
| +[TOC]
|
| +
|
| +## Overview
|
| +
|
| +Commits are made using the [commit queue], which triggers a series of try jobs
|
| +to compile and test the proposed patch against Chromium tip of tree before
|
| +actually making the commit. If the try jobs succeed the patch is committed. A
|
| +newly committed change triggers the builders (or "bots") to compile and test
|
| +the change again.
|
| +
|
| +## Bots
|
| +
|
| +Bots are slaves attached to a buildbot master (or "waterfall"). A buildbot
|
| +master is a server which polls for commits to a repository and triggers workers
|
| +to compile and test new commits whenever they are detected. [chromium.mac] is
|
| +the main waterfall for Mac desktop and iOS. [tryserver.chromium.mac] serves
|
| +as the try server for Mac desktop and iOS.
|
| +
|
| +The bots know how to check out a given revision of Chromium, compile, and test.
|
| +
|
| +### Code location
|
| +
|
| +#### Master configs
|
| +
|
| +The masters are configured in [tools/build], a separate repository which
|
| +contains various infra-related scripts.
|
| +
|
| +#### Pollers
|
| +
|
| +[chromium.mac] uses a `GitilesPoller` which polls the Chromium repository for
|
| +new commits using the [gitiles] interface. When a new commit is detected, the
|
| +bots are triggered.
|
| +
|
| +#### Recipes
|
| +
|
| +The bots run [recipes], which are scripts that specify their sequence of steps
|
| +located in [tools/build]. An iOS-specific [recipe module] contains common
|
| +functionality that the various [iOS recipes] use.
|
| +
|
| +#### Configs
|
| +
|
| +Because the recipes live in another repository, changes to the recipes don't
|
| +go through the Chromium [commit queue] and aren't tested on the [try server].
|
| +In order to allow bot changes to be tested by the commit queue, the recipes
|
| +for iOS are generic instead of bot-specific, and rely on configuration files
|
| +which live in master-specific JSON config files located in [src/ios/build/bots].
|
| +These configs define the `gn_args` to use during compilation as well as the
|
| +tests to run.
|
| +
|
| +#### Scripts
|
| +
|
| +The [test runner] is the script which installs and runs the tests, interprets
|
| +the results, and collects any files emitted by the test ("test data"). It can
|
| +be found in [src/ios/build/bots/scripts], which means changes to the test runner
|
| +can be tested on the [try server].
|
| +
|
| +### Compiling with goma
|
| +
|
| +Goma is the distributed build system used by Chromium. It reduces compilation
|
| +time by avoiding recompilation of objects which have already been compiled
|
| +elsewhere.
|
| +
|
| +### Testing with swarming
|
| +
|
| +Tests run on [swarming], a distributed test system used by Chromium. After
|
| +compilation, configured tests will be zipped up along with their necessary
|
| +dependencies ("isolated") and sent to the [swarming server] for execution. The
|
| +server issues tasks to its attached workers for execution. The bots themselves
|
| +don't run any tests, they trigger tests to be run remotely on the swarming
|
| +server, then wait and display the results. This allows multiple tests to be
|
| +executed in parallel.
|
| +
|
| +## Try bots
|
| +
|
| +Try bots are bots which test proposed patches which are not yet committed.
|
| +
|
| +Request [try job access] in order to trigger try jobs against your patch. The
|
| +relevant try bots for an iOS patch are `ios-device`, `ios-device-xcode-clang`,
|
| +`ios-simulator`, and `ios-simulator-xcode-clang`. These bots can be found on
|
| +the Mac-specific [try server]. A try job is said to succeed when the build
|
| +passes (i.e. when the bot successfully compiles and tests the patch).
|
| +
|
| +`ios-device` and `ios-device-xcode-clang` both compile for the iOS device
|
| +architecture (ARM), and neither run any tests. A build is considered successful
|
| +so long as compilation is successful.
|
| +
|
| +`ios-simulator` and `ios-simulator-xcode-clang` both compile for the iOS
|
| +simulator architecture (x86), and run tests in the iOS [simulator]. A build is
|
| +considered successful when both compilation and all configured test succeed.
|
| +
|
| +`ios-device` and `ios-simulator` both compile using the version of [clang]
|
| +defined by the `CLANG_REVISION` in the Chromium tree.
|
| +
|
| +`ios-device-xcode-clang` and `ios-simulator-xcode-clang` both compile using the
|
| +version of clang that ships with Xcode.
|
| +
|
| +### Scheduling try jobs using buildbucket
|
| +
|
| +Triggering a try job and collecting its results is accomplished using
|
| +[buildbucket]. The service allows for build requests to be put into buckets. A
|
| +request in this context is a set of properties indicating things such as where
|
| +to get the patch. The try bots are set up to poll a particular bucket for build
|
| +requests which they execute and post the results of.
|
| +
|
| +### Compiling with the analyzer
|
| +
|
| +In addition to goma, the try bots use another time-saving mechanism called the
|
| +[analyzer] to determine the subset of compilation targets affected by the patch
|
| +that need to be compiled in order to run the affected tests. If a patch is
|
| +determined not to affect a certain test target, compilation and execution of the
|
| +test target will be skipped.
|
| +
|
| +[analyzer]: ../tools/mb
|
| +[buildbucket]: https://cr-buildbucket.appspot.com
|
| +[chromium.mac]: https://build.chromium.org/p/chromium.mac
|
| +[clang]: ../tools/clang
|
| +[commit queue]: https://dev.chromium.org/developers/testing/commit-queue
|
| +[gitiles]: https://gerrit.googlesource.com/gitiles
|
| +[instructions]: ./ios_build_instructions.md
|
| +[iOS recipes]: https://chromium.googlesource.com/chromium/tools/build/+/master/scripts/slave/recipes/ios
|
| +[recipe module]: https://chromium.googlesource.com/chromium/tools/build/+/master/scripts/slave/recipe_modules/ios
|
| +[recipes]: https://chromium.googlesource.com/infra/infra/+/HEAD/doc/users/recipes.md
|
| +[simulator]: https://developer.apple.com/library/content/documentation/IDEs/Conceptual/iOS_Simulator_Guide/Introduction/Introduction.html
|
| +[src/ios/build/bots]: ../ios/build/bots
|
| +[src/ios/build/bots/scripts]: ../ios/build/bots/scripts
|
| +[swarming]: https://github.com/luci/luci-py/tree/master/appengine/swarming
|
| +[swarming server]: https://chromium-swarm.appspot.com
|
| +[test runner]: ../ios/build/bots/scripts/test_runner.py
|
| +[tools/build]: https://chromium.googlesource.com/chromium/tools/build
|
| +[try job access]: https://www.chromium.org/getting-involved/become-a-committer#TOC-Try-job-access
|
| +[try server]: https://build.chromium.org/p/tryserver.chromium.mac/waterfall
|
| +[tryserver.chromium.mac]: https://build.chromium.org/p/tryserver.chromium.mac/waterfall
|
|
|