Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3076)

Unified Diff: docs/ios_infra.md

Issue 2667253003: Add iOS infra documentation (Closed)
Patch Set: Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698