AkurAI Build
Menu

Public repository / main

AkurAI-Build / scripts/test-post-receive.sh

Latest change 3367b5f4b77e4085d5cc513b20e67403d2207543 - OLI-272: outbound webhooks with HMAC signatures, delivery log and redelivery; git Basic challenge by Óli

#!/usr/bin/env bash
# The post-receive hook reports every ref update to the forge with the pusher, and is a no-op outside the forge.
set -euo pipefail
here="$(cd "$(dirname "$0")/.." && pwd)"
tmp="$(mktemp -d)"; trap 'kill "${srv:-0}" 2>/dev/null || true; rm -rf "$tmp"' EXIT
fail() { echo "FAIL: $*" >&2; exit 1; }
cat > "$tmp/forge.py" <<'PY'
import json, sys
from http.server import BaseHTTPRequestHandler, HTTPServer
class H(BaseHTTPRequestHandler):
    def log_message(self, *a): pass
    def do_POST(self):
        n = int(self.headers.get("content-length", 0)); body = json.loads(self.rfile.read(n))
        with open(sys.argv[2], "a") as f: f.write(json.dumps({"path": self.path, "auth": self.headers.get("authorization"), "body": body}) + "\n")
        self.send_response(200); self.send_header("content-length", "2"); self.end_headers(); self.wfile.write(b"{}")
HTTPServer(("127.0.0.1", int(sys.argv[1])), H).serve_forever()
PY
port=$((20000 + RANDOM % 20000))
python3 "$tmp/forge.py" "$port" "$tmp/seen" & srv=$!
sleep 1
hook="$here/deploy/hooks/post-receive"
printf 'aaaa bbbb refs/heads/main\ncccc dddd refs/tags/v1\n' | env AKURAI_FORGE_URL="http://127.0.0.1:$port" AKURAI_FORGE_TOKEN=tok AKURAI_FORGE_REPO=demo REMOTE_USER=ada@example.is "$hook" || fail "hook failed"
sleep 1
[ "$(wc -l < "$tmp/seen")" = 2 ] || fail "expected 2 reports, got $(cat "$tmp/seen")"
grep -q '"path": "/api/repos/demo/events/push"' "$tmp/seen" || fail "wrong path"
grep -q '"auth": "Bearer tok"' "$tmp/seen" || fail "token not sent"
grep -q '"pusher": "ada@example.is"' "$tmp/seen" || fail "pusher missing"
grep -q '"reference": "refs/tags/v1"' "$tmp/seen" || fail "tag ref missing"
printf 'aaaa bbbb refs/heads/main\n' | "$hook" || fail "no-env hook must succeed"
[ "$(wc -l < "$tmp/seen")" = 2 ] || fail "no-env hook must not report"
echo ok