# DevopsBuild

DevopsBuild provides the build foundations.

```mermaid
classDiagram
    class DevopsBuild {
        build_path() - the build dir in target
        initialize_build_dir() - copy current directory & additional files to target
        name() - the name of build
    }

```

## Input

| name              | description                                                                                        | default |
| ----------------- | -------------------------------------------------------------------------------------------------- | ------- |
| name              | dedicated name of the build                                                                        | module  |
| module            | module name - may result in a hierarchy like name/module                                           |         |
| stage             | sth. like test, int, acc or prod                                                                   |         |
| project_root_path | relative path to projects root. Is used to locate the target dir                                   |         |
| build_dir_name    | name of dir, build is executed in                                                                  | target  |
| build_types       | list of special builds used. Valid values are ["IMAGE", "C4K", "K3S", "TERRAFORM"]                 | []      |
| mixin_types       | mixins are orthoganl to builds and represent additional capabilities. Valid Values are ["RELEASE"] | []      |

## Example Usage

### build.py

```python
from subprocess import run
from pybuilder.core import task, init
from ddadevops import *

name = 'my-project'
MODULE = 'my-module'
PROJECT_ROOT_PATH = '..'

@init
def initialize(project):
    project.build_depends_on("ddadevops>=4.0.0")

    config = {
        "name": name,
        "module": MODULE,
        "stage": environ["STAGE"],
        "project_root_path": PROJECT_ROOT_PATH,
        "build_types": [],
        "mixin_types": [],
    }

    build = DevopsBuild(project, config)
    build.initialize_build_dir()


@task
def list_build_dir(project):
    build = get_devops_build(project)
    run(f"ls -la {build.build_path()}")
```

### call the build

```bash
pyb list_build_dir
```