msspec_python3/CI/CI.bash

143 lines
3.7 KiB
Bash

#!/bin/bash
SCRIPT_NAME=$(basename $0)
TOPLEVEL=$(git rev-parse --show-toplevel)
VERSION=$(git describe|sed 's/-\([[:digit:]]\+\)-.*/\.post\1/')
(return 0 2>/dev/null) && sourced=1 || sourced=0
pythonpath_prepend() {
if [ -d "$1" ]; then
PYTHONPATH=${PYTHONPATH//":$1:"/:} #delete all instances in the middle
PYTHONPATH=${PYTHONPATH/%":$1"/} #delete any instance at the end
PYTHONPATH=${PYTHONPATH/#"$1:"/} #delete any instance at the beginning
PYTHONPATH="$1${PYTHONPATH:+":$PYTHONPATH"}" #prepend $1 or if $PATH is empty set to $1
export PYTHONPATH
fi
}
# Setup or upgrade the Python virtual environment
setup_virtualenv(){
VENV_PATH="$1"
virtualenv --python=python3 --system-site-packages "$VENV_PATH"
source "$VENV_PATH/bin/activate"
pip install --upgrade pip
pip install --upgrade numpy ase h5py lxml pint terminaltables pycairo
pip install --upgrade sphinx
status=$?
deactivate
[ $status -eq 0 ] || exit 1
}
activate_msspec_python3_virtualenv() {
VENV_PATH="$1"
# do not activate virtualenv if already activated
if [ x"${VIRTUAL_ENV}" == x ]; then
# We are not in a virtualenv
if [ x"${VENV_PATH}" != x ]; then
# activate the specified venv
export MSSPEC_ROOT="${TOPLEVEL}"
pythonpath_prepend "$MSSPEC_ROOT/src"
#PYTHONPATH="$PYTHONPATH":"$MSSPEC_ROOT"/src
source "$VENV_PATH/bin/activate"
else
# error
echo "Error: No venv specified!!"
fi
else
# We are in a virtualenv so load only variables
export MSSPEC_ROOT="${TOPLEVEL}"
pythonpath_prepend "$MSSPEC_ROOT/src"
fi
}
make_pybinding() {
echo "Creating Python library for Fortran code, please wait... "
activate_msspec_python3_virtualenv "$1"
cd ${TOPLEVEL}/src/
make pybinding || exit 1
}
make_selfex() {
echo "Creating the self-extractible setup program... "
cd ${TOPLEVEL}
make selfex || exit 1
mv pymsspec-${VERSION}.setup package/
}
make_pdf() {
DEST=${TOPLEVEL}/package
mkdir -p ${DEST}
# first activate the virtual environment
activate_msspec_python3_virtualenv "$1"
# then build the documentation.
cd "${TOPLEVEL}/doc"
make --no-print-directory latexpdf || exit 1
# remove previous pdf
rm -rf "${DEST}"/*.pdf
# copy the produced pdf file to the final location
cp "build/latex/MsSpec-python.pdf" "${TOPLEVEL}/package/MsSpec-${VERSION}.pdf"
}
make_html () {
make_pdf "$1"
# first activate the virtual environment
activate_msspec_python3_virtualenv "$1"
# then build the documentation.
cd "${TOPLEVEL}/doc"
make --no-print-directory html || exit 1
}
make_tests() {
echo "generate results for unit tests..."
activate_msspec_python3_virtualenv "$1"
make_pybinding
python -c "from msspec.tests import create_tests_results; create_tests_results()" || exit 1
}
create_package() {
echo "Creating the package..."
#make_tests "$1"
make_selfex "$1"
cleanup
}
cleanup() {
echo "cleaning up..."
# remove results.txt file
rm -rf ${TOPLEVEL}/src/msspec/results.txt
}
show_help () {
echo "Usage: $SCRIPT_NAME [OPTIONS]"
echo "List of possible options:"
echo " -i Initialize a Python virtual environnment in FOLDER"
echo " -d Build the html documentation within the Python "
echo " virtual environnment in FOLDER"
}
if [ "$sourced" == 0 ]; then
while getopts "hi:d:t:p:" option; do
case $option in
i) setup_virtualenv "$OPTARG"
;;
d) make_html "$OPTARG"
;;
t) make_tests "$OPTARG"
;;
p) create_package "$OPTARG"
;;
h) show_help
;;
*) show_help
;;
esac
done
fi