# Modules

## Introduction

Modules are the backbone of VyBuild. They allow you to precisely describe the build process of your project. They are JSON files with a very strict but clear syntax.

## Syntax

Modules can be executed as root module (called from command line) or submodule (called from another module).
A module is made of several fields indexed in a dictionnary. Here is an example:

``` json
{
  "version":"0.1",
  "root_folder":"...",
  "run_context":"...",
  "name":"...",
  "global_uuid":[
    ...
  ],
  "global_vars":{
    ...
  },
  "actions":[
    ...
  ]
}
```

### Mandatory fields

Each module has 5 mandatory fields:
- `version`: a string indicating the version of VyBuild JSON syntax. It must be set to the current version of the VyBuild JSON syntax, which is currently `0.1`
- `root_folder`: a string indicating the working folder of this module, all relative paths must be accessible in this folder. You can use variables in this field (see [variables docs](variables.md)). The path indicated in this field should always be absolute for maximum reliability
- `run_context`: a string indicating in which context this module can be executed. Possible values are:
  - `both`: the module can be executed as root module and submodule
  - `root`: the module can only be executed as root module
  - `sub`: the module can only be executed as submodule
- `name`: a string indicating the name that will be displayed in VyBuild call tree
- `actions`: a list of actions (see [actions docs](actions.md)) to execute in the module

### Optional fields for root module

Modules called from the command line can include the following optional fields :
- `global_uuid`: a list of string giving variables names that will be filled with random UUIDs v4 as each build. They can be used as regular variables
- `global_vars`: a dictionnary of string to string entries, associating variables names to their contents. For more informations, see [variables docs](variables.md)
