#!/bin/bash
set -e

# This script creates the apt repos for the .deb files generated by hack/make/build-deb
#
# The following can then be used as apt sources:
# 	deb http://apt.dockerproject.org/repo $distro-$release $version
#
# For example:
#	deb http://apt.dockerproject.org/repo ubuntu-trusy main
#	deb http://apt.dockerproject.org/repo ubuntu-vivid testing
#	deb http://apt.dockerproject.org/repo debian-wheezy experimental
#	deb http://apt.dockerproject.org/repo debian-jessie main
#
# ... and so on and so forth for the builds created by hack/make/build-deb

: ${DOCKER_RELEASE_DIR:=$DEST}
: ${GPG_KEYID:=releasedocker}
APTDIR=$DOCKER_RELEASE_DIR/apt/repo

# setup the apt repo (if it does not exist)
mkdir -p "$APTDIR/conf" "$APTDIR/db"

# supported arches/sections
arches=( amd64 i386 )
components=( main testing experimental )

# create/update apt-ftparchive file
if [ ! -f "$APTDIR/conf/apt-ftparchive.conf" ]; then
	cat <<-EOF > "$APTDIR/conf/apt-ftparchive.conf"
	Dir {
		ArchiveDir "${APTDIR}";
		CacheDir "${APTDIR}/db";
	};

	Default {
		Packages::Compress ". gzip bzip2";
		Sources::Compress ". gzip bzip2";
		Contents::Compress ". gzip bzip2";
	};

	TreeDefault {
		BinCacheDB "packages-\$(SECTION)-\$(ARCH).db";
		Directory "pool/\$(SECTION)";
		Packages "\$(DIST)/\$(SECTION)/binary-\$(ARCH)/Packages";
		SrcDirectory "pool/\$(SECTION)";
		Sources "\$(DIST)/\$(SECTION)/source/Sources";
		Contents "\$(DIST)/\$(SECTION)/Contents-\$(ARCH)";
		FileList "$APTDIR/\$(DIST)/\$(SECTION)/filelist";
	};
	EOF

	for suite in $(exec contrib/reprepro/suites.sh); do
		cat <<-EOF
		Tree "dists/${suite}" {
			Sections "main testing experimental";
			Architectures "${arches[*]}";
		}

		EOF
	done >> "$APTDIR/conf/apt-ftparchive.conf"
fi

if [ ! -f "$APTDIR/conf/docker-engine-release.conf" ]; then
	cat <<-EOF > "$APTDIR/conf/docker-engine-release.conf"
	APT::FTPArchive::Release::Origin "Docker";
	APT::FTPArchive::Release::Components "${components[*]}";
	APT::FTPArchive::Release::Label "Docker APT Repository";
	APT::FTPArchive::Release::Architectures "${arches[*]}";
	EOF
fi

# set the component for the version being released
component="main"

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

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

# release the debs
for dir in contrib/builder/deb/*/; do
	version="$(basename "$dir")"
	codename="${version//debootstrap-}"

	DEBFILE=( "bundles/$VERSION/build-deb/$version/docker-engine"*.deb )

	# if we have a $GPG_PASSPHRASE we may as well
	# dpkg-sign before copying the deb into the pool
	if [ ! -z "$GPG_PASSPHRASE" ]; then
		dpkg-sig -g "--passphrase $GPG_PASSPHRASE" \
			-k "$GPG_KEYID" --sign builder "${DEBFILE[@]}"
	fi

	# add the deb for each component for the distro version into the pool
	mkdir -p "$APTDIR/pool/$component/d/docker-engine/"
	cp "${DEBFILE[@]}" "$APTDIR/pool/$component/d/docker-engine/"

	# update the filelist for this codename/component
	find "$APTDIR/pool/$component" \
		-name *~${codename#*-}*.deb > "$APTDIR/dists/$codename/$component/filelist"
done


# run the apt-ftparchive commands so we can have pinning
apt-ftparchive generate "$APTDIR/conf/apt-ftparchive.conf"

for dir in contrib/builder/deb/*/; do
	version="$(basename "$dir")"
	codename="${version//debootstrap-}"

	apt-ftparchive \
		-o "APT::FTPArchive::Release::Codename=$codename" \
		-o "APT::FTPArchive::Release::Suite=$codename" \
		-c "$APTDIR/conf/docker-engine-release.conf" \
		release \
		"$APTDIR/dists/$codename" > "$APTDIR/dists/$codename/Release"

	for arch in "${arches[@]}"; do
		apt-ftparchive \
			-o "APT::FTPArchive::Release::Codename=$codename" \
			-o "APT::FTPArchive::Release::Suite=$codename" \
			-o "APT::FTPArchive::Release::Component=$component" \
			-o "APT::FTPArchive::Release::Architecture=$arch" \
			-c "$APTDIR/conf/docker-engine-release.conf" \
			release \
			"$APTDIR/dists/$codename/$component/binary-$arch" > "$APTDIR/dists/$codename/$component/binary-$arch/Release"
	done
done
