#!/bin/sh -xe
# jenkins build helper script for pysim.  This is how we build on jenkins.osmocom.org
#
# environment variables:
# * WITH_MANUALS: build manual PDFs if set to "1"
# * PUBLISH: upload manuals after building if set to "1" (ignored without WITH_MANUALS = "1")
# * JOB_TYPE: one of 'test', 'distcheck', 'pylint', 'docs'
# * SKIP_CLEAN_WORKSPACE: don't run osmo-clean-workspace.sh (for pyosmocom CI)
#

export PYTHONUNBUFFERED=1

setup_venv() {
	virtualenv -p python3 venv --system-site-packages
	. venv/bin/activate
}

if [ ! -d "./tests/" ] ; then
	echo "###############################################"
	echo "Please call from pySim-prog top directory"
	echo "###############################################"
	exit 1
fi

if [ -z "$SKIP_CLEAN_WORKSPACE" ]; then
	osmo-clean-workspace.sh
fi

case "$JOB_TYPE" in
"test")
	setup_venv

	pip install -r requirements.txt
	pip install pyshark

	# Execute automatically discovered unit tests first
	python -m unittest discover -v -s tests/unittests

	# Run pySim-trace test
	tests/pySim-trace_test/pySim-trace_test.sh
	;;
"card-test") # tests requiring physical cards
	setup_venv

	pip install -r requirements.txt

	# Run pySim-prog integration tests
	cd tests/pySim-prog_test/
	./pySim-prog_test.sh
	cd ../../

	# Run pySim-shell integration tests
	python3 -m unittest discover -v -s ./tests/pySim-shell_test/

	# Run pySim-smpp2sim test
	tests/pySim-smpp2sim_test/pySim-smpp2sim_test.sh
	;;
"distcheck")
	setup_venv

	pip install .
	pip install pyshark

	for prog in venv/bin/pySim-*.py; do
		$prog --help > /dev/null
	done
	;;
"pylint")
	# Print pylint version
	pip3 freeze | grep pylint

	setup_venv

	pip install .

	# Run pylint to find potential errors
	# Ignore E1102: not-callable
	#   pySim/filesystem.py: E1102: method is not callable (not-callable)
	# Ignore E0401: import-error
	#   pySim/utils.py:276: E0401: Unable to import 'Crypto.Cipher' (import-error)
	#   pySim/utils.py:277: E0401: Unable to import 'Crypto.Util.strxor' (import-error)
	python3 -m pylint -j0 --errors-only \
		--disable E1102 \
		--disable E0401 \
		--enable W0301 \
		pySim tests/unittests/*.py *.py \
		contrib/*.py
	;;
"docs")
	setup_venv

	pip install -r requirements.txt

	rm -rf docs/_build
	make -C "docs" html latexpdf

	if [ "$WITH_MANUALS" = "1" ] && [ "$PUBLISH" = "1" ]; then
		make -C "docs" publish publish-html
	fi
	;;
*)
	set +x
	echo "ERROR: JOB_TYPE has unexpected value '$JOB_TYPE'."
	exit 1
esac

osmo-clean-workspace.sh
