#!/bin/bash

echo "This script will send the tarballs to infradead and create tags and release at gitlab"
echo "It will use your ssh keys and gitlab token as placed in ~/.gitlab-token"
echo "Press enter to continue..."
read

if test -z "$1";then
	echo "usage: $0 [VERSION]"
	echo "No version was specified"
	exit 1
fi

if ! test -f "$(expr ~/.gitlab-token)";then
	echo "Cannot find .gitlab-token"
	exit 1
fi

PROJECT=473862
TOKEN=$(cat ~/.gitlab-token)
version=$1
file=build/meson-dist/ocserv-${version}.tar.xz

echo "Signing artifacts as generated by 'meson dist -C build --no-tests'"
echo "Press enter to continue or type skip to skip..."
read s

if test "$s" != "s" && test "$s" != "skip";then
	gpg --sign --detach ${file}
	scp ${file}* casper.infradead.org:/var/ftp/pub/ocserv/
fi

echo "Creating tag $version and gitlab release"
echo "Press enter to continue or type skip to skip..."
read s
if test "$s" != "s" && test "$s" != "skip";then
	git tag -s ${version} -m "Released ${version}"
	git push origin ${version}
fi

echo ""
echo "Checking for $version milestone"
echo "Press enter to continue or type skip to skip..."
read s

milestones=''
if test "$s" != "s" && test "$s" != "skip";then
	curl -s --header "PRIVATE-TOKEN: ${TOKEN}" "https://gitlab.com/api/v4/projects/${PROJECT}/milestones?title=$version"|grep "$version" >/dev/null 2>&1
	if [[ $? = 0 ]];then
		echo "Milestone $version will be linked to release"
		milestones=' "milestones": [ "'${version}'" ],'
	else
		echo "No matching milestones"
		milestones=''
	fi
fi

echo "Creating gitlab $version release"
echo "Press enter to continue or type skip to skip..."
read s

if test "$s" != "s" && test "$s" != "skip";then
	line=$(grep -n "Version ${version}" NEWS|cut -d ':' -f 1)
	test -z "$line" && exit 1

	stopline="$(head -n 100 NEWS|tail -n $((100-$line))|grep -n Version|head -1|cut -d ':' -f 1)"
	test -z "$stopline" && exit 1

	msg=$(head -n 100 NEWS|tail -n +$((1+$line))|head -n $(($stopline-1))|tr -d '"'|tr -d "'"|sed '{:q;N;s/\n/\\n/g;t q}')

	set -e
	curl -s --header 'Content-Type: application/json' --header "PRIVATE-TOKEN: ${TOKEN}" \
	     --data '{ "name": "'${version}'", "tag_name": "'${version}'", "description": "'"${msg}"'", '"${milestones}"' "assets": { "links": [{ "name": "PGP signature", "url": "https://www.infradead.org/ocserv/download/ocserv-'${version}'.tar.xz.sig", "link_type":"other" }, { "name": "Tarball", "url": "https://www.infradead.org/ocserv/download/ocserv-'${version}'.tar.xz", "link_type":"package" }] } }' \
	     --request POST "https://gitlab.com/api/v4/projects/${PROJECT}/releases" | jq
fi

echo ""
echo "release is ready: https://gitlab.com/openconnect/ocserv/-/releases"

exit 0
