Command webhook starts a web server which listens on GitHub's POST requests. The payload of each request is verified against its signature, unmarshalled into corresponding event struct and the applied to the template script provided by a user.


webhook [-cert file -key file] [-addr address] [-log file] -secret key script

The struct being passed to the template script is:

type Event struct {
	Name    string
	Payload interface{}
	Args    map[string]string

The Name field denotes underlying type for the Payload. Full mapping between possible Name values and Payload types is listed in the documentation of the webhook package. The Args field contains all command line flags passed to template script.

Template scripts use template syntax of text/template package. Each template script has registered extra control functions:

	An alias for os.Getenv.
	An alias for log.Println. Used only for side-effect, returns empty string.
	An alias for log.Printf. Used only for side-effect, returns empty string.
	An alias for exec.Command. Returned value is the process' output read
	from its os.Stdout.


In order to log an e-mail of each person that pushed to your repository, create a template script with the following content:

$ cat >push.tsc <<EOF
> {{if .Name | eq "push"}}
>   {{logf "%s pushed to %s" .Payload.Pusher.Email .Payload.Repository.Name}}
> {{endif}}

And start the webhook:

$ webhook -secret secret123 push.tsc
2015/03/13 21:32:15 INFO Listening on [::]:8080 . . .

Webhook listens on by default.

Template scripts input

Template scripts support currently two of ways accepting input:

- via {{env "VARIABLE"}} function
- and via command lines arguments

Positional arguments that follow double-dash argument are turned into map[string]string value, which is then passed as Args field of an Event.


The command line arguments passed after -- for the following command line

$ webhook -secret secret123 examples/slack.tsc -- -token token123 -channel CH123

are passed to the script as

Args: map[string]string{
	"Token":   "token123",
	"Channel": "CH123",

The -cert and -key flags are used to provide paths for the certificate and private key files. When specified, webhook serves HTTPS connections by default on

The -addr flag can be used to specify a network address for the webhook to listen on.

The -secret flag sets the secret value to verify the signature of GitHub's payloads. The value is required and cannot be empty.

The -log flag redirects output to the given file.

The -dump flag makes webhook dump each received JSON payload into specified directory. The file is named after <event>-<delivery>.json, where:

- <event> is a value of X-GitHub-Event header
- <delivery> is a value of X-GitHub-Delivery header

The script argument is a path to the template script file which is used as a handler for incoming events.

Source Files