# Fabriform

A declarative infrastructure-as-code framework built on Fabric for automating bare-metal provisioning, VM orchestration, and service deployment.

## Building, Developing, and Testing

This requires a compatible version of Python in your path from which the path to the interpreter can be gleaned by running `which python<version>`.  See the `requires-python` entry in `pyproject.toml` at the root of the repo for the currently required version of Python.

### Building a Distribution

```bash
python -m build && twine check dist/*
```

### Dependency Management

First-order dependencies for `requirements.txt`, `requirements_test.txt`, are defined in the respective `.in` files.  If you make updates to the first order dependencies you need to "compile" the full dependency list.  First, ensure that `pip-tools` is installed in your dev virtual environment.  `dev` dependendies are just defined in `requirements_dev.txt`.
```bash
pip install .[dev]
pip install .[test]
```

Then run the following
```bash
pip-compile -v --no-emit-trusted-host --no-emit-index-url requirements.in
pip-compile -v --no-emit-trusted-host --no-emit-index-url requirements_test.in
