#!/usr/bin/env bash # bin/compile set -e set -o pipefail BIN_DIR=$(cd $(dirname $0); pwd) # absolute path BUILD_DIR=$1 CACHE_DIR=$2 NAME=$($BIN_DIR/detect $BUILD_DIR) PIP_DOWNLOAD_CACHE=${PIP_DOWNLOAD_CACHE:-$CACHE_DIR/pip_downloads} VIRTUALENV_DIRS="bin include lib" function sed() { # prefer GNU sed over BSD sed on OS X $(which gsed || which sed) "$@" } cd $BUILD_DIR # COMPILE HOOK: export build environment if specified (make environment 2> /dev/null) && eval $(make environment) # copy artifacts out of cache if exists mkdir -p $CACHE_DIR for dir in $VIRTUALENV_DIRS; do cp -R $CACHE_DIR/$dir . &> /dev/null || true done echo "-----> Preparing virtualenv version $(virtualenv --version)" virtualenv --no-site-packages . | sed -u 's/^/ /' echo "-----> Byte-compiling code" find . -name "*.py" | xargs bin/python -m py_compile # if Django, inject psycopg and append settings if [ "$NAME" = "Python/Django" ]; then echo "-----> Django settings injection" SETTINGS_FILE=$(ls **/settings.py | head -1) echo " Injecting code into $SETTINGS_FILE to read from DATABASE_URL" $BIN_DIR/../opt/inject_dbs $SETTINGS_FILE _settings.py mv _settings.py $SETTINGS_FILE fi echo "-----> Installing dependencies using pip version $(pip --version | awk '{print $2}')" PIP_DOWNLOAD_CACHE=$PIP_DOWNLOAD_CACHE bin/pip install -r requirements.txt ${PIP_OPTS} | sed -u 's/^/ /' # store new artifacts in cache for dir in $VIRTUALENV_DIRS; do rm -rf $CACHE_DIR/$dir cp -R $dir $CACHE_DIR/ done