#!/usr/bin/env bash
set -e

# This script creates the yum repos for the .rpm files generated by hack/make/build-rpm
#
# The following can then be used as a yum repo:
# 	http://yum.dockerproject.org/repo/$release/$distro/$distro-version
#
# For example:
# 	http://yum.dockerproject.org/repo/main/fedora/23
# 	http://yum.dockerproject.org/repo/testing/centos/7
# 	http://yum.dockerproject.org/repo/experimental/fedora/23
# 	http://yum.dockerproject.org/repo/main/centos/7
#
# ... and so on and so forth for the builds created by hack/make/build-rpm

: ${DOCKER_RELEASE_DIR:=$DEST}
YUMDIR=$DOCKER_RELEASE_DIR/yum/repo
: ${GPG_KEYID:=releasedocker}

# get the release
release="main"

if [[ "$VERSION" == *-rc* ]]; then
	release="testing"
fi

if [[ "$VERSION" == *-dev ]] || [ -n "$(git status --porcelain)" ]; then
	release="experimental"
fi

# Setup the yum repo
for dir in bundles/$VERSION/build-rpm/*/; do
	version="$(basename "$dir")"
	suite="${version##*-}"
	distro="${version%-*}"

	REPO=$YUMDIR/$release/$distro

	# if the directory does not exist, initialize the yum repo
	if [[ ! -d $REPO/$suite/Packages ]]; then
		mkdir -p "$REPO/$suite/Packages"

		createrepo --pretty "$REPO/$suite"
	fi

	# path to rpms
	RPMFILE=( "bundles/$VERSION/build-rpm/$version/RPMS/"*"/docker-engine"*.rpm "bundles/$VERSION/build-rpm/$version/SRPMS/docker-engine"*.rpm )

	# if we have a $GPG_PASSPHRASE we may as well
	# sign the rpms before adding to repo
	if [ ! -z $GPG_PASSPHRASE ]; then
		# export our key to rpm import
		gpg --armor --export "$GPG_KEYID" > /tmp/gpg
		rpm --import /tmp/gpg

		# sign the rpms
		echo "yes" | setsid rpm \
			--define "_gpg_name $GPG_KEYID" \
			--define "_signature gpg" \
			--define "__gpg_check_password_cmd /bin/true" \
			--define "__gpg_sign_cmd %{__gpg} gpg --batch --no-armor --digest-algo 'sha512' --passphrase '$GPG_PASSPHRASE' --no-secmem-warning -u '%{_gpg_name}' --sign --detach-sign --output %{__signature_filename} %{__plaintext_filename}" \
			--resign "${RPMFILE[@]}"
	fi

	# copy the rpms to the packages folder
	cp "${RPMFILE[@]}" "$REPO/$suite/Packages"

	# update the repo
	createrepo --pretty --update "$REPO/$suite"
done
