Quick command execution tool that allows configuring current directory aware command execution.
For example: have an install command invoke one command for one project and a different command
for a project located in a different folder.
Supports notion of command dependencies, whereas a project's command can be configured to depend on a separate project command; especially useful when developing against large project dependency trees where a project compilation depends on other projects being compiled/installed first.
$ kommand --help
Usage: kommand [OPTIONS] COMMAND
Options:
-u, --dry-run Don't execute commands, only display what would be
run
-d, --dependencies-only Only execute commands for the project's
dependencies, not for the project itself
-h, --help Show this message and exit
Kommand is configured via $HOME/.kommand.js. The configuration file has the following structure:
{
"home": PROJECTS_ROOT_DIRECTORY,
"projects": {
PROJECT_DIRECTORY: {
COMMAND_NAME: {
"dependsOn": [
{
"project": PROJECT_NAME,
"command": COMMAND_NAME
},
...
],
"run": SHELL_COMMAND
},
...
},
...
},
"global": {
COMMAND_NAME: ...
}
}
When kommand is run, the current directory name is considered the project being operated on.
Execution working directory will be the current directory name relative to the configured home.
global commands are available regardless of what the current directory is.
{
"home": "/Users/travis/Projects",
"projects": {
"kable": {
"install": {
"run": "./gradlew publishToMavenLocal"
}
},
"sensortag": {
"run": {
"dependsOn": [
{
"project": "kable",
"command": "install"
}
],
"run": "./gradlew runDebugExecutableMacosX64"
}
}
},
"global": {
"config": {
"run": "subl ~/.kommand.json"
}
}
}With the current directory as /Users/travis/Projects/sensortag, running kommand run will result in:
🏃 kable ▶ ./gradlew publishToMavenLocal
🏃 sensortag ▶ ./gradlew runDebugExecutableMacosX64