A tool written in Go [golang] to handle GitHub and GitLab webhooks [trigger deployments, tests, etc] and send Telegram notifications
Assuming you have a working Go setup
go get -u github.com/worg/hookah/cmd/hookah
You'll need to create a JSON config file named config.json
.
Example:
{
"host": "127.0.0.1",
"port": 8080,
"repos": [
{
"name": "hookah",
"branch": "*",
"tasks" : [
{
"cwd": "/home/user/hookah/",
"cmd": "./test.sh",
"args": ["prod", "dev"]
}
],
"notify": {
"telegram" : {
"token": "bot123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11",
"chat_id": 123456
}
}
}
]
}
field | type | definition | required |
---|---|---|---|
host | string | ip/name to listen on | NO |
port | number | port to listen on | YES |
repos | array[object] | list of repositories to check | YES |
repos:name | string | repository name | YES |
repos:branch | string | repository branch tip: you can use * to match any |
YES |
repos:tasks | arrray[object] | list of tasks to execute | NO |
repos:tasks:cwd | string | working directory of command to execute | NO |
repos:tasks:cmd | string | command to execute | YES |
repos:tasks:args | string | arguments passed to command | NO |
repos:notify | object | notification configuration | NO |
repos:notify:telegram:token | string | Telegram bot token | YES |
repos:notify:telegram:chat_id | string | Telegram Chat ID to send notifications to | YES |
For a complete JSON example see config.sample.json.
Execute hookah
on the same path where config.json is or specify its path hookah -path="/path/to/config/"
.
Hookah should start and listen for webhook events on:
/gitlab
for GitLab Webhooks./github
for GitHub Webhooks.
If any payload matches branch/repo then it will execute the corresponding tasks and [if configured] notify a commit summary.
The package github.com/worg/hookah/webhooks
contains structures matching GitHub/GitLab payloads for JSON unmarshalling,
both meet Context interface that provides common fields to both payloads.