webhookd/scripts/examples/gitlab.sh

39 lines
1.3 KiB
Bash
Executable File

#!/bin/sh
# Functions
die() { echo "error: $@" 1>&2 ; exit 1; }
confDie() { echo "error: $@ Check the server configuration!" 1>&2 ; exit 2; }
debug() {
[ "$debug" = "true" ] && echo "debug: $@"
}
# Validate global configuration
[ -z "$GITLAB_TOKEN" ] && confDie "GITLAB_TOKEN not set."
# Validate Gitlab hook
[ "$x_gitlab_token" != "$GITLAB_TOKEN" ] && die "bad hook token"
# Validate parameters
payload=$1
payload="$(echo "$payload"|tr -d '\n')"
[ -z "$payload" ] && die "missing request payload"
payload_type=$(echo $payload | jq type -r)
[ $? != 0 ] && die "bad body format: expecting JSON"
[ ! $payload_type = "object" ] && die "bad body format: expecting JSON object but having $payload_type"
debug "received payload: $payload"
# Extract values
object_kind=$(echo $payload | jq .object_kind -r)
[ $? != 0 -o "$object_kind" = "null" ] && die "unable to extract 'object_kind' from JSON payload"
# Do something with the payload:
# Here create a simple notification when a push has occured
if [ "$object_kind" = "push" ]
then
username=$(echo $payload | jq .user_name -r)
git_ssh_url=$(echo $payload | jq .project.git_ssh_url -r)
total_commits_count=$(echo $payload | jq .total_commits_count -r)
echo "notify: $username push $total_commits_count commit(s) on $git_ssh_url"
fi