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

# subshell so that we can export PATH and TZ without breaking other things
(
	export TZ=UTC # make sure our "date" variables are UTC-based
	bundle .integration-daemon-start
	bundle .detect-daemon-osarch

	# TODO consider using frozen images for the dockercore/builder-deb tags

	tilde='~' # ouch Bash 4.2 vs 4.3, you keel me
	debVersion="${VERSION//-/$tilde}" # using \~ or '~' here works in 4.3, but not 4.2; just ~ causes $HOME to be inserted, hence the $tilde
	# if we have a "-dev" suffix or have change in Git, let's make this package version more complex so it works better
	if [[ "$VERSION" == *-dev ]] || [ -n "$(git status --porcelain)" ]; then
		gitUnix="$(git log -1 --pretty='%at')"
		gitDate="$(date --date "@$gitUnix" +'%Y%m%d.%H%M%S')"
		gitCommit="$(git log -1 --pretty='%h')"
		gitVersion="git${gitDate}.0.${gitCommit}"
		# gitVersion is now something like 'git20150128.112847.0.17e840a'
		debVersion="$debVersion~$gitVersion"

		# $ dpkg --compare-versions 1.5.0 gt 1.5.0~rc1 && echo true || echo false
		# true
		# $ dpkg --compare-versions 1.5.0~rc1 gt 1.5.0~git20150128.112847.17e840a && echo true || echo false
		# true
		# $ dpkg --compare-versions 1.5.0~git20150128.112847.17e840a gt 1.5.0~dev~git20150128.112847.17e840a && echo true || echo false
		# true

		# ie, 1.5.0 > 1.5.0~rc1 > 1.5.0~git20150128.112847.17e840a > 1.5.0~dev~git20150128.112847.17e840a
	fi

	debSource="$(awk -F ': ' '$1 == "Source" { print $2; exit }' hack/make/.build-deb/control)"
	debMaintainer="$(awk -F ': ' '$1 == "Maintainer" { print $2; exit }' hack/make/.build-deb/control)"
	debDate="$(date --rfc-2822)"

	# if go-md2man is available, pre-generate the man pages
	make manpages

	builderDir="contrib/builder/deb/${PACKAGE_ARCH}"
	pkgs=( $(find "${builderDir}/"*/ -type d) )
	if [ ! -z "$DOCKER_BUILD_PKGS" ]; then
		pkgs=()
		for p in $DOCKER_BUILD_PKGS; do
			pkgs+=( "$builderDir/$p" )
		done
	fi
	for dir in "${pkgs[@]}"; do
		[ -d "$dir" ] || { echo >&2 "skipping nonexistent $dir"; continue; }
		version="$(basename "$dir")"
		suite="${version##*-}"

		image="dockercore/builder-deb:$version"
		if ! docker inspect "$image" &> /dev/null; then
			(
				# Add the APT_MIRROR args only if the consuming Dockerfile uses it
				# Otherwise this will cause the build to fail
				if [ "$(grep 'ARG APT_MIRROR=' $dir/Dockerfile)" ] && [ "$BUILD_APT_MIRROR" ]; then
					DOCKER_BUILD_ARGS="$DOCKER_BUILD_ARGS $BUILD_APT_MIRROR"
				fi
				set -x && docker build ${DOCKER_BUILD_ARGS} -t "$image" "$dir"
			)
		fi

		mkdir -p "$DEST/$version"
		cat > "$DEST/$version/Dockerfile.build" <<-EOF
			FROM $image
			WORKDIR /usr/src/docker
			COPY . /usr/src/docker
			ENV DOCKER_GITCOMMIT $GITCOMMIT
			RUN mkdir -p /go/src/github.com/docker && mkdir -p /go/src/github.com/opencontainers \
				&& ln -snf /usr/src/docker /go/src/github.com/docker/docker
		EOF

		cat >> "$DEST/$version/Dockerfile.build" <<-EOF
			# Install runc, containerd, proxy and tini
			RUN ./hack/dockerfile/install-binaries.sh runc-dynamic containerd-dynamic proxy-dynamic tini
		EOF
		cat >> "$DEST/$version/Dockerfile.build" <<-EOF
			RUN cp -aL hack/make/.build-deb debian
			RUN { echo '$debSource (${debVersion}-0~${version}) $suite; urgency=low'; echo; echo '  * Version: $VERSION'; echo; echo " -- $debMaintainer  $debDate"; } > debian/changelog && cat >&2 debian/changelog
			RUN dpkg-buildpackage -uc -us -I.git
		EOF
		tempImage="docker-temp/build-deb:$version"
		( set -x && docker build ${DOCKER_BUILD_ARGS} -t "$tempImage" -f "$DEST/$version/Dockerfile.build" . )
		docker run --rm "$tempImage" bash -c 'cd .. && tar -c *_*' | tar -xvC "$DEST/$version"
		docker rmi "$tempImage"
	done

	bundle .integration-daemon-stop
) 2>&1 | tee -a "$DEST/test.log"
