Adds support to load dodo backdrops from configuration files.
This plugin is already included in the dodo default distribution.
If you want to compile your own dodo distribution, you can add this plugin with the following generate config:
plugins:
- import: github.com/wabenet/dodo-config/pkg/plugin
Alternatively, you can install it as a standalone plugin by downloading the
correct file for your system from the releases page,
then copy it into the dodo plugin directory (${HOME}/.dodo/plugins
).
The plugin searches for configuration files written in YAML or JSON. Search paths
include the current directory, any parent directory up to the filesystem root,
as well as all the usual places for config files ($HOME
, $XDG_CONFIG_HOME/dodo
,
%APPDATA%
, etc). The configuration file name must be some variation of
dodo.yml
. Either with a .yml
or .yaml
or even .json
extension, and an
optional leading dot.
The exact syntax of the configuration file is specified via the CUE constraints located here.
Additionally, all fields are templated via the go templating engine. See the templatingsection for details.
Backdrops are the main components of dodo. Each backdrop is a template for a
container that acts as runtime environment for a script. The top-level configuration
object in each file is backdrops
, which is a map of backdrop names to objects
with the following options:
aliases
: a list of aliases that can be used instead of the backdrop name to run itcontainer_name
: set the container nameimage
orbuild
: defines configuration for building the container image. Can be either a string containing an existing image name, or an object with:name
: a name (tag) for the resulting imagebuilder
: name of the build plugin to use, select the first one available by defaultcontext
: path to the build contextdockerfile
: path to the dockerfile (relative to the build context)steps
: Alternatively, supplies an inline dockerfilearguments
: build arguments for the imagesecrets
: secrets used for buildingssh_agents
: ssh agent connfiguration used for buildingdependencies
: list of image names that are required to build this image. Other backdrop configurations are searched for build declarations with thisname
field, and are built before this image.
environment
: set environment variablesvolumes
: list of additional bind-mount volumesports
: list of exposed ports from the containeruser
: set the uid inside the containerworking_dir
: set the working directory inside the containerscript
: the script that should be executedinterpreter
: set the interpreter that should execute the script (defaults to/bin/sh
)
All strings in the YAML configuration are processed by the golang templating engine. The following additional methods are available:
- Everything from the sprig library
{{ cwd }}
evaluates to the current working directory{{ currentFile }}
is the path to the current YAML file that is evaluated{{ currentDir }}
is the path to the directory where the current file is located{{ projectRoot }}
is the path to the current Git project (determined by the first.git
directory found by walking the current working directory upwards). Useful in combination with{{ projectPath }]
if you don't only want to bind-mount the current directory but the whole project.{{ projectPath }}
the path of the current working directory relative to{{ projectRoot }}
{{ env <variable> }}
evaluates to the contents of environment variable<variable>
{{ user }}
evaluates to the current user, in form of a golang user. From this, you can access fields like{{ user.HomeDir }}
or{{ user.Uid }}
.{{ sh <command> }}
executes<command>
via/bin/sh
and evaluates to its stdout
Includes allow merging additional files that are not in the search path into the current configuration. For example:
include:
- file: '{{ currentDir }}/some_other_file.yaml'
Copyright 2022 Ole Claussen
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.