https://github.com/piranha/webhooker
github webhook handler
https://github.com/piranha/webhooker
go webhook
Last synced: about 1 year ago
JSON representation
github webhook handler
- Host: GitHub
- URL: https://github.com/piranha/webhooker
- Owner: piranha
- License: mit
- Created: 2013-05-28T21:08:52.000Z (about 13 years ago)
- Default Branch: main
- Last Pushed: 2024-01-29T09:36:50.000Z (over 2 years ago)
- Last Synced: 2025-04-30T06:36:54.896Z (about 1 year ago)
- Topics: go, webhook
- Language: Go
- Size: 3.86 MB
- Stars: 49
- Watchers: 5
- Forks: 3
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# webhooker
An application to run shell commands on incoming WebHooks from Github.
## Installation
```
cd /usr/local/bin
curl -sL https://github.com/piranha/webhooker/releases/download/1.2/webhooker-linux.gz | gunzip > webhooker && chmod +x webhooker
```
or something like this.
## Usage
You run it like this (see `webhooker --help` to get more help):
```
webhooker -p 3434 -i 127.0.0.1 piranha/webhooker:main='echo $COMMIT'
```
It runs every command in `sh`, so you can use more complex commands (with `&&`
and `|`).
`user/repo:branch` pattern is a regular expression, so you could do
`user/project:fix.*=cmd` or even `.*=cmd`.
You can put all your configuration in a file line-by-line and then run like
`webhooker -c this-file`.
## Running
Maybe you want (like I do) to run this with systemd, create
`/etc/systemd/system/webhooker.service` with the following content:
```
[Unit]
Description=webhooker
[Service]
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=webhooker
User=piranha
Group=piranha
ExecStart=/usr/local/bin/webhooker -p 3434 \
user/repo:main='cd /opt/repo && git fetch -q && git reset --hard origin/main && restart it or something'
[Install]
WantedBy=default.target
```
And then tell systemd to pick it up: `systemctl daemon-reload && systemctl start
webhooker && systemctl enable webhooker`.
I expect you to run it behind your HTTP proxy of choice, and in my case it's
nginx and such config is used to protect it from unwanted requests:
```
location /webhook {
proxy_pass http://localhost:3434;
allow 204.232.175.64/27;
allow 192.30.252.0/22;
deny all;
}
```
Or in caddy:
```
@webhook {
remote_ip 192.30.252.0/22 185.199.108.0/22 140.82.112.0/20
path /webhook
}
reverse_proxy @webhook localhost:3434
```
After that I can put `http://domain.my/webhook` in Github's repo settings
WebHook URLs and press 'Test Hook' to check if it works.
## Environment
webhooker provides your commands with some variables in case you need them:
- `$REPO` - repository name in "user/name" format
- `$REPO_URL` - full repository url
- `$PRIVATE` - strings "true" or "false" if repository is private or not
- `$BRANCH` - branch name
- `$COMMIT` - last commit hash id
- `$COMMIT_MESSAGE` - last commit message
- `$COMMIT_TIME` - last commit timestamp
- `$COMMIT_AUTHOR` - username of author of last commit
- `$COMMIT_URL` - full url to commit
And, of course, it passes through some common variables: `$PATH`, `$HOME`,
`$USER`.