sandboxed-api/contrib/jsonnet
Christian Blichmann e21afae5a7 CMake: Build contrib sandboxes if requested
Add a new option `SAPI_ENABLE_CONTRIB_TESTS` that builds the sandboxes
in `contrib/` if set.

The new `contrib/CMakeLists.txt` should be extended each time we add a
new sandbox to `contrib/`.

This is in preparation of a follow-up change that should test the
sandboxes using GitHub Actions.

Drive-by:
- Rename the tests in `jsonnet_tests.cc` to conform to the style guide.
PiperOrigin-RevId: 425874289
Change-Id: I5b31546ccf84444c2480287220ef88abbd78a235
2022-02-02 07:02:28 -08:00
..
examples CMake: Make it easier for projects to consume sandboxed libraries 2022-02-02 01:09:56 -08:00
CMakeLists.txt CMake: Build contrib sandboxes if requested 2022-02-02 07:02:28 -08:00
jsonnet_base_sandbox.h CMake: Make it easier for projects to consume sandboxed libraries 2022-02-02 01:09:56 -08:00
jsonnet_base_transaction.h Merge pull request #101 from cblichmann:02jsonnet-contrib 2022-01-28 01:47:32 -08:00
jsonnet_helper.cc CMake: Make it easier for projects to consume sandboxed libraries 2022-02-02 01:09:56 -08:00
jsonnet_helper.h CMake: Make it easier for projects to consume sandboxed libraries 2022-02-02 01:09:56 -08:00
jsonnet_tests.cc CMake: Build contrib sandboxes if requested 2022-02-02 07:02:28 -08:00
jsonnet.patch CMake: Make it easier for projects to consume sandboxed libraries 2022-02-02 01:09:56 -08:00
README.md CMake: Make it easier for projects to consume sandboxed libraries 2022-02-02 01:09:56 -08:00

Jsonnet Sandboxed API

This library provides a sandboxed version of the Jsonnet library.

How to use from an existing Project

If your project does not include Sandboxed API as a dependency yet, add the following lines to the main CMakeLists.txt:

include(FetchContent)

FetchContent_Declare(sandboxed-api
  GIT_REPOSITORY https://github.com/google/sandboxed-api
  GIT_TAG        main  # Or pin a specific commit/tag
)
FetchContent_MakeAvailable(sandboxed-api)  # CMake 3.14 or higher

add_sapi_subdirectory(contrib/jsonnet)

The add_sapi_subdirectory() macro sets up the source and binary directories for the sandboxed jsonnet targets.

Afterwards your project's code can link to sapi_contrib::jsonnet and use the corresponding header contrib/jsonnet/jsonnet_base_sandbox.h.

Examples

The examples/ directory contains code to produce three command-line tools -- jsonnet_sandboxed, jsonnet_yaml_stream_sandboxed and jsonnet_multiple_files_sandboxed to evaluate jsonnet code. The first one enables the user to evaluate jsonnet code held in one file and writing to one output file. The second evaluates one jsonnet file into one file, which can be interepreted as YAML stream. The third one is for evaluating one jsonnet file into multiple output files. All three tools are based on what can be found here.

Apart from these, there is also a file producing jsonnet_formatter_sandboxed executable. It is based on a tool found from here. It is a jsonnet code formatter -- it changes poorly written jsonnet files into their canonical form.

Build as part of Sandboxed API

To build these examples, after cloning the whole Sandbox API project, run this in the contrib/jsonnet directory:

mkdir -p build && cd build
cmake .. -G Ninja -Wno-dev -DSAPI_ENABLE_TESTS=ON
ninja

To run jsonnet_sandboxed (or jsonnet_yaml_stream_sandboxed or jsonnet_formatter_sandboxed in a similar way):

cd examples
./jsonnet_sandboxed \
    absolute/path/to/the/input_file.jsonnet \
    absolute/path/to/the/output_file

To run jsonnet_mutiple_files_sandboxed:

cd examples
./jsonnet_mutiple_files_sandboxed \
    absolute/path/to/the/input_file.jsonnet \
    absolute/path/to/the/output_directory

All three tools support evaluating one input file (possibly relying on multiple other files, e.x. by jsonnet import command; the files must be held in the same directory as input file) into one or more output files. Example jsonnet codes to evaluate in a one-in-one-out manner can be found here. Example code producing multiple output files or YAML stream files can be found in the examples/jsonnet_codes directory (along with some other examples copied with minimal changes from the library files), in files called multiple_files_example.jsonnet and yaml_stream_example.jsonnet, respectively. In the examples/jsonnet_codes_expected_output directory one can found outputs the mentioned above files' evaluation should produce.

The formatter reads one input file and produces one output file as a result. Example code for this tool can also be found in examples/jsonnet_codes directory, in a file called formatter_example.jsonnet.

Running the tests

A few tests prepared with a use of Google Test framework are included. To run them type:

ctest -R JsonnetTest.