diff --git a/Makefile b/Makefile
index 1a06482..903b7a3 100644
--- a/Makefile
+++ b/Makefile
@@ -19,7 +19,7 @@ release: clean deps ## Generate releases for unix systems
do \
echo "Building $$os-$$arch"; \
mkdir -p build/webhook-$$os-$$arch/; \
- GOOS=$$os GOARCH=$$arch go build -o build/webhook-$$os-$$arch/webhook; \
+ CGO_ENABLED=0 GOOS=$$os GOARCH=$$arch go build -o build/webhook-$$os-$$arch/webhook; \
tar cz -C build -f build/webhook-$$os-$$arch.tar.gz webhook-$$os-$$arch; \
done \
done
diff --git a/README.md b/README.md
index c9b43a5..279c494 100644
--- a/README.md
+++ b/README.md
@@ -18,9 +18,9 @@ If you use Mattermost or Slack, you can set up an "Outgoing webhook integration"
Everything else is the responsibility of the command's author.
## Not what you're looking for?
-|
|
|
+|
|
|
| :-: | :-: |
-| Scriptable webhook gateway to safely run your custom builds, deploys, and proxy scripts on your servers. | Inspect, monitor and replay webhooks without the back and forth troubleshooting. |
+| Scriptable webhook gateway to safely run your custom builds, deploys, and proxy scripts on your servers. | An event gateway to reliably ingest, verify, queue, transform, filter, inspect, monitor, and replay webhooks. |
# Getting started
diff --git a/docs/Hook-Examples.md b/docs/Hook-Examples.md
index 7d07932..1b01ea4 100644
--- a/docs/Hook-Examples.md
+++ b/docs/Hook-Examples.md
@@ -498,7 +498,8 @@ A reference to the second item in the array would look like this:
[
{
"id": "sendgrid",
- "execute-command": "{{ .Hookecho }}",
+ "execute-command": "/root/my-server/deployment.sh",
+ "command-working-directory": "/root/my-server",
"trigger-rule": {
"match": {
"type": "value",
diff --git a/images/hookdeck-black.svg b/images/hookdeck-black.svg
new file mode 100644
index 0000000..962b07d
--- /dev/null
+++ b/images/hookdeck-black.svg
@@ -0,0 +1,11 @@
+
diff --git a/images/hookdeck-white.svg b/images/hookdeck-white.svg
new file mode 100644
index 0000000..19afbbf
--- /dev/null
+++ b/images/hookdeck-white.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/internal/hook/hook.go b/internal/hook/hook.go
index 6699eeb..394dd79 100644
--- a/internal/hook/hook.go
+++ b/internal/hook/hook.go
@@ -13,12 +13,12 @@ import (
"errors"
"fmt"
"hash"
- "io/ioutil"
"log"
"math"
"net"
"net/textproto"
"os"
+ "path"
"reflect"
"regexp"
"strconv"
@@ -750,14 +750,18 @@ func (h *Hooks) LoadFromFile(path string, asTemplate bool) error {
}
// parse hook file for hooks
- file, e := ioutil.ReadFile(path)
+ file, e := os.ReadFile(path)
if e != nil {
return e
}
if asTemplate {
- funcMap := template.FuncMap{"getenv": getenv}
+ funcMap := template.FuncMap{
+ "cat": cat,
+ "credential": credential,
+ "getenv": getenv,
+ }
tmpl, err := template.New("hooks").Funcs(funcMap).Parse(string(file))
if err != nil {
@@ -956,3 +960,27 @@ func compare(a, b string) bool {
func getenv(s string) string {
return os.Getenv(s)
}
+
+// cat provides a template function to retrieve content of files
+// Similarly to getenv, if no file is found, it returns the empty string
+func cat(s string) string {
+ data, e := os.ReadFile(s)
+
+ if e != nil {
+ return ""
+ }
+
+ return strings.TrimSuffix(string(data), "\n")
+}
+
+// credential provides a template function to retreive secrets using systemd's LoadCredential mechanism
+func credential(s string) string {
+ dir := getenv("CREDENTIALS_DIRECTORY")
+
+ // If no credential directory is found, fallback to the env variable
+ if dir == "" {
+ return getenv(s)
+ }
+
+ return cat(path.Join(dir, s))
+}