#!/bin/bash
#
#   Licensed under the Apache License, Version 2.0 (the "License");
#   you may not use this file except in compliance with the License.
#   You may obtain a copy of the License at
#
#       http://www.apache.org/licenses/LICENSE-2.0
#
#   Unless required by applicable law or agreed to in writing, software
#   distributed under the License is distributed on an "AS IS" BASIS,
#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#   See the License for the specific language governing permissions and
#   limitations under the License.
# 
# 

HERE=$(realpath $(dirname $0))
OSM_JENKINS=$(dirname $HERE)
. $OSM_JENKINS/common/all_funcs

# SET YOU MDG repository name here
export OSM_MDG=RO
OSM_load_config


# Here is an example for how to handle an incremental build
if [ -d $OSM_MDG ]; then
	INFO "reusing existing workspace"
	cd $OSM_MDG
	git pull
else
	INFO "cloning MDG $OSM_MDG from $OSM_GIT_URL/$OSM_MDG"
	git clone $OSM_GIT_URL/$OSM_MDG
	cd $OSM_MDG
fi
if [ $# -gt 0 ]; then
	git fetch origin +refs/for/master || FATAL "git fetch didn't work"
	git checkout $1 || FATAL "git checkout '$1' didn't work"
fi

INFO "starting build"

### for start_build
### put your commands here to
### build, test and produce coverage reports

rm *.pyc
python -m py_compile *.py
RC=$?

INFO "done, RC=$RC"
exit $RC


