#!/bin/bash
#
# Build a silver image
#

: ${WORKSPACE:=~/susetest/build}

main_options="--workspace $WORKSPACE"

function get_build_result_name {

	base_platform=
	features=

	while [ $# -gt 0 ]; do
		opt=$1; shift
		case $opt in
		--base-platform)
			base_platform=$1
			shift;;

		--feature)
			features+="-$1"; shift;;

		--debug)
			main_options+=" $opt";;

		--backend)
			# ignore for now
			shift;;

		*)	echo "Cannot handle argument $1" >&2
			exit 1;;
		esac
	done

	if [ -z "$base_platform" ]; then
		echo "Required option --base-platform is missing" >&2
		exit 1
	fi

	if [ -z "$features" ]; then
		features="-silver"
	fi

	declare -g output_platform
	output_platform="$base_platform$features"
}

function prepare_build_conf {

	base_platform=
	features=

	while [ $# -gt 0 ]; do
		opt=$1; shift
		case $opt in
		--base-platform)
			base_platform=$1
			shift;;

		--feature)
			if [ -z "$features" ]; then
				features="build \"$1\""
			else
				features+=", \"$1\""
			fi
			shift;;

		--backend)
			backend="backend $1;"
			shift;;

		*)	: ;;
		esac
	done

	if [ -n "$features" ]; then
		features+=";"
	fi

	file=$(mktemp /tmp/twopence-build-XXXXXX.conf)
	cat >$file <<EOF
testcase build;
$backend
node build {
	platform "$base_platform";
	$features
}
EOF

	declare -g build_config
	build_config=$file

	trap "rm -f $build_config" EXIT
}

function do_build {

	if ! twopence provision $main_options init --config $build_config; then
		return 1
	fi

	if ! twopence provision $main_options create; then
		return 1
	fi

	twopence provision $main_options package $output_platform
	return $?
}

get_build_result_name "$@"
prepare_build_conf "$@"


cat <<EOF
Output plaform:		$output_platform
Build commands:
   twopence provision $main_options init --config $build_config
   twopence provision $main_options create
   twopence provision $main_options package $output_platform
   twopence provision $main_options destroy --force --zap

Build config file:
EOF
cat $build_config

exitcode=0
if ! do_build; then
	exitcode=$?
fi

twopence provision $main_options destroy --force --zap

if [ $exitcode -ne 0 ]; then
	cat <<-EOF

	 *** BUILD FAILED ***

EOF
fi

exit $exitcode
