| Running mypy and mypyc tests in a Docker container |
| ================================================== |
| |
| This directory contains scripts for running mypy and mypyc tests in a |
| Linux Docker container. This allows running Linux tests on a different |
| operating system that supports Docker, or running tests in an |
| isolated, predictable environment on a Linux host operating system. |
| |
| Why use Docker? |
| --------------- |
| |
| Mypyc tests can be significantly faster in a Docker container than |
| running natively on macOS. |
| |
| Also, if it's inconvient to install the necessary dependencies on the |
| host operating system, or there are issues getting some tests to pass |
| on the host operating system, using a container can be an easy |
| workaround. |
| |
| Prerequisites |
| ------------- |
| |
| First install Docker. On macOS, both Docker Desktop (proprietary, but |
| with a free of charge subscription for some use cases) and Colima (MIT |
| license) should work as runtimes. |
| |
| You may have to explicitly start the runtime first. Colima example |
| (replace '8' with the number of CPU cores you have): |
| |
| ``` |
| $ colima start -c 8 |
| |
| ``` |
| |
| How to run tests |
| ---------------- |
| |
| You need to build the container with all necessary dependencies before |
| you can run tests: |
| |
| ``` |
| $ python3 misc/docker/build.py |
| ``` |
| |
| This creates a `mypy-test` Docker container that you can use to run |
| tests. |
| |
| You may need to run the script as root: |
| |
| ``` |
| $ sudo python3 misc/docker/build.py |
| ``` |
| |
| If you have a stale container which isn't up-to-date, use `--no-cache` |
| `--pull` to force rebuilding everything: |
| |
| ``` |
| $ python3 misc/docker/build.py --no-cache --pull |
| ``` |
| |
| Now you can run tests by using the `misc/docker/run.sh` script. Give |
| it the pytest command line you want to run as arguments. For example, |
| you can run mypyc tests like this: |
| |
| ``` |
| $ misc/docker/run.sh pytest mypyc |
| ``` |
| |
| You can also use `-k <filter>`, `-n0`, `-q`, etc. |
| |
| Again, you may need to run `run.sh` as root: |
| |
| ``` |
| $ sudo misc/docker/run.sh pytest mypyc |
| ``` |
| |
| You can also use `runtests.py` in the container. Example: |
| |
| ``` |
| $ misc/docker/run.sh ./runtests.py self lint |
| ``` |
| |
| Notes |
| ----- |
| |
| File system changes within the container are not visible to the host |
| system. You can't use the container to format code using Black, for |
| example. |
| |
| On a mac, you may want to give additional CPU to the VM used to run |
| the container. The default allocation may be way too low (e.g. 2 CPU |
| cores). For example, use the `-c` option when starting the VM if you |
| use Colima: |
| |
| ``` |
| $ colima start -c 8 |
| ``` |
| |
| Giving access to all available CPUs to the Linux VM tends to provide |
| the best performance. This is not needed on a Linux host, since the |
| container is not run in a VM. |