github.com/stevenshuang/glide@v0.13.3/docs/plugins.md (about)

     1  # Glide Plugins
     2  
     3  Glide supports a simple plugin system similar to Git.
     4  
     5  ## Existing Plugins
     6  
     7  Some plugins exist today for Glide including:
     8  
     9  * [glide-vc](https://github.com/sgotti/glide-vc) - The vendor cleaner allows you to strip files not needed for building your application from the `vendor/` directory.
    10  * [glide-brew](https://github.com/heewa/glide-brew) - Convert Go deps managed by glide to Homebrew resources to help you make brew formulas for you Go programs.
    11  * [glide-hash](https://github.com/mattfarina/glide-hash) - Generates a hash of the `glide.yaml` file compatible with Glides internal hash.
    12  * [glide-cleanup](https://github.com/ngdinhtoan/glide-cleanup) - Removing unused packages from the `glide.yaml` file.
    13  * [glide-pin](https://github.com/multiplay/glide-pin) - Take all dependencies from the `glide.lock` and pin them explicitly in the `glide.yaml` file.
    14  
    15  _Note, to add plugins to this list please create a pull request._
    16  
    17  ## How Plugins Work
    18  
    19  When Glide encounters a subcommand that it does not know, it will try to delegate it to another executable according to the following rules.
    20  
    21  Example:
    22  
    23  ```
    24  $ glide install # We know this command, so we execute it
    25  $ glide foo     # We don't know this command, so we look for a suitable
    26                  # plugin.
    27  ```
    28  
    29  In the example above, when glide receives the command `foo`, which it does not know, it will do the following:
    30  
    31  1. Transform the name from `foo` to `glide-foo`
    32  2. Look on the system `$PATH` for `glide-foo`. If it finds a program by that name, execute it...
    33  3. Or else, look at the current project's root for `glide-foo`. (That is, look in the same directory as `glide.yaml`). If found, execute it.
    34  4. If no suitable command is found, exit with an error.
    35  
    36  ## Writing a Glide Plugin
    37  
    38  A Glide plugin can be written in any language you wish, provided that it can be executed from the command line as a subprocess of Glide. The example included with Glide is a simple Bash script. We could just as easily write Go, Python, Perl, or even Java code (with a wrapper) to
    39  execute.
    40  
    41  A Glide plugin must be in one of two locations:
    42  
    43  1. Somewhere on the PATH
    44  2. In the same directory as `glide.yaml`
    45  
    46  It is recommended that system-wide Glide plugins go in `/usr/local/bin` or `$GOPATH/bin` while project-specific plugins go in the same directory as `glide.yaml`.
    47  
    48  ### Arguments and Flags
    49  
    50  Say Glide is executed like this:
    51  
    52  ```
    53  $ glide foo -name=Matt myfile.txt
    54  ```
    55  
    56  Glide will interpret this as a request to execute `glide-foo` with the arguments `-name=Matt myfile.txt`. It will not attempt to interpret those arguments or modify them in any way.
    57  
    58  Hypothetically, if Glide had a `-x` flag of its own, you could call this:
    59  
    60  ```
    61  $ glide -x foo -name=Matt myfile.txt
    62  ```
    63  
    64  In this case, glide would interpret and swollow the -x and pass the rest on to `glide-foo` as in the example above.
    65  
    66  ## Example Plugin
    67  
    68  File: glide-foo
    69  
    70  ```bash
    71  #!/bin/bash
    72  
    73  echo "Hello"
    74  ```