#!/usr/bin/env bash # Thu 22 Sep 2016 13:05:54 CEST # Build utilities # Determines the architecture we're using arch() { [[ "$(uname -s)" == "Darwin" ]] && echo "macosx" || echo "linux" } # Functions for coloring echo commands log_info() { echo -e "(`date +%T`) \033[1;34m${@}\033[0m" } log_warn() { echo -e "(`date +%T`) \033[1;35mWarning: ${@}\033[0m" } log_error() { echo -e "(`date +%T`) \033[1;31mError: ${@}\033[0m" } # Checks a given environment variable is set (non-zero size) check_env() { if [ -z "${!1}" ]; then log_error "Variable ${1} is undefined - aborting..."; exit 1 else log_info "\${${1}}=${!1}"; fi } # Checks a given environment variable is set (non-zero size) check_pass() { if [ -z "${!1}" ]; then log_error "Variable ${1} is undefined - aborting..."; exit 1 else log_info "\${${1}}=********"; fi } # Function for running command and echoing results run_cmd() { log_info "$ ${@}" ${@} local status=$? if [ ${status} != 0 ]; then log_error "Command Failed \"${@}\"" exit ${status} fi } # Function for running command and echoing results, with LD_LIBRARY_PATH set run_cmd_ld() { log_info "$ ${@}" LD_LIBRARY_PATH=${BOB_PREFIX_PATH}/lib ${@} local status=$? if [ ${status} != 0 ]; then log_error "Command Failed \"${@}\"" exit ${status} fi } # Runs setup.py setup() { run_cmd_ld ${PREFIX}/bin/python setup.py ${@} } # Prepares ~/.pypirc dot_pypirc() { local rc=${HOME}/.pypirc log_info "Creating ${rc}..." if [ -e ${rc} ]; then run_cmd rm -f ${rc} fi cat <<EOT >> ${rc} [distutils] index-servers = production staging [production] repository: ${PYPISERVER} username: ${PYPIUSER} password: ${PYPIPASS} [staging] repository: ${TESTSERVER} username: ${PYPIUSER} password: ${PYPIPASS} EOT run_cmd chmod 600 ${rc} } # Fixes the python prompt by setting LD_LIBRARY_PATH permanently fix_venv() { local py=${PREFIX}/bin/python case ${PYVER} in py3*) py=${py}3 ;; esac log_info "Hot-fixing virtualenv provided by ${py}..." mv ${py} ${py}.orig cat <<EOT >> ${py} #!/usr/bin/env bash LD_LIBRARY_PATH=${BOB_PREFIX_PATH}/lib exec ${py}.orig "\${@}" EOT run_cmd chmod 755 ${py} } # Uploads a file to our intranet location via curl doc_upload() { log_info "curl: ${1} -> ${DOCSERVER}/${2}..." curl --location --silent --show-error --user "${DOCUSER}:${DOCPASS}" --upload-file ${1} ${DOCSERVER}/${2} local status=$? if [ ${status} != 0 ]; then log_error "Curl command finished with an error condition (status=${status})" exit ${status} fi log_info "Successfully uploaded ${1} with curl" } check_env PYTHON_VERSION check_env CI_PROJECT_DIR check_env CI_PROJECT_PATH check_env CI_PROJECT_NAME check_env CI_BUILD_REF check_env CI_BUILD_REF_NAME check_pass PYPIUSER check_pass PYPIPASS check_pass DOCUSER check_pass DOCPASS # Sets up variables ARCH=`arch` if [ -z "${CONDA_FOLDER}" ]; then if [ "${ARCH}" == "linux" ]; then CONDA_FOLDER=/local/conda else CONDA_FOLDER=/opt/conda fi fi if [ -z "${CONDA_PREFIX}" ]; then CONDA_PREFIX=env fi if [ -z "${DOCSERVER}" ]; then DOCSERVER=https://www.idiap.ch fi PREFIX=${CI_PROJECT_DIR}/${CONDA_PREFIX} # Add "-coverage" support if [ "${ARCH}" == "linux" ]; then # Temporary hack to get building done right with gcc-5 compilers if [ -z "${CFLAGS}" ]; then CFLAGS="-D_GLIBCXX_USE_CXX11_ABI=0 -coverage" else CFLAGS="${CFLAGS} -D_GLIBCXX_USE_CXX11_ABI=0 -coverage" fi CXXFLAGS=${CFLAGS} else if [ -z "${CFLAGS}" ]; then CFLAGS="-coverage" else CFLAGS="${CFLAGS} -coverage" fi CXXFLAGS=${CFLAGS} fi PYVER=py$(echo ${PYTHON_VERSION} | tr -d '.') BOB_DOCUMENTATION_SERVER="${DOCSERVER}/software/bob/docs/latest/bob/%s/master/" BOB_PREFIX_PATH=${CONDA_FOLDER}/envs/bob-devel-${PYVER} if [ -z "${PYPISERVER}" ]; then PYPISERVER="https://pypi.python.org/pypi" fi TESTSERVER=https://testpypi.python.org/pypi check_env ARCH check_env PYVER check_env PREFIX check_env CFLAGS check_env CXXFLAGS check_env DOCSERVER check_env PYPISERVER check_env TESTSERVER check_env CONDA_FOLDER check_env CONDA_PREFIX check_env BOB_PREFIX_PATH check_env BOB_DOCUMENTATION_SERVER