# Test CI Job generation

The CI jobs for these tests are managed by `build-workflows.py`.

If you add a test file, or move one to another directory, please run `build-workflows.py`.
Tests are recognized by the file glob `test_*.py`.
Changing the contents of a file does not require running `build-workflows.py`.

We currently use github actions. Default runners have two vcpus.
The workflows are located in [../.github/workflows/](https://github.com/Chia-Network/chia-blockchain/tree/main/.github/workflows).

The inputs to `build-workflows.py` are the templates in `runner-templates`, the file `testconfig.py` in this directory, and the optional `config.py` files in some test subdirectories.
Files in the template directory ending in `include.yml` are included in jobs based on the per-directory settings.

The generated workflows are output to `../.github/workflows/`.

Each subdirectory below the directories `root_test_dirs` in `testconfig.py` becomes a job in the github workflow matrix.
If your jobs run too long, simply move some tests into new subdirectories and run `build-workflows.py`.
A workflow built from a parent directory does not include the tests in its subdirectories.
The subdirectory jobs do not include the tests from their parents.

## testconfig.py

In the top tests directory, [testconfig.py](https://github.com/Chia-Network/chia-blockchain/tree/main/tests/testconfig.py)
contains the application settings and the per-directory default settings.

## config.py

Each directory has an optional `config.py` file, which can override the per-directory default settings.

Per directory settings defaults:

```
parallel = False
checkout_blocks_and_plots = True
install_timelord = True
job_timeout = 30
```

### Parallel test execution

If you are certain that all the tests in a directory can run in parallel, set `parallel = True` in `config.py` inside that directory.

### Optional job stages

Set `checkout_blocks_and_plots` to `False` to omit checking out the [test-cache](https://github.com/Chia-Network/test-cache) repo.

Set `install_timelord` to `False` to omit the step of installing a Time Lord for your directory's job.

### Job Timeout

Set `job_timeout` to the number of minutes you want the CI system to wait before it kills your job.
Add two or three minutes to allow for job setup.
