This renderer is both a Reference Implementation & Minimal Viable Product.
The Jsonnet Renderer
is designed as a "plugin" which doesn't need to be shipped with shore core
, but side-loaded.
The Jsonnet Renderer
("plugin") integrates the Jsonnet programming language with the Shore
Framework.
Jsonnet
is a templating language that process's expressions and outputs JSON
formatted text. (see more at https://jsonnet.org)
Following the shore-core
interfaces, this implements the Renderer
Interface
The go-jsonnet
engine is embedded into the plugin and shipped with shore-core
.
- It's already implemented in
Golang
- easy to embed. - Easy to debug, test, validate - the runtime engine is embedded.
- Simple to setup a development environment -
go mod
handles the setup - Customers don't need to install multiple tools.
- Many of the
shared libraries
in common use are already implemented inJsonnet
- this can help drive initial adoption.
- Only selected features are exposed via
Shore
- Rendering & Libraries. - Version is pinned to the
Renderer
.
- Python Renderer.
Python Renderer
Pros:
- Believed to be common enough on most developer's machines (I.E. no setup cost)
- Python has built-in testing framework (which can be extended with
pytest
) - Python has many 3rd party libraries that deal with many edge cases.
Python Renderer
Cons:
- Not a "configuration language" - may lead to complex solutions based on Python's ability to do "everything".
- Will require re-implementing many libraries.
- Large Foot Print - The Python runtime is large, while for pipeline development only a fraction of it's capabilities will be used (I.E.
json.dumps()
)
Although renderers are pluggable by design, the initial support will focus on Jsonnet
due to it's implementation simplicity. In the future we can look to extend to further renderers as needed.
NOTE: If you'd like to "bring your own" pipeline and leverage Shore's testing, saving, and executing capabilities, please follow the bring your own pipeline tutorial.