1*61046927SAndroid Build Coastguard Worker#!/usr/bin/env bash 2*61046927SAndroid Build Coastguard Workerset -eu 3*61046927SAndroid Build Coastguard Worker 4*61046927SAndroid Build Coastguard Workerreadonly requirements_file=$1 5*61046927SAndroid Build Coastguard Workershift 6*61046927SAndroid Build Coastguard Worker 7*61046927SAndroid Build Coastguard Workervenv_dir="$(dirname "$requirements_file")"/.venv 8*61046927SAndroid Build Coastguard Workerreadonly venv_dir 9*61046927SAndroid Build Coastguard Workerreadonly venv_req=$venv_dir/requirements.txt 10*61046927SAndroid Build Coastguard Workerreadonly venv_python_version=$venv_dir/python-version.txt 11*61046927SAndroid Build Coastguard Worker 12*61046927SAndroid Build Coastguard Workerif [ -d "$venv_dir" ] 13*61046927SAndroid Build Coastguard Workerthen 14*61046927SAndroid Build Coastguard Worker if [ ! -r "$venv_python_version" ] 15*61046927SAndroid Build Coastguard Worker then 16*61046927SAndroid Build Coastguard Worker echo "Python environment predates Python version checks." 17*61046927SAndroid Build Coastguard Worker echo "It might be invalid and needs to be regenerated." 18*61046927SAndroid Build Coastguard Worker rm -rf "$venv_dir" 19*61046927SAndroid Build Coastguard Worker elif ! cmp --quiet <(python --version) "$venv_python_version" 20*61046927SAndroid Build Coastguard Worker then 21*61046927SAndroid Build Coastguard Worker old=$(cat "$venv_python_version") 22*61046927SAndroid Build Coastguard Worker new=$(python --version) 23*61046927SAndroid Build Coastguard Worker echo "Python version has changed ($old -> $new)." 24*61046927SAndroid Build Coastguard Worker echo "Python environment needs to be regenerated." 25*61046927SAndroid Build Coastguard Worker unset old new 26*61046927SAndroid Build Coastguard Worker rm -rf "$venv_dir" 27*61046927SAndroid Build Coastguard Worker fi 28*61046927SAndroid Build Coastguard Workerfi 29*61046927SAndroid Build Coastguard Worker 30*61046927SAndroid Build Coastguard Workerif ! [ -r "$venv_dir/bin/activate" ] 31*61046927SAndroid Build Coastguard Workerthen 32*61046927SAndroid Build Coastguard Worker echo "Creating Python environment..." 33*61046927SAndroid Build Coastguard Worker python -m venv "$venv_dir" 34*61046927SAndroid Build Coastguard Worker python --version > "$venv_python_version" 35*61046927SAndroid Build Coastguard Workerfi 36*61046927SAndroid Build Coastguard Worker 37*61046927SAndroid Build Coastguard Worker# shellcheck disable=1091 38*61046927SAndroid Build Coastguard Workersource "$venv_dir/bin/activate" 39*61046927SAndroid Build Coastguard Worker 40*61046927SAndroid Build Coastguard Workerif ! cmp --quiet "$requirements_file" "$venv_req" 41*61046927SAndroid Build Coastguard Workerthen 42*61046927SAndroid Build Coastguard Worker echo "$(realpath --relative-to="$PWD" "$requirements_file") has changed, re-installing..." 43*61046927SAndroid Build Coastguard Worker pip --disable-pip-version-check install --requirement "$requirements_file" 44*61046927SAndroid Build Coastguard Worker cp "$requirements_file" "$venv_req" 45*61046927SAndroid Build Coastguard Workerfi 46*61046927SAndroid Build Coastguard Worker 47*61046927SAndroid Build Coastguard Workerpython "$@" 48