A really simple webhook receiver.
Go to file
2021-07-29 09:46:33 +01:00
config.json Add required field ListenAddress to config, document in readme 2021-07-29 09:42:28 +01:00
Dockerfile Add Dockerfile 2021-07-29 08:09:04 +01:00
example.sh Initial commit 2021-07-28 16:20:06 +01:00
go.mod Fix module name 2021-07-29 07:37:18 +01:00
go.sum Initial commit 2021-07-28 16:20:06 +01:00
gohookr.service Update service file to restart on app crash 2021-07-29 09:46:33 +01:00
main.go Add required field ListenAddress to config, document in readme 2021-07-29 09:42:28 +01:00
readme.md Add required field ListenAddress to config, document in readme 2021-07-29 09:42:28 +01:00

gohookr

A really simple webhook receiver, which listens at /webhooks/<webhook-name>.

Default config path is /etc/gohookr.conf and can be overriden by setting environment variable CONFIG.

Check below for an example configuration.

Installation

After you install go:

go mod tidy
go build
cp gohookr /usr/local/bin/
cp gohookr.service /usr/lib/systemd/system/
systemctl daemon-reload
systemctl enable --now gohookr

Signature Verification

Signature verificaiton is done using SHA256 HMACs. You must set which HTTP header gohookr will receive a signature from using the SignatureHeader key for each service. You should also specify a shared secret in the Secret key.

Disable Signature Verification

You can disable signature verification altogether by setting environment variable NO_SIGNATURE_VERIFICATION to true.

Tests

gohookr can run test before running your script. Tests must be in the form of bash scripts. A non-zero return code is considered a fail and gohookr will run no further tests and will not deploy.

Tests are run in the order they're listed so any actions that need to be done before real tests are run can simply be put before the tests.

Example Config

Required config keys are ListenAddress and Services.

Requried keys per service are Script, Secret, SignatureHeader.

An example config file can be found here but also below:

{
  "ListenAddress": "127.0.0.1:8654",
  "Services": {
    "test": {
      "Script": "./example.sh",
      "Secret": "THISISVERYSECRET",
      "SignatureHeader": "X-Gitea-Signature",
      "Tests": [
        {
          "Command": "git",
          "Arguments": [ "pull" ]
        }
      ]
    }
  }
}