blob: 98f24ae88bb20d448503563fe99a8f03e0032955 [file] [log] [blame] [view] [edit]
# Glide Plugins
(Not to be confused with Glade Plugins. Pew.)
Glide supports a simple plugin system similar to Git. When Glide
encounters a subcommand that it does not know, it will try to delegate
it to another executable according to the following rules.
Example:
```
$ glide in # We know this command, so we execute it
$ glide foo # We don't know this command, so we look for a suitable
# plugin.
```
In the example above, when glide receives the command `foo`, which it
does not know, it will do the following:
1. Transform the name from `foo` to `glide-foo`
2. Look on the system `$PATH` for `glide-foo`. If it finds a program by
that name, execute it...
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.
4. If no suitable command is found, exit with an error.
## Writing a Glide Plugin
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
execute.
A glide plugin must be in one of two locations:
1. Somewhere on the PATH (including `$GLIDE_PATH/_vendor/bin`)
2. In the same directory as `glide.yaml`
It is recommended that system-wide Glide plugins go in `/usr/local/bin`
while project-specific plugins go in the same directory as `glide.yaml`.
### Arguments and Flags
Say Glide is executed like this:
```
$ glide foo -name=Matt myfile.txt
```
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.
Hypothetically, if Glide had a `-x` flag of its own, you could call
this:
```
$ glide -x foo -name=Matt myfile.txt
```
In this case, glide would interpret and swollow the -x and pass the rest
on to glide-foo as in the example above.
### Environment Variables
When Glide executes a plugin, it passes through all of its environment
variables, including...
- GOPATH: Gopath
- PATH: Executable paths
- GLIDE_GOPATH: Gopath (in case GOPATH gets overridden by another
script)
- GLIDE_PROJECT: The path to the project
- GLIDE_YAML: The path to the project's YAML
- ALREADY_GLIDING: 1 if we are in a `glide in` session.
## Example Plugin
File: glide-foo
```bash
#!/bin/bash
echo "Hello"
```
Yup, that's it. Also see `glide-example-plugin` for a bigger example.