#!/bin/sh

set -e

. /etc/pkgos/pkgos.conf

if [ -z "${SALSA_TOKEN}" ] ; then
        echo "The \$SALSA_TOKEN variable is empty. Please export it with" >/dev/stderr
        echo "a valid salsa.debian.org token as content." >/dev/stderr
        exit 1
fi

ME=$(basename $0)

usage () {
	echo "usage: $ME --project-name PROJECT_NAME --debian-release <suite> --openstack-release <openstack-release-name> --jenkins-token <jenkins-token> [--project-id PROJECT_ID]"
	exit 1
}

for i in $@ ; do
	case "${1}" in
	"--project-id")
		if [ -z "${2}" ] ; then
			echo "No parameter defining the project ID."
			usage
		fi
		PROJECT_ID=${2}
		shift
		shift
	;;
	"--project-name")
		if [ -z "${2}" ] ; then
			echo "No parameter defining the project name."
			usage
		fi
		PROJECT_NAME=${2}
		shift
		shift
	;;
	"--debian-release")
		if [ -z "${2}" ] ; then
			echo "No parameter for --debian-release."
			usage
		fi
		DEBIAN_RELEASE=${2}
		shift
		shift
	;;
	"--openstack-release")
		if [ -z "${2}" ] ; then
			echo "No parameter for --openstack-release."
			usage
		fi
		OPENSTACK_RELEASE=${2}
		shift
		shift
	;;
	"--jenkins-token")
		if [ -z "${2}" ] ; then
			echo "No parameter for --jenkins-token."
			usage
		fi
		JENKINS_TOKEN=${2}
		shift
		shift
	;;
	*)
	;;
	esac
done

if [ -z "${OPENSTACK_RELEASE}" ] ; then
	CURRENT_BRANCH=$(git rev-parse --abbrev-ref HEAD 2>/dev/null || true)
	case "${CURRENT_BRANCH}" in
	debian/*)
		CANDIDATE_RELEASE=${CURRENT_BRANCH#debian/}
		if [ ! -r /etc/pkgos/openstack-release.txt ] || grep -q "^${CANDIDATE_RELEASE}$" /etc/pkgos/openstack-release.txt ; then
			OPENSTACK_RELEASE=${CANDIDATE_RELEASE}
		fi
	;;
	esac
fi

if [ -z "${PROJECT_NAME}" ] ; then
	GIT_TOPLEVEL=$(git rev-parse --show-toplevel 2>/dev/null || true)
	if [ -n "${GIT_TOPLEVEL}" ] ; then
		PROJECT_NAME=$(basename "${GIT_TOPLEVEL}")
	fi
fi

if [ -z "${PROJECT_NAME}" ] ; then
	echo "--project-name missing"
	usage
fi

if [ -z "${OPENSTACK_RELEASE}" ] ; then
	echo "--openstack-release missing"
	usage
fi
BRANCH=debian/${OPENSTACK_RELEASE}

if [ -z "${DEBIAN_RELEASE}" ] ; then
	DEBIAN_RELEASE_CANDIDATES=$(awk -v rel="${OPENSTACK_RELEASE}" \
		'$1 == rel { out = "" ; for (i = 2; i <= NF; i++) out = out (out == "" ? "" : " ") $i ; print out }' \
		/etc/pkgos/openstack-debian-release.txt 2>/dev/null || true)
	set -- ${DEBIAN_RELEASE_CANDIDATES}
	if [ $# -eq 1 ] ; then
		DEBIAN_RELEASE=${1}
		echo "Guessed --debian-release ${1} for ${OPENSTACK_RELEASE} from /etc/pkgos/openstack-debian-release.txt"
	elif [ $# -gt 1 ] ; then
		echo "${OPENSTACK_RELEASE} is available on several Debian releases (${DEBIAN_RELEASE_CANDIDATES}): please pass --debian-release explicitly" >/dev/stderr
		usage
	else
		echo "--debian-release missing"
		usage
	fi
fi

if [ -z "${JENKINS_TOKEN}" ] ; then
	echo "No \$JENKINS_TOKEN env var or --jenkins-token param."
	usage
fi

if [ -z "${PROJECT_ID}" ] ; then
	PROJECT_ID=$(pkgos-salsa-get-project-id --project-name ${PROJECT_NAME})
	if [ -z "${PROJECT_ID}" ] ; then
		echo "Cannot find project id for ${PROJECT_NAME}"
		exit 1
	fi
fi

URL=$(urlencode "https://${DEBIAN_RELEASE}-${OPENSTACK_RELEASE}.debian.net/project/${PROJECT_NAME}")

DEFAULT_BRANCH=$(curl -s -H "PRIVATE-TOKEN: ${SALSA_TOKEN}" \
	"https://salsa.debian.org/api/v4/projects/${PROJECT_ID}" | jq -r '.default_branch // ""')
case "${DEFAULT_BRANCH}" in
debian/*)
	ENCODED_BRANCH=$(urlencode ${BRANCH})
	BRANCH_FILTER="&push_events_branch_filter=${ENCODED_BRANCH}"
;;
*)
	if [ -n "${DEFAULT_BRANCH}" ] ; then
		echo "Project default branch is ${DEFAULT_BRANCH}, which isn't the debian/<release> schema: the webhook will trigger on all branches (branch_filter_strategy=all_branches)"
		BRANCH_FILTER="&branch_filter_strategy=all_branches"
	else
		echo "Could not read the default branch of ${PROJECT_NAME} from the GitLab API" >/dev/stderr
		exit 1
	fi
;;
esac

set -x
echo "New webhook for ${PROJECT_NAME}, ${DEBIAN_RELEASE} and ${OPENSTACK_RELEASE}"
curl -X POST -H "PRIVATE-TOKEN: ${SALSA_TOKEN}" \
	"https://salsa.debian.org/api/v4/projects/${PROJECT_ID}/hooks?push_events=true&url=${URL}&token=${JENKINS_TOKEN}${BRANCH_FILTER}"
echo ""
