launchcodedev / app-config

Easy Configuration Loader with Strict Validation
https://app-config.dev
Mozilla Public License 2.0
69 stars 11 forks source link

$exec extension #95

Closed gregnr closed 3 years ago

gregnr commented 3 years ago

App Config Exec Plugin

Run arbitrary programs or shell commands to generate config. Serves as a nice fallback/stop-gap if an extension you need doesn't yet exist.

$exec: echo Hello World!

Usage

Basic:

$exec: echo Hello World!

Auto-parse output as YAML/TOML/JSON/JSON5:

$exec:
  command: curl https://my-api.example.com
  parseOutput: true

Build a custom script to generate config:

$exec: node ./my-custom-config-generator.js

Retrieve arbitrary information:

Node v8 version:

$exec: node -p -e "process.versions.v8"

System's architecture:

$exec: uname -p

Retrieve list of AWS S3 buckets via aws & jq CLI:

$exec:
  command: aws s3api list-buckets --output json | jq -r '.Buckets'
  parseOutput: true

Note: When possible, we encourage you to build a dedicated extension to better support features you are looking for (and help out the community). eg. $aws directive instead of the above.

Installing

Install and use:

yarn add @app-config/exec

In .app-config.meta.yml file:

parsingExtensions:
  - '@app-config/exec'

Options

The following options can be passed to each $exec directive:

$exec:
  command: echo Hello World!
  trimWhitespace: true
  parseOutput: false
  failOnStderr: false

command: string:

The command to run. Should be a single string containing both command and arguments. The command's stdout will be used as the resulting value. Runs in a shell, /bin/sh on Unix and process.env.ComSpec on Windows.

trimWhitespace: boolean:

If true, automatically trim whitespace from the start and end of the command's output. Useful to remove the trailing newline produced by most commands. If false, output will be left in its raw form. Default true.

parseOutput: boolean:

If true, automatically guess output content type (YAML, TOML, JSON, or JSON5) and parse. Throws if parse fails. If false, output will be read as a string. Default false.

failOnStderr: boolean:

If true, fail if any output is found in command's stderr. Default false.