filedo is a tool for running commands on files. The tool is comprised of three parts, each composed in the next.
filedo merge-data DATAFILES... [-o|--output OUTPUT] [-t|--type TYPE]
Merge data files
Available options:
DATAFILES... Data files to merge. Last argument takes merge
precedence.
-o,--output OUTPUT Output file for merged data.
-t,--type TYPE Output type for merged data. (json, yaml)
-h,--help Show this help text
This command accepts many JSON or YAML files and merges them into a single file. The last file in the list takes precedence over the previous files. The output file can be specified with the -o --output flag. The output type can be specified with the -t --type flag. If no output type is specified, the output type will be inferred from the output file extension or default to JSON. If no output file is specified, the output will be printed to stdout.
filedo compile [-d|--data DATAFILES...] TARGET_DIRECTORY
[-o|--output OUTPUTDIR] [-w]
Compile mustache templates
Available options:
-d,--data DATAFILES... Data files to use. Last argument takes merge
precedence. Stdin will be used if none are specified.
TARGET_DIRECTORY Directory containing mustache templates
-o,--output OUTPUTDIR Directory for compiled template output. Default:
_build
-w Suppress warnings.
-h,--help Show this help text
filedo can also compile and render mustache templates from a target directory. All files in the target directory are considered when resolving partials using their paths relative to the target directory.
This command composes the merge-data command to merge the data files specified with the -d --data option. Data can also be piped to stdin, and as such the following commands perform the same operations:
filedo compile ./templates -d data1.json data2.json
filedo merge-data data1.json data2.json | filedo compile ./templates
filedo process [TARGET_DIRECTORY] [-r|--rule RULE_FILE]
[-c|--compile] [-d|--data DATAFILES...] [-w]
Process filedo rules
Available options:
TARGET_DIRECTORY Directory to process. Defaults to current directory.
-r,--rule RULE_FILE YAML file containing rules. Defaults to 'filedo.yaml'
-c,--compile Compile mustache templates before processing.
-d,--data DATAFILES... Data files to use. Last argument takes merge
precedence. Stdin will be used if none are specified.
-w Suppress warnings.
-h,--help Show this help text
This is the main command of filedo. It parses a YAML file with the rule configuration and executes them. This command can operate either on a directory of compiled templates as if they were any other files, or templates can be compiled and used in-process with the -c --compile flag. If data is specified with the -d --data option, the rule configuration will be compiled in-process to substitute any values. This command is composed of the merge-data and compile commands.
The rule configuration file is a YAML file with the following structure:
Command = String | [String]
GlobPattern = String
Rule = Rule
{ priority :: Integer
, skip :: Bool
, targets :: [GlobPattern]
, exclude :: [GlobPattern]
, useStdIn :: Bool
, parallelise :: Bool
, ignoreErrors :: Bool
, pre :: Command
, command :: Command
, post :: Command
, environment :: Map String String
, rules :: [Rule] }
The top level object of the file is a Rule, with scoped subrules specified recursively in the rules field. This pattern, combined with all fields being optional with sensible defaults, allows for a very flexible and succint configuration.
| Field | Default | Description |
|---|---|---|
priority |
0 |
The priority of the rule. Rules with higher priority are executed first. |
skip |
false |
When true, this rule and its subrules will be skipped. |
targets |
["*"] |
A list of glob patterns to match for target files. Patterns are scoped to the current target. |
exclude |
[] |
A list of glob patterns to exclude from matches against the target file. Patterns are scoped to the current target. |
useStdIn |
false |
Whether to pipe file contents via stdin as the input for the command. |
parallelise |
false |
Whether to run the commands in this rule sequentially or in parallel. |
ignoreErrors |
false |
Whether a rule should continue executing the command on targets if commands return non-zero exit codes. Does not apply to hooks. |
pre |
[] |
A command to run before the rule is applied. The rule will not execute if this hook returns a non-zero exit code. |
command |
[] |
A command to run for each target. Sequential commands, post hook and subrules will not execute if this command returns a non-zero exit code, unless ignoreErrors is true. |
post |
[] |
A command to run after the rule is applied. Subrules will not execute if this hook returns a non-zero exit code. |
environment |
{} |
A map of environment variables to set for the command. |
rules |
[] |
A list of subrules. A rule is executed before its subrules. Rules are executed depth-first. |