An application to run shell commands on incoming WebHooks from Github.
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.
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
.
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.
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
.