2018-09-06 20:25:12 +02:00
|
|
|
## On requirements (`*-requirements.txt`) files
|
|
|
|
|
|
|
|
MongoDB requires multiple pypa projects installed to build and test. To that end, we provide our own
|
|
|
|
`*-requirements.txt` files for specific domains of use. Inside each requirements file, there are
|
|
|
|
only include statements for component files. These files are the bare requirements for specific
|
|
|
|
components of our python environment. This separation allows us to avoid repetition and conflict in
|
|
|
|
our requirements across components.
|
|
|
|
|
|
|
|
For most developers, if you pip-install `dev-requirements.txt`, you have the python requirements to
|
|
|
|
lint, build, and test MongoDB.
|
|
|
|
|
|
|
|
## How to modify a pypa project requirement in a component
|
|
|
|
|
|
|
|
The most common edit of our requirements is likely a change to the constraints on a pypa project
|
|
|
|
that we already use. For example, say that we currently require `pymongo >= 3.0, < 3.6.0` in the
|
|
|
|
component `core`. You would like to use PyMongo 3.7, so you instead modify the line in
|
2019-05-06 21:33:46 +02:00
|
|
|
`etc/pip/components/core.req` to read `pymongo >= 3.0, != 3.6.0`.
|
2018-09-06 20:25:12 +02:00
|
|
|
|
|
|
|
## How to add a new component (`*.req`) file
|
|
|
|
|
|
|
|
Occasionally, we will require a set of pypa projects for an entirely new piece of software in our
|
|
|
|
repository. This usually implies adding a new component file. For example, say that we need to add
|
|
|
|
a logging system to both local development and evergreen. This system requires the fictional pypa
|
|
|
|
project `FooLog`. So we add a file `foolog.req` and require it from both `dev-requirements.txt` and
|
|
|
|
`evgtest-requirements.txt`. Like the majority of our components, we want it in the toolchain, so we
|
|
|
|
also add it to `toolchain-requirements.txt`. The workflow will usually look like:
|
|
|
|
|
|
|
|
```
|
|
|
|
$ # Make the component file
|
|
|
|
$ echo "FooLog" >etc/pip/components/foolog.req
|
|
|
|
$ # Require the component from the requirements files
|
|
|
|
$ echo "-r components/foolog.req" >>etc/pip/dev-requirements.txt
|
|
|
|
$ echo "-r components/foolog.req" >>etc/pip/evgtest-requirements.txt
|
|
|
|
$ echo "-r components/foolog.req" >>etc/pip/toolchain-requirements.txt
|
|
|
|
```
|
|
|
|
|
|
|
|
## How to add a new requirements (`*-requirements.txt`) file
|
|
|
|
|
|
|
|
Rarely, we will have an entirely new domain of requirements that is useful. In this case, we need to
|
|
|
|
at least make a new requirements file. For example, say we want to make a requirements file for
|
|
|
|
packaging our code. We would need most of the requirements for `dev-requirements.txt` but the
|
|
|
|
testing has already been done in our continuous integration. So we create a new file
|
|
|
|
`package-requirements.txt` and require a smaller subset of components. The new file at
|
|
|
|
`etc/pip/package-requirements.txt` would look like this:
|
|
|
|
```
|
|
|
|
-r components/platform.req
|
|
|
|
-r components/core.req
|
|
|
|
|
|
|
|
-r components/compile.req
|
|
|
|
-r components/lint.req
|
|
|
|
```
|