#!/bin/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 [ $DOCKER_EXPERIMENTAL ] || [[ "$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
