#!/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

source "$(dirname "$BASH_SOURCE")/.integration-daemon-start"
source "$(dirname "$BASH_SOURCE")/.detect-daemon-osarch"

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

# manage the repos for each distribution separately
distros=( fedora centos opensuse oraclelinux )

# 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

for distro in "${distros[@]}"; do
	# Setup the yum repo
	REPO=$YUMDIR/$release/$distro

	for dir in contrib/builder/rpm/${PACKAGE_ARCH}/$distro-*/; do
		version="$(basename "$dir")"
		suite="${version##*-}"

		# 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 --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
done