#!/bin/bash
[ -f /.dockerenv ] || { echo "please run in supplied container"; exit 1; }
set -e; source environment

build_dir="${BUILD_DIR?}"
buildroot_dir="${build_dir}/buildroot"
buildroot_repo="${BUILDROOT_REPO?}"
buildroot_ref=${BUILDROOT_REF?}
buildroot_external=${BR2_EXTERNAL?}
heads_dir="${build_dir}/heads"
heads_repo="${HEADS_REPO?}"
heads_ref=${HEADS_REF?}
heads_external=${HEADS_EXTERNAL?}
devices=${DEVICES?}
target=${TARGET?}

[[ -f ~/.gitconfig ]] || \
	printf "[color]\nui=auto\n[user]\nemail=build@local\nname=Build User" \
		> ~/.gitconfig

mkdir -p "$build_dir"

[ "$(ls -A "${buildroot_dir}")" ] \
	|| git clone "$buildroot_repo" "$buildroot_dir"
(
	cd $buildroot_dir;
	git checkout "$buildroot_ref";
	git reset --hard;
	git tag airgap || :
	current_ref="$(git rev-parse --verify HEAD)"
	[ "$current_ref" == "$buildroot_ref" ] || {
		echo "Error: $buildroot_ref was not successfully checked out"; exit 1;
	}
	if [ "$(ls -A "${buildroot_external}/patches")" ]; then
		for patch in "${buildroot_external}"/patches/*; do
			echo "Applying patch: ${patch}";
			patch -p1 --no-backup-if-mismatch < "${patch}";
		done;
	fi
	make "airgap_${target}_defconfig";
	make source;
)

[ "$(ls -A "${heads_dir}")" ] \
	|| git clone "$heads_repo" "$heads_dir"
(
	cd "$heads_dir";
	git checkout "$heads_ref";
	git reset --hard;
	git tag airgap || :
	current_ref="$(git rev-parse --verify HEAD)"
	[ "$current_ref" == "$heads_ref" ] || {
		echo "Error: $heads_ref was not successfully checked out"; exit 1;
	}
	if [ "$(ls -A "${heads_external}/patches")" ]; then
		for patch in "${heads_external}"/patches/*; do
			echo "Applying patch: ${patch}";
			patch -p1 --no-backup-if-mismatch < "${patch}";
		done;
	fi
	[ -d "${heads_external}/boards" ] && \
		rsync -Pav "${heads_external}/boards/" "${heads_dir}/boards/"
	[[ "$devices" =~ "librem" ]] \
		&& (cd "$heads_dir/blobs/librem_kbl" && ./get_blobs.sh)
)