|
| 1 | +# ScriptedBuilder Buildbot Workers |
| 2 | + |
| 3 | +This directory contains code shared by LLVM Buildbot workers. The typical |
| 4 | +pipeline of a ScriptedBuilder-based builder is as follows. |
| 5 | + |
| 6 | +1. A commit is pushed to [main](https://github.com/llvm/llvm-project/tree/main) |
| 7 | + |
| 8 | +2. The [Buildbot master](https://lab.llvm.org/) polls the repository and finds |
| 9 | + new commits. It schedules build requests on every relevant worker. |
| 10 | + Alternatively, a build request of a specific llvm-project commit can be |
| 11 | + created using the "Force Build" or "Rebuild" buttons. |
| 12 | + |
| 13 | +3. When a worker is ready, the master sends the build steps determined by |
| 14 | + [ScriptedBuilder](https://github.com/llvm/llvm-zorg/blob/main/zorg/buildbot/builders/ScriptedBuilder.py) |
| 15 | + to the worker. |
| 16 | + |
| 17 | +4. The checkout step checks out llvm-project commit into a directory named |
| 18 | + `llvm.src` on the worker. |
| 19 | + |
| 20 | +5. The annotate step executes a predefined Python script from the llvm-project |
| 21 | + source tree on the worker. Its working directory is an initially empty |
| 22 | + sibling directory named `build`. The argument `--workdir=.` is passed to |
| 23 | + override the default build directory (which is different to avoid |
| 24 | + accidentally spilling clutter into the cwd) |
| 25 | + |
| 26 | +6. The script is expected to use the utilities from |
| 27 | + [`worker.py`](https://github.com/llvm/llvm-project/blob/main/.ci/buildbot/worker.py) |
| 28 | + to build LLVM. The `with w.step("stepname"):` pattern is used to visually |
| 29 | + separate additional steps in the [Buildbot GUI](https://lab.llvm.org/). |
| 30 | + |
| 31 | + |
| 32 | +## Reproducing Builds |
| 33 | + |
| 34 | +Users can execute the worker script directly to reproduce a build problem with |
| 35 | +a worker using the llvm-project source tree in which it is located. By default |
| 36 | +it will use a new directory with `.workdir` suffix (so it can be |
| 37 | +`.gitignore`-ignored) next to the script as build directory. |
| 38 | + |
| 39 | +The ScriptedBuilder system tries to keep all worker/build settings within the |
| 40 | +script, but some parameters can be overridden using command line parameters. |
| 41 | +For instance, `--jobs` overrides the Ninja and llvm-lit `-j` argument that the |
| 42 | +worker would use. Script should be written to honor these overrides where they |
| 43 | +apply, and may also add additional ones. |
| 44 | + |
| 45 | +See |
| 46 | +[`worker.py`](https://github.com/llvm/llvm-project/blob/main/.ci/buildbot/worker.py) |
| 47 | +or a |
| 48 | +[reference script](https://github.com/llvm/llvm-project/blob/main/polly/polly-x86_64-linux-test-suite) |
| 49 | +for further details. |
0 commit comments