Skip to content
/ kommand Public

"Current directory"-aware command execution tool.

Notifications You must be signed in to change notification settings

twyatt/kommand

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

badge

Kommand

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

Configuration

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.

Example

{
    "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

About

"Current directory"-aware command execution tool.

Resources

Stars

Watchers

Forks

Languages