This utility is no longer supported or maintained.
See instead shrub.py and shrub-rs.
shrub.ts
is a library for programatically building Evergreen project configurations.
It is especially useful for generating tasks dynamically through the generate.tasks
command
watch this space
Suppose you want to write the following project configuration (from Evergreen's wiki):
tasks:
- name: compile
commands:
- command: git.get_project
params:
directory: src
- func: "compile and upload to s3"
You can use shrub.ts
to build the above config:
const c = new Configuration();
const getProjCommand = new CommandDefinition();
getProjCommand.setCommand('git.get_project');
getProjCommand.getParamsMap().set('directory', 'src');
const uploadCommand = new CommandDefinition();
uploadCommand.setFunc('compile and upload to s3');
const task = new Task();
task.setName('compile')
task.setCommandsList([
getProjCommand,
uploadCommand,
]);
const c = new Configuration();
c.addTasks(task);
return JSON.stringify(c.toObject(), jsonReplacer);
If you are familiar with the chaining syntax used by
shrub
and shrub.py
,
you can use a similar syntax in shrub.ts
. It is more concise than the naive version above with
indentation resembling the structure of the generated config file:
const c = new Configuration;
const task = chain(
Task,
o => o.setName('compile'),
o => o.setCommandsList([
chain(
CommandDefinition,
o => o.setCommand('git.getproject'),
o => o.getParamsMap().set('directory', 'src')
),
chain(CommandDefinition, o => o.setFunc('compile and upload to s3')),
]),
)
c.addTasks(task);
return JSON.stringify(c.toObject(), jsonReplacer);
For more advanced examples, please see the shrub.ts
integration tests.
Run source scripts/gen_shrub_proto_ts_files.sh
after installing protobuf's command line tool.