/
host-env.sh
executable file
·110 lines (101 loc) · 2.69 KB
/
host-env.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
#!/bin/bash
show_help() {
echo "Usage:"
echo "$(basename $0) host-notebook --port 8888 --listen 127.0.0.1"
echo "$(basename $0) run-tests"
}
set -euxo pipefail
HOST_NOTEBOOK=0
RUN_TESTS=0
PORT=8000
while [ $# -gt 0 ]; do
case "$1" in
host-notebook)
HOST_NOTEBOOK=1
shift
;;
--port)
shift
PORT=$1
shift
;;
--listen)
shift
LISTEN=$1
shift
;;
run-tests)
RUN_TESTS=1
shift
;;
--help|-h)
show_help
exit 0
;;
--)
break;
;;
*)
show_help
exit 1
;;
esac
done
if ! which podrun >/dev/null; then
SOME_TEMP_DIR=$(mktemp -d)
trap 'rm -rf -- "$SOME_TEMP_DIR"' EXIT
( cd "$SOME_TEMP_DIR"; curl -LOs https://raw.githubusercontent.com/bjodah/dotfiles/master/per-leaf-dir/bin/podrun; chmod +x podrun )
export PATH="$SOME_TEMP_DIR:$PATH"
fi
SCRIPTS_DIR=$(dirname $(realpath "$BASH_SOURCE"))
REPO_DIR=$(realpath "$SCRIPTS_DIR/..")
ENV_DIR="$REPO_DIR/.env"
PKG_NAME=${PKG_NAME:-$(basename $REPO_DIR)}
mkdir -p $ENV_DIR
cat <<EOF>$ENV_DIR/setup.sh
if [ ! -d .env/ ]; then
>&2 echo "No .env directory?"
exit 1
fi
if [ ! -d .env/venv ]; then
python3 -m venv .env/venv
fi
source .env/venv/bin/activate
if ! python -c "import pycvodes" 2>&1 >/dev/null; then
python -m pip install --upgrade-strategy=eager --upgrade pip && \
python -m pip install --upgrade-strategy=eager numpy 'cython>=3.0.10' setuptools && \
env \
PYCVODES_NO_LAPACK=1 \
PYCVODES_NO_KLU=1 \
LDFLAGS='-Wl,--disable-new-dtags -Wl,-rpath,/usr/local/lib -L/usr/local/lib' \
python -m pip install --cache-dir .env/pypi-cache -e .[all]
fi
if ! python -c "import pyodesys" 2>&1 >/dev/null; then
python -m pip install --cache-dir .env/pypi-cache -e .[all]
#jupyter-nbextension enable --user --py widgetsnbextension
fi
export MPLBACKEND=Agg
EOF
cat <<EOF>$ENV_DIR/run-tests.sh
#!/bin/bash
set -e
source .env/setup.sh
pytest -sv -ra --pyargs $PKG_NAME
EOF
cat <<EOF>$ENV_DIR/host-notebook.sh
#!/bin/bash
set -e
source .env/setup.sh
jupyter notebook --no-browser --port $PORT --ip=* index.ipynb
EOF
if [ $RUN_TESTS = 1 ]; then
podrun --cont-img-dir $SCRIPTS_DIR/environment \
--name "${PKG_NAME}_run_tests" \
-- bash $ENV_DIR/run-tests.sh
fi
if [ $HOST_NOTEBOOK = 1 ]; then
podrun --cont-img-dir $SCRIPTS_DIR/environment \
--name "${PKG_NAME}_host_notebook_${PORT}" \
-p $LISTEN:$PORT:$PORT \
-- bash $ENV_DIR/host-notebook.sh
fi