Notwithstanding Previous Misdemeanors

    @servicecmd/cli
    TypeScript icon, indicating that this package has built-in type declarations

    1.0.63 • Public • Published

    @servicecmd/cli

    Build Status Version Downloads/week Dependencies semantic-release

    Demo

    This is the base of the @servicecmd. All other features will extend the capabilities of the default CLI.

    This CLI enables the user to proxy commands to multiple docker-compose stacks.

    Install

    $ npm install -g @servicecmd/cli
    $ servicecmd COMMAND
    running command...
    $ servicecmd (-v|--version|version)
    @servicecmd/cli/1.0.0 linux-x64 node-v16.9.1
    $ servicecmd --help [COMMAND]
    USAGE
      $ servicecmd COMMAND
    ...

    Initial Setup

    Usage

    Proxying Commands to Groups

    There is important flags you want to keep an eye on.

    Run [-r] [--run]

    • Will run a certain command for the set of services.

      These commands coincide withs the naming scheme of docker-compose cli and can be:

      • up
      • down
      • restart
      • logs
      • kill
      • stop
      • exec
      • pull
      • build
      • ls -> shows the services inside docker-compose stack
      • ps
      • rm
      • top
      • stats -> filters docker stats with the containers specified
    • Some of these commands have their unique flags required but the CLI will throw out an error requesting them if it is missing.

    • Some of these commands also have their specific flags which it will pass them to the docker-compose CLI.

    • I have used flags instead of positional arguments since I sometimes prefer to add the command to end and change it on different runs and sometimes I prefer to add the command to the beginning and change the other parameters.

    Examples
    • Run a command servicecmd docker -r up

    Group [-g] [--group]

    • Will limit the task to certain group which is the designated name while defining the set of docker-compose stacks in servicecmd config docker.
    • Can be multiple for running the command in multiple groups.
    • Will default to all which will run for all services defined in the configuration file.
    Examples
    • Run for all groups: servicecmd docker ...
    • Run for specific group: servicecmd docker -g some-other-group ...
    • Run for multiple specific groups: servicecmd docker -g some-group -g some-other-group ...

    Limit [-l] [--limit]

    • Will filter the services depending on their absolute path after all the regular expressions in the configuration has been evaluated.

      Example for your configuration of group:

      { path: '/docker/**', depth: 0 }

      Where you have services after being evaluated:

      /docker/service1/docker-compose.yml
      /docker/service2/docker-compose.yml
      /docker/service3/docker-compose.yml
      /docker/other/docker-compose.yml
      

      Limit is essentially a JavaScript regular expression so

      • -l "service.?" or -l service will resolve to all 3 services with name service on them.
      • -l service3 will resolve to only service3.
    • Can be multiple arguments.

    Examples
    • Run for a single service: servicecmd docker -l service/
    • Run for multiple service with regular expressions: servicecmd docker -l "service.?/"
    • Run for multiple services imperatively: servicecmd doker -l service1/ -l service2/ -l service3/

    Ignore [-i] [--ignore]

    • Ignore is the same with limit flag but the other way around limitting the services that should be run.
    • Ignore will run after every service is parsed so it also takes in hand your group and limit flags.
    Examples
    • Run for everything except a single service: servicecmd docker -i service/
    • Run for everything except multiple service with regular expressions: servicecmd docker -i "service.?/"
    • Run for everything except multiple services imperatively: servicecmd doker -i service1/ -i service2/ -l service3/

    Prompt [-p] [--prompt]

    • This will parse the command and create a yes/no prompt with what command it will apply to and for which targets.

    Target [-t] [--target]

    • For some commands you can target the container name directly.
    • The argument might be required depending on the run command.
    • This is a docker-compose specific argument which only works for given set of run commands. servicecmd docker --help will list the commands it works with.
    Examples
    • Run logs for only single container named mysql in your docker-compose stack that resides in /docker/some-container: servicecmd docker -l some-container -t mysql -r logs

    Args [-a] [--args]

    • You can add any argument and this flag will append it to the end of the command.
    • The argument might be required depending on the run command.
    • This is a docker-compose specific argument which only works for given set of run commands. servicecmd docker --help will list the commands it works with.
    Examples
    • Drop in to bash session of container named mysql in your docker-compose stack that resides in /docker/some-container: servicecmd docker -l some-container -t mysql -r exec -a bash
    • Add abort-on-container-exit flag to up run command: servicecmd docker -l some-container -r up -a "--abort-on-container-exit"

    Docker-Compose Specific Arguments

    • Some of the docker-compose arguments have their proxy in this CLI to have easy access.
    • Certain arguments work with certain run commands. servicecmd docker --help will list the commands it works with.

    Configuration Files

    • Configuration files are in yml format to make it easier to manage it with automation tools like Ansible, Puppet or Chef.
    • Configuration files are stored in the ${HOME}/.config/servicecmd folder.

    Adding a new configuration

    • Run servicecmd config docker.

    • An interactive prompt will appear. Select "add" option.

    • Fill the generated prompt.

      • Path is the option where you define the service root.

        The service root can be:

        • Absolute folder of the docker-compose stack.

        • Single or multiple regular expressions in gitignore format. Multiple expressions should be seperated by ":".

          Regular expressions will also prompt for the depth that it should search for files. The default is 1 which is directly that folder. But you can designate it as 0 to disable this limit or throw in a integer value to limit the depth.

      • Name will be the alias of the designated group where it is used to address it in other command. It will default to the folder name itself.

      • File can be multiple expressions seperated by ":". If you want to run other named docker-compose files like "docker-compose.production.yml" it will be useful for that. Defaults to "docker-compose.yml".

    Managing an existing configuration

    Command Description
    Show Show the current configuration.
    Add Will add a new group to the current configuration.
    Edit Edit an existing entry.
    Remove Remove one or more entries in the configuration file.
    Delete Delete the local configuration file compeletely.
    Import Import a configuration from a local file or HTTP.

    Commands

    servicecmd autocomplete [SHELL]

    display autocomplete installation instructions

    USAGE
      $ servicecmd autocomplete [SHELL]
    
    ARGUMENTS
      SHELL  shell type
    
    OPTIONS
      -r, --refresh-cache  Refresh cache (ignores displaying instructions)
    
    EXAMPLES
      $ servicecmd autocomplete
      $ servicecmd autocomplete bash
      $ servicecmd autocomplete zsh
      $ servicecmd autocomplete --refresh-cache
    

    See code: @oclif/plugin-autocomplete

    servicecmd config

    Manipulate the configuration options for this CLI.

    USAGE
      $ servicecmd config
    

    See code: dist/commands/config/index.ts

    servicecmd config:docker

    Edit services that is managed by this CLI.

    USAGE
      $ servicecmd config docker
    
    DESCRIPTION
      - Path can be a absolute value or a regular expression in gitignore format seperated by ":".
      - Name is a alias to group the specific set of services.
      - Regular expressions can have a depth to limit their recursive iteration over folders. "0" will disable this limit.
    

    See code: dist/commands/config/docker.ts

    servicecmd docker

    Runs the designated command over the the intended services.

    USAGE
      $ servicecmd docker
    
    OPTIONS
      -a, --args=args                                                              Always adds this as the last argument.
                                                                                   Works with commands: "up, down, restart,
                                                                                   logs, kill, stop, exec, pull, build, ls,
                                                                                   ps, rm, top"
    
      -g, --group=group                                                            [default: all] Limit the task with
                                                                                   service group name.
    
      -i, --ignore=ignore                                                          Ignore a service utilizing JavaScript
                                                                                   regex pattern depending on the final
                                                                                   folder location.
    
      -l, --limit=limit                                                            Limit a service utilizing JavaScript
                                                                                   regex pattern depending on the final
                                                                                   folder location.
    
      -p, --prompt                                                                 Prompt user before doing something.
    
      -r, --run=up|down|restart|logs|kill|stop|exec|pull|build|ls|ps|rm|top|stats  (required) Execute the given command.
    
      -t, --target=target                                                          Target a container directly in
                                                                                   docker-compose file. Works with commands:
                                                                                   "logs, kill, stop, exec"
    
      --force-rm                                                                   Always remove intermediate containers.
                                                                                   Works with commands: "build"
    
      --no-cache                                                                   Use no cache. Works with commands:
                                                                                   "build"
    
      --parallel                                                                   Run Docker tasks in parallel. Works with
                                                                                   commands: "build"
    
      --privileged                                                                 Give extended privileges to the process.
                                                                                   Works with commands: "exec"
    
      --pull                                                                       Always pull fresh image. Works with
                                                                                   commands: "build"
    
      --remove-orphans                                                             Remove containers for services not
                                                                                   defined in the compose file. Works with
                                                                                   commands: "up, down"
    
      --rmi=all|local                                                              Remove containers for services not
                                                                                   defined in the compose file. Works with
                                                                                   commands: "down"
    

    See code: dist/commands/docker/index.ts

    servicecmd help [COMMAND]

    display help for servicecmd

    USAGE
      $ servicecmd help [COMMAND]
    
    ARGUMENTS
      COMMAND  command to show help for
    
    OPTIONS
      --all  see all commands in CLI
    

    See code: @oclif/plugin-help

    servicecmd plugins

    list installed plugins

    USAGE
      $ servicecmd plugins
    
    OPTIONS
      --core  show core plugins
    
    EXAMPLE
      $ servicecmd plugins
    

    See code: @oclif/plugin-plugins

    servicecmd plugins:inspect PLUGIN...

    displays installation properties of a plugin

    USAGE
      $ servicecmd plugins:inspect PLUGIN...
    
    ARGUMENTS
      PLUGIN  [default: .] plugin to inspect
    
    OPTIONS
      -h, --help     show CLI help
      -v, --verbose
    
    EXAMPLE
      $ servicecmd plugins:inspect myplugin
    

    See code: @oclif/plugin-plugins

    servicecmd plugins:install PLUGIN...

    installs a plugin into the CLI

    USAGE
      $ servicecmd plugins:install PLUGIN...
    
    ARGUMENTS
      PLUGIN  plugin to install
    
    OPTIONS
      -f, --force    yarn install with force flag
      -h, --help     show CLI help
      -v, --verbose
    
    DESCRIPTION
      Can be installed from npm or a git url.
    
      Installation of a user-installed plugin will override a core plugin.
    
      e.g. If you have a core plugin that has a 'hello' command, installing a user-installed plugin with a 'hello' command 
      will override the core plugin implementation. This is useful if a user needs to update core plugin functionality in 
      the CLI without the need to patch and update the whole CLI.
    
    ALIASES
      $ servicecmd plugins add
    
    EXAMPLES
      $ servicecmd plugins:install myplugin 
      $ servicecmd plugins:install https://github.com/someuser/someplugin
      $ servicecmd plugins:install someuser/someplugin
    

    See code: @oclif/plugin-plugins

    servicecmd plugins:link PLUGIN

    links a plugin into the CLI for development

    USAGE
      $ servicecmd plugins:link PLUGIN
    
    ARGUMENTS
      PATH  [default: .] path to plugin
    
    OPTIONS
      -h, --help     show CLI help
      -v, --verbose
    
    DESCRIPTION
      Installation of a linked plugin will override a user-installed or core plugin.
    
      e.g. If you have a user-installed or core plugin that has a 'hello' command, installing a linked plugin with a 'hello' 
      command will override the user-installed or core plugin implementation. This is useful for development work.
    
    EXAMPLE
      $ servicecmd plugins:link myplugin
    

    See code: @oclif/plugin-plugins

    servicecmd plugins:uninstall PLUGIN...

    removes a plugin from the CLI

    USAGE
      $ servicecmd plugins:uninstall PLUGIN...
    
    ARGUMENTS
      PLUGIN  plugin to uninstall
    
    OPTIONS
      -h, --help     show CLI help
      -v, --verbose
    
    ALIASES
      $ servicecmd plugins unlink
      $ servicecmd plugins remove
    

    See code: @oclif/plugin-plugins

    servicecmd plugins:update

    update installed plugins

    USAGE
      $ servicecmd plugins update
    
    OPTIONS
      -h, --help     show CLI help
      -v, --verbose
    

    See code: @oclif/plugin-plugins

    Install

    npm i @servicecmd/cli

    DownloadsWeekly Downloads

    31

    Version

    1.0.63

    License

    MIT

    Unpacked Size

    73.1 kB

    Total Files

    35

    Last publish

    Collaborators

    • cenk1cenk2