Harmont docs
Pipeline DSL

JSON contract

The only thing that crosses the harmont-eval boundary.

harmont-eval is a subprocess of harmont-api, not a library. The JSON it writes to stdout is the only thing that crosses that boundary, which is what makes the DSL safe to evolve: a malformed pipeline can never crash the API.

Shape

{
  "version": "1",
  "steps": [
    {"type": "command", "key": "test", "label": "Test", "command": ["npm test"]},
    {"type": "wait"}
  ]
}

Step types: command, wait, block, input, trigger, group. Optional fields are omitted (not null); command is always an array of strings.

Source of truth

  • cidsl/lisp/src/ — the producer (json-object filters omitted fields).
  • api/src/Harmont/Pipeline/Eval.hs — the consumer; shells out to harmont-eval and parses the result.
  • Any change to the contract must land in both at the same time, plus the Python codegen in cidsl/py/sci_dsl/codegen.py.

On this page