--- title: "Configuration File Reference" date: 2022-09-10T20:42:50-04:00 description: "Conductor config file reference" version: "2.0.0" weight: 1 --- # Configuration file Conductor will look in the current directory or any parent directory for configuration file named `conductor.yaml`. In general you can place this configuration directory in or above any place you might want to run the stack. ## Group configuration Groups can be defined to launch multiple components at a time. This is the primary use case for Conductor and is where development flows are defined. Generally, you define all the separate compoennts required to setup a development environment and launch them via a group. ```yml groups: group1: components: - component1 - component2 group2: components: - component1 - component3 components: # ... ``` The key for the group item is the name of the group. ### Group subfields: - **components** - An array of component names that should be launched as a group - **descirption** - A description that is displayed in the task list ## Component configuration Components are indvidual applications that are run as part of the stack. Components can be launched individually or via groups. ### Example component configuration: ```yaml components: api: path: backend/api-gateway env: COLORS: 1 NPM_ENV: debug command: npm start before: npm-install tasks: npm-install: path: backend/api-gateway command: npm install ``` The key for the component item is the name of the component. ### Component subfields: * **path** - The working path relative to the configuration file. By default the path is "." * **env** - A set of environment variables that are set before any commands are run. * **command** - The command that should be executed when the component is launched. This command can be a shell command. Multiple commands can be specified as an array or a single command can be specified as a string * **keep_alive** - Specifies whether the command should be rerun if it exits. This is true by default. * **retry_delay** - A delay in seconds to wait before launching the command after it exits. * **tasks** - A list of task definitions that are scoped within this compoennt. Tasks can be specified under a component for organizational reasons. These components become _namespaced_ and can be executed directly by using its qualified name: component:task. See the task definitions for information about these blocks. * **descirption** - A description that is displayed in the task list ## Task configuration Tasks are similiar to components, except they are meant as single run utility commands. These can be used to setup the environment, or as pure utility functions like build pipelines and data configuration. The key for the task item is the name of the task. ### Example task configuration: ```yaml tasks: build: env: MODE: production path: backend/ command: cargo build --release description: Backend release build ``` ### Task subfields: * **path** - The working path relative to the configuration file. By default the path is "." * **env** - A set of environment variables that are set before any commands are run. * **command** - The command that should be executed when the component is launched. This command can be a shell command. Multiple commands can be specified as an array or a single command can be specified as a string * **descirption** - A description that is displayed in the task list ## Full example config: ```yaml groups: dev: components: - frontend - backend prod: components: - frontend - backend-prod components: frontend: env: FORCE_COLOR: 1 command: npm start before: setup tasks: setup: command: npm install backend: command: mix phx.server before: backend:setup tasks: setup: before: - backend:compile - backend:deps compile: command: mix compile deps: command: mix deps.get backend-prod: env: MIX_ENV: production command: mix phx.server before: backend:setup tasks: reset: env: MIX_ENV: production command: - mix ecto.reset - mix ecto.migrate - mix ecto.seed ```