English(Chinglish), 简体中文
Yet another GitHub/GitLab Webhook listener, run shell commands with the events received from GitHub/GitLab.
Built with rifling.
Use cargo
:
bash
cargo install trigger
Download binary (currently Linux only) from GitHub release, and move it to your PATH
.
Commandline help:
bash
trigger --help
Start the program
bash
trigger --config "<path to config file>"
Or, start trigger with debug log enabled:
bash
TRIGGER_LOG=debug trigger --config "<path to config file>"
debug
can be replaced with any other logging level you like (including error
, warn
, info
, debug
, trace
).
Trigger's configurations are in YAML format.
Example:
```yaml
settings: host: 0.0.0.0:4567 # Host address trigger is going to listen secret: "secret" # Secret used to authenticate payload (Optional) printcommands: false # Print command or not (Optional, default: false) captureoutput: false # Capture output of the commands (Optional, default: false) exitonerror: true # Exit on error in commands (Optional, default: false) kotomei: true # Warn you about letting @kotomei study for his exam or not (Optional, default: true)
events: common: | set -e; PAYLOAD='{payload}'; function getprop { echo $(echo ${PAYLOAD} | jq $1 | tr -d '"'); } SENDER=$(getprop '.sender.login'); SENDERID=$(getprop '.sender.id'); all: echo "This command will be executed in all the events, the current event is {event}"; push: echo "User \"${SENDER}\" with ID \"${SENDERID}\" pushed to this repository"; watch: | ACTION=$(getprop '.action'); echo "GitHub user \"${SENDER}\" with ID \"${SENDERID}\" ${ACTION} watching this repository"; else: echo "\"${SENDER}\" with ID \"${SENDERID}\" sent {event} event"; ```
events.common
will be executed before the actual event.events.all
will be executed after receiving any valid request." "
(whitespaces) with "_"
(underscore) and make sure it's in lower case.
Push Hook
in GitLab's documentation will be push_hook
in trigger's configuration.events.else
will be executed when no matching event defined.{payload}
in commands will be replaced with unparsed payload.
unknown
):
{id}
will be replaced with UUID of the event (GitHub only, GitLab does not provide this).{event}
will be replaced with type of the event.{signature}
will be replaced with signature of the payload.{request_body}
will be replaced with body of the request ().It is also recommended to use it with a reverse proxy, such as nginx:
nginx
location /hook {
proxy_pass http://0.0.0.0:9999/;
}
bash
docker pull kaymw/trigger
bash
docker run --volume $PWD:/work trigger trigger --config trigger.yaml
Note: In this docker image, trigger's default working directory is /work
, and the default port is 4567
.Credit: @musnow
Systemd unit (trigger.service
):
```systemd
[Unit]
Description=Yet another GitHub Webhook listener
After=network-online.target
[Service] Type=simple WorkingDirectory=/path/to/your/config/ ExecStart=/path/to/trigger /path/to/your/config/file.yaml Restart=always RestartSec=3
[Install] WantedBy=multi-user.target
```
This software is distributed under the terms of MIT license, for more details, please consult LICENSE file.
Trigger uses prettyenvlogger and log to log.
Trigger uses yaml-rust to parse configurations.
Trigger uses hyper to create web server.
Trigger uses run_script to run shell code.