#!/bin/bash function is_django_installed() { python -c "import django" &>/dev/null } function should_collectstatic() { is_django_installed && [[ -z "$DISABLE_COLLECTSTATIC" ]] } function virtualenv_bin() { if head "/etc/redhat-release" | grep -q "^Fedora"; then virtualenv-${PYTHON_VERSION} $1 else virtualenv $1 fi } # Install pipenv to the separate virtualenv to isolate it # from system Python packages and packages in the main # virtualenv. Executable is simlinked into ~/.local/bin # to be accessible. This approach is inspired by pipsi # (pip script installer). function install_pipenv() { echo "---> Installing pipenv packaging tool ..." VENV_DIR=$HOME/.local/venvs/pipenv virtualenv_bin "$VENV_DIR" $VENV_DIR/bin/pip --isolated install -U pipenv mkdir -p $HOME/.local/bin ln -s $VENV_DIR/bin/pipenv $HOME/.local/bin/pipenv } set -e shopt -s dotglob echo "---> Installing application source ..." mv /tmp/src/* ./ if [[ ! -z "$UPGRADE_PIP_TO_LATEST" ]]; then echo "---> Upgrading pip to latest version ..." pip install -U pip setuptools wheel fi if [[ ! -z "$ENABLE_PIPENV" ]]; then install_pipenv echo "---> Installing dependencies via pipenv ..." if [[ -f Pipfile ]]; then pipenv install --deploy elif [[ -f requirements.txt ]]; then pipenv install -r requirements.txt fi # pipenv check elif [[ -f requirements.txt ]]; then echo "---> Installing dependencies ..." pip install -r requirements.txt fi if [[ -f setup.py && -z "$DISABLE_SETUP_PY_PROCESSING" ]]; then echo "---> Installing application ..." pip install . fi if should_collectstatic; then ( echo "---> Collecting Django static files ..." APP_HOME=${APP_HOME:-.} # Look for 'manage.py' in the directory specified by APP_HOME, or the current directory manage_file=$APP_HOME/manage.py if [[ ! -f "$manage_file" ]]; then echo "WARNING: seems that you're using Django, but we could not find a 'manage.py' file." echo "'manage.py collectstatic' ignored." exit fi if ! python $manage_file collectstatic --dry-run --noinput &> /dev/null; then echo "WARNING: could not run 'manage.py collectstatic'. To debug, run:" echo " $ python $manage_file collectstatic --noinput" echo "Ignore this warning if you're not serving static files with Django." exit fi python $manage_file collectstatic --noinput ) fi # set permissions for any installed artifacts fix-permissions /opt/app-root