From f89b09bef6d8d4d9d27728265fea1166aecc0fbd Mon Sep 17 00:00:00 2001 From: Ian Roberts Date: Sun, 27 Oct 2024 16:27:31 +0000 Subject: [PATCH 1/5] fix: use CGO_ENABLED=0 for release builds (#705) Ensure that release builds are built with cgo disabled. This is usually the case for cross-compiled builds anyway, but adding this flag makes builds consistent regardless of what platform they are being built on. In particular, without CGO_ENABLED=0, if you make the release builds on a linux/amd64 system then the linux/amd64 binary is dynamically linked against the system libc, meaning a binary built on a glibc-based system like Ubuntu will not work on a musl libc system like Alpine. This is what appears to have happened for release 2.8.1. But the same source code built on a different system (e.g. darwin/arm64) would cross-compile the linux/amd64 binary with cgo disabled, making a static binary that works on both glibc and musl systems. This is what appears to have happened for release 2.8.2. Setting CGO_ENABLED=0 in the Makefile will make the behaviour consistent for future releases, producing static binaries for the linux builds in all cases, whatever the build platform. --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 From ce08a68a13c9cd56a4a12cf00c72c1922c2d9e18 Mon Sep 17 00:00:00 2001 From: Cameron Moore Date: Tue, 12 Nov 2024 23:01:26 -0600 Subject: [PATCH 2/5] docs: remove reference to Hookecho (#711) --- docs/Hook-Examples.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) 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", From 7bb680821daf096961632ecc34c1bcaa4bf5573c Mon Sep 17 00:00:00 2001 From: Phil Leggetter Date: Sat, 30 Nov 2024 21:41:50 +0000 Subject: [PATCH 3/5] update Hookdeck images (light and dark) and description (#713) --- README.md | 4 ++-- images/hookdeck-black.svg | 11 +++++++++++ images/hookdeck-white.svg | 1 + 3 files changed, 14 insertions(+), 2 deletions(-) create mode 100644 images/hookdeck-black.svg create mode 100644 images/hookdeck-white.svg 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? -| hookdoo | hookdeck | +| hookdoo | hookdeck | | :-: | :-: | -| 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/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 From eb7e8f5ba827ee4c2b6dc687a4d9685d5f207386 Mon Sep 17 00:00:00 2001 From: Tom Hubrecht Date: Sun, 12 Jan 2025 00:42:22 +0100 Subject: [PATCH 4/5] feat: Add two template functions (#712) * chore: replace ioutil.ReadFile by os.ReadFile * feat: Add two template functions - cat: Allows reading a value from a file - credential: Allows reading a credential passed by systemd --- internal/hook/hook.go | 34 +++++++++++++++++++++++++++++++--- 1 file changed, 31 insertions(+), 3 deletions(-) diff --git a/internal/hook/hook.go b/internal/hook/hook.go index 6699eeb..1796e1c 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 string(data) +} + +// 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)) +} From 1b1335519635bdd210a071404c8f05cb26026c3d Mon Sep 17 00:00:00 2001 From: Tom Hubrecht Date: Sun, 12 Jan 2025 12:27:16 +0100 Subject: [PATCH 5/5] fix: Trim the cat output (#720) `os.ReadFile` includes a trailing EOL, so we have to remove it to get the correct value --- internal/hook/hook.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/hook/hook.go b/internal/hook/hook.go index 1796e1c..394dd79 100644 --- a/internal/hook/hook.go +++ b/internal/hook/hook.go @@ -970,7 +970,7 @@ func cat(s string) string { return "" } - return string(data) + return strings.TrimSuffix(string(data), "\n") } // credential provides a template function to retreive secrets using systemd's LoadCredential mechanism