github.sh 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. #!/bin/sh
  2. # Functions
  3. die() { echo "error: $@" 1>&2 ; exit 1; }
  4. confDie() { echo "error: $@ Check the server configuration!" 1>&2 ; exit 2; }
  5. debug() {
  6. [ "$debug" = "true" ] && echo "debug: $@"
  7. }
  8. # Validate global configuration
  9. [ -z "$GITHUB_SECRET" ] && confDie "GITHUB_SECRET not set."
  10. # Validate Github hook
  11. signature=$(echo -n "$1" | openssl sha1 -hmac "$GITHUB_SECRET" | sed -e 's/^.* //')
  12. [ "sha1=$signature" != "$x_hub_signature" ] && die "bad hook signature: expecting $x_hub_signature and got $signature"
  13. # Validate parameters
  14. payload=$1
  15. [ -z "$payload" ] && die "missing request payload"
  16. payload_type=$(echo $payload | jq type -r)
  17. [ $? != 0 ] && die "bad body format: expecting JSON"
  18. [ ! $payload_type = "object" ] && die "bad body format: expecting JSON object but having $payload_type"
  19. debug "received payload: $payload"
  20. # Extract values
  21. action=$(echo $payload | jq .action -r)
  22. [ $? != 0 -o "$action" = "null" ] && die "unable to extract 'action' from JSON payload"
  23. # Do something with the payload:
  24. # Here create a simple notification when an issue has been published
  25. if [ "$action" = "opened" ]
  26. then
  27. issue_url=$(echo $payload | jq .issue.url -r)
  28. sender=$(echo $payload | jq .sender.login -r)
  29. echo "notify: New issue from $sender: $issue_url"
  30. fi