|
1 | | -# Evergreen Notes |
| 1 | +# Evergreen |
| 2 | + |
| 3 | +See [Evergreen Build System Architecture](architecture.md) for more details. |
2 | 4 |
|
3 | 5 | ## mongo-php-toolchain |
4 | 6 |
|
5 | 7 | [10gen/mongo-php-toolchain](https://github.com/10gen/mongo-php-toolchain) is |
6 | 8 | responsible for building PHP binaries that will be distributed to Evergreen |
7 | 9 | hosts. |
8 | 10 |
|
9 | | -The Debian and RHEL toolchain scripts are responsible for building individual |
10 | | -toolchains for each variant (e.g. PHP version, architecture). Debian and RHEL |
11 | | -are separate primarily for reasons related to OpenSSL. |
12 | | - |
13 | 11 | ## drivers-evergreen-tools |
14 | 12 |
|
15 | 13 | [mongodb-labs/drivers-evergreen-tools](https://github.com/mongodb-labs/drivers-evergreen-tools) |
16 | | -consists of common scripts used by many drivers (e.g. Mongo Orchestration). The |
17 | | -PHP driver clones this during the build process. |
18 | | - |
19 | | -In some cases, we have modified scripts in the drivers-evergreen-tools |
20 | | -repository. For instance, the PHP driver uses its own `run-orchestration.sh` |
21 | | -script but still relies on the common `stop-orchestration.sh` script. |
22 | | - |
23 | | -## PHP driver Evergreen configuration |
24 | | - |
25 | | -`$PROJECT_DIRECTORY` is set by Evergreen and denotes the directory where the PHP |
26 | | -driver is built and tested (i.e. git checkout directory). |
27 | | - |
28 | | -Various files have been copied and modified from drivers-evergreen-tools: |
29 | | - |
30 | | - * `compile.sh`: This is the main entry point for building the driver and will |
31 | | - either call `compile-unix.sh` and `compile-windows.sh`; however, Windows |
32 | | - builds use a Cygwin environment and are not yet supported. |
33 | | - * `compile-unix.sh`: This includes architecture-specific flags and is used for |
34 | | - both Linux and macOS builds. |
35 | | - * `run-orchestration.sh`: This is very similar to the drivers-evergreen-tools |
36 | | - script but it is customized to use the PHP driver's own topology configs for |
37 | | - Mongo Orchestration. |
38 | | - * `start-orchestration.sh`: This is modified to install an older, tagged |
39 | | - version of Mongo Orchestration. This was necessary for a particular platform, |
40 | | - but may be something to look into in the future. |
41 | | - |
42 | | -The PHP driver's `config.yml` is a very stripped down and heavily modified copy |
43 | | -of the drivers-evergreen-tools configuration. This file starts by defining |
44 | | -several functions, which consist of one or more commands (types supported by |
45 | | -Evergreen). |
46 | | - |
47 | | -In the case of the `bootstrap mongo-orchestration` function, we execute our |
48 | | -modified `run-orchestration.sh` script and assign various environment variables |
49 | | -which have been defined by our matrix configuration (excluding the |
50 | | -`$PROJECT_DIRECTORY`, which is set by Evergreen itself). |
51 | | - |
52 | | -In `run tests`, we also depend on environment variables (e.g. `$MONGODB_URI`) |
53 | | -that originates in `run-orchestration.sh` and are unpacked and assigned by the |
54 | | -`expansions.update` command within the `bootstrap mongo-orchestration` function. |
55 | | -Since Evergreen functions do not return values, assigning environment variables |
56 | | -is the preferred way to communicate down the line. |
57 | | - |
58 | | -The `pre` and `post` block define a sequence of functions to run before and |
59 | | -after each build, respectively. |
60 | | - |
61 | | -Build variants are the top-level scope in Evergreen. They consist of a list of |
62 | | -tasks (i.e. a square in Evergreen output) and a matrix. The matrix specification |
63 | | -is the combination of all included axes. For instance, the `tests-php5` matrix |
64 | | -may consist of all OS types with PHP5, MongoDB server version 4.0 (we need not |
65 | | -test all server versions), and lastly one or more specific PHP 5.x versions. |
66 | | -Such a matrix might yield a dozen variants, which will be run for each task in |
67 | | -the build variant configuration. The `display_name` option determines how the |
68 | | -build variant (combination of matrix and all tasks) is labeled in the Evergreen |
69 | | -UI. |
70 | | - |
71 | | -The `axes` block defines a list of values for a specific group or ID, which is |
72 | | -used when defining a matrix. For instance, if a matrix includes 4 axes, it will |
73 | | -expand to all possible combinations of values within those axes. Care should be |
74 | | -taken to not create too many redundant combinations when defining matrices. |
75 | | - |
76 | | -The `exclude_spec` field within a build variant allows us to exclude one or more |
77 | | -combinations from the generated matrix. We typically use this to exclude an |
78 | | -environment we know is not supported (e.g. MongoDB 3.0 and 3.2 on zSeries). |
| 14 | +consists of common scripts used by many drivers (e.g. starting |
| 15 | +[mongo-orchestration](https://github.com/10gen/mongo-orchestration)). The PHP |
| 16 | +driver clones this during the build process. |
0 commit comments