Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/agrison/harpoon
GitHub WebHook server written in Go
https://github.com/agrison/harpoon
github go golang harpoon server tunneling webhook
Last synced: 2 months ago
JSON representation
GitHub WebHook server written in Go
- Host: GitHub
- URL: https://github.com/agrison/harpoon
- Owner: agrison
- License: mit
- Created: 2016-03-08T19:30:38.000Z (almost 9 years ago)
- Default Branch: master
- Last Pushed: 2018-10-10T17:53:15.000Z (over 6 years ago)
- Last Synced: 2024-08-04T09:06:55.237Z (6 months ago)
- Topics: github, go, golang, harpoon, server, tunneling, webhook
- Language: Go
- Homepage:
- Size: 2.54 MB
- Stars: 242
- Watchers: 6
- Forks: 13
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
## Harpoon
[![Go Report Card](https://goreportcard.com/badge/github.com/agrison/harpoon)][goreportcard]
[![Build Status](https://travis-ci.org/agrison/harpoon.svg?branch=master)](https://travis-ci.org/agrison/harpoon)[goreportcard]: https://goreportcard.com/report/github.com/agrison/harpoon
Harpoon is a simple Go program that listens for GitHub hooks like `push` on specific git repository `refs` and execute
a defined command when it occurs.It can be configured in a TOML configuration file.
That's nothing fancy, just didn't want to install the whole nodejs + npm or Apache + PHP just for this.
### Install
```sh
go get github.com/agrison/harpoon
go build
```Add it to your path if you want.
### Runnning
#### Configuration
You must have a `config.toml` file located in your directory.
This is a sample TOML file:
```toml
port = 9001
addr = "0.0.0.0"
# tunneling stuff
tunnel = true
tunnelName = "foobarbazz"[events."push:foo/bar:refs/heads/develop"]
cmd = "echo"
args = "Push!"[events."watch:foo/bar:refs/heads/develop"]
cmd = "echo"
args = "Watch!"
```As you can see events and refs can be configured in the `events` TOML table section.
These keys have the following format `events.{event}:{repository}:{ref}` where `{event}` refers to a GitHub WebHook event
like `push`, `watch`, `pull_request`, ...; `{repository}` is the GitHub repository name and `{ref}` refers to a ref in your git repository like `refs/heads/master` or `refs/tags/v0.0.1`.For the above example, it will echo `Push!` when something has been pushed to the `develop` branch of your GitHub repository.
It will also echo `Watch!` if someone stars it.#### Tunneling
Tunneling can be enabled using `localtunnel.me`, you just have to enable it in the `config.toml` and indicate a desired subdomain using the `tunnelName` field.
If no `tunnelName` is provided then `localtunnel.me` will give you a random subdomain, this subdomain is printed in the console logs.#### Really running
```sh
harpoon
```or to have it verbose (use `-vt` also if you want logs about `localtunnel.me`):
```sh
harpoon -v
```It will output something like this when running:
```
__
/ /_ ____ __________ ____ ____ ____
/ __ \/ __ `/ ___/ __ \/ __ \/ __ \/ __ \
/ / / / /_/ / / / /_/ / /_/ / /_/ / / / /
/_/ /_/\__,_/_/ / .___/\____/\____/_/ /_/
/_/
Listening on 0.0.0.0:9001
push detected on foo/bar with ref refs/heads/develop with the following commits:
2016-03-08 13:59:38 +0100 CET - adding some awesomeness by Foo Bar
2016-03-08 13:59:57 +0100 CET - forgot the unicorn png by Foo Bar
2016-03-08 14:01:12 +0100 CET - so much joy in one commit by Foo Bar
> Push!
```Obviously, the command should be something like `/path/to/pull-build-n-deploy.sh` where some awesome stuff is going on.
Like something involving git, maven, rake, npm, bower, I don't know, this is your job :)### Security
`POST` requests made by GitHub are validated against the `X-Hub-Signature` if the environment variable `GITHUB_HOOK_SECRET_TOKEN` is set.
It must be the same as the one defined on the GitHub's WebHook page.### Thanks
- [https://mholt.github.io/json-to-go/](https://mholt.github.io/json-to-go/)
- [https://github.com/BurntSushi/toml](https://github.com/BurntSushi/toml)
- [https://github.com/fatih/color](https://github.com/fatih/color)
- [https://github.com/gorilla/mux](https://github.com/gorilla/mux)
- [https://github.com/NoahShen/gotunnelme](https://github.com/NoahShen/gotunnelme)### Licence
MIT