@cle-does-things/jake
v0.5.0
Published
A Rust-native implementation of the RAG stack
Readme
jake
jake (crasis for "just make") is a Make-like task executor for Unix-based operating systems.
It is based on TOML tasks definition (stored in a file called jakefile.toml) and can execute commands resolving their dependencies and passing additional options.
Features
- Create a boilerplate
jakefile.tomlfile withjake --init 'task1,task2,...' - Simple TOML syntax for task definition (no .PHONY, no spacing rules)
- Dependency resolution with circular dependencies issues detection
- Allows to pass extra arguments (as options) from the command line
- Default command execution
- Evaluates composite commands (like
cat README.md | grep Featuresorcd src/ && pwd) - You can execute a task from any subdirectory of the directory where
jakefile.tomlis stored - You can list tasks, by passing the
--listflag - You can load
.envfile (in the same working directory or anywhere up in the directory tree), by passing the--envflag
Installation
With cargo (recommended):
cargo install jakeWith npm:
npm install -g @cle-does-things/jake@latestExample jakefile.toml
Here is an example for task definition:
default = { command = "cat README.md" }
say-hello = "echo 'hello'"
say-hello-back = { command = "echo 'hello back'" }
say-bye = { command = "echo 'bye'", depends_on = ["say-hello", "say-hello-back"] }
list = "ls"
env-variable = "echo $HELLO"And here is the anatomy of a definition:
say-bye = { command = "echo 'bye'", depends_on = ["say-hello", "say-hello-back"] }
| | |
Task name Command to execute Array of tasks to be executed _before_
the task itselfWhile depends_on is optional (if not provided, the task does not depend on anything), command is a required key if the provided TOML value is an object (as for say-hello-back, default and say-bye).
In cases where the command does not depend on anything, you can also provide it as a plain string (as for say-hello and list).
You can use the default task name to indicate the task that should be executed by default when none is provided to jake (otherwise, the default task will be the first one in the file).
Example Usage
Create a boilerplate jakefile.toml:
jake --init 'task1,task2' # tasks need to be provided as a comma-separated listOutput (as jakefile.toml in the current working directory):
task1 = "echo 'No task yet for task1'"
task2 = "echo 'No task yet for task2'"Execute default task:
jakeOutput:
# jake
`jake` (crasis for "just make") is a [Make](https://en.wikipedia.org/wiki/Make_(software))-like task executor for Unix-based operating systems.
...Execute a task that does not depend on anything:
jake say-helloOutput:
'hello'Execute a task that depends on other tasks:
jake say-byeOutput:
'hello'
'hello back'
'bye'Execute a task passing additional flags:
jake list --options "-la"Output:
total 48
drwxr-xr-x@ 10 clee staff 320 Feb 13 11:14 .
drwxr-xr-x@ 125 clee staff 4000 Feb 13 10:20 ..
drwxr-xr-x@ 9 clee staff 288 Feb 13 10:20 .git
-rw-r--r--@ 1 clee staff 8 Feb 13 10:20 .gitignore
-rw-r--r--@ 1 clee staff 7656 Feb 13 11:13 Cargo.lock
-rw-r--r--@ 1 clee staff 162 Feb 13 11:13 Cargo.toml
-rw-r--r--@ 1 clee staff 332 Feb 13 11:21 jakefile.toml
-rw-r--r--@ 1 clee staff 152 Feb 13 11:16 README.md
drwxr-xr-x@ 4 clee staff 128 Feb 13 10:22 src
drwxr-xr-x@ 6 clee staff 192 Feb 13 10:22 targetList all tasks:
jake --listOutput:
Available tasks:
- default
- say-hello
- say-hello-back
...Run a task that requires an environment variable by loading a .env file:
echo "HELLO=hello" >> .env
jake env-var --envOutput:
helloIn GitHub CI/CD
You can use the setup-jake action to set up jake and use it in your GitHub Actions workflows.
License
This project is provided under MIT license.
