Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update Dockerfile, need to make all tests pass #233

Merged
merged 3 commits into from Apr 24, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
5 changes: 1 addition & 4 deletions .gitignore
Expand Up @@ -26,10 +26,7 @@ build/
*.bak0
*.bak1
sundials-*.tar.gz
.local/
.ipython/
.jupyter/*
!.jupyter/jupyter_notebook_config.py
.env/
tmp/
.coverage
htmlcov/
4 changes: 2 additions & 2 deletions README.rst
Expand Up @@ -107,13 +107,13 @@ Using Docker
If you have `Docker <https://www.docker.com>`_ installed, you may use it to host a jupyter
notebook server::

$ ./scripts/host-jupyter-using-docker.sh . 8888
$ ./scripts/host-env.sh host-notebook --port 8888

the first time you run the command, some dependencies will be downloaded. When the installation
is complete there will be a link visible which you can open in your browser. You can also run
the test suite using the same docker-image::

$ ./scripts/host-jupyter-using-docker.sh . 0
$ ./scripts/host-env.sh run-tests

there will be a few skipped test (due to some dependencies not being installed by default) and
quite a few warnings.
Expand Down
2 changes: 1 addition & 1 deletion chempy/util/tests/test_graph.py
Expand Up @@ -11,7 +11,7 @@
from ..testing import requires, skipif

try:
dot_missing = subprocess.call(["dot", "-?"]) != 0
dot_missing = subprocess.run(["dot", "-?"]).returncode != 0
except OSError:
dot_missing = True

Expand Down
@@ -1,19 +1,20 @@
FROM docker.io/debian:bullseye
FROM docker.io/debian:bookworm

MAINTAINER Björn Dahlgren <bjodah@gmail.com>

ENV LANG C.UTF-8

RUN apt-get update && \
apt-get --quiet --assume-yes install curl git g++-10 gfortran-10 libgmp-dev binutils-dev bzip2 make cmake sudo \
python3-dev python3-pip libboost-dev libgsl-dev liblapack-dev libsuitesparse-dev graphviz && \
apt-get --quiet --assume-yes install --no-install-recommends \
curl git g++ gfortran libgmp-dev binutils-dev bzip2 make cmake sudo \
python3-dev python3-venv python3-pip libboost-dev libgsl-dev liblapack-dev libsuitesparse-dev graphviz && \
apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

RUN mkdir /tmp/sundials-5.5.0-build && \
curl -Ls https://github.com/LLNL/sundials/releases/download/v5.5.0/sundials-5.5.0.tar.gz | tar xz -C /tmp && \
FC=gfortran-10 cmake \
-S /tmp/sundials-5.5.0 \
-B /tmp/sundials-5.5.0-build \
RUN mkdir /tmp/sundials-5.8.0-build && \
curl -Ls https://github.com/LLNL/sundials/releases/download/v5.8.0/sundials-5.8.0.tar.gz | tar xz -C /tmp && \
FC=gfortran cmake \
-S /tmp/sundials-5.8.0 \
-B /tmp/sundials-5.8.0-build \
-DCMAKE_INSTALL_PREFIX=/usr/local \
-DCMAKE_BUILD_TYPE=Release \
-DBUILD_SHARED_LIBS=ON \
Expand All @@ -25,15 +26,11 @@ RUN mkdir /tmp/sundials-5.5.0-build && \
-DENABLE_KLU=ON \
-DKLU_INCLUDE_DIR=/usr/include/suitesparse \
-DKLU_LIBRARY_DIR=/usr/lib/x86_64-linux-gnu && \
cmake --build /tmp/sundials-5.5.0-build && \
cmake --build /tmp/sundials-5.5.0-build --target install && \
rm -r /tmp/sundials-5.5.0*/ && \
python3 -m pip install --upgrade-strategy=eager --upgrade pip && \
python3 -m pip install --upgrade-strategy=eager numpy cython setuptools && \
cmake --build /tmp/sundials-5.8.0-build && \
cmake --build /tmp/sundials-5.8.0-build --target install && \
rm -r /tmp/sundials-5.8.0*/ && \
rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*


# http://computation.llnl.gov/projects/sundials/download/sundials-5.5.0.tar.gz

# At this point the system should be able to pip-install the package and all of its dependencies. We'll do so
# when running the image using the ``host-jupyter-using-docker.sh`` script. Installed packages are cached.
110 changes: 110 additions & 0 deletions scripts/host-env.sh
@@ -0,0 +1,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
69 changes: 0 additions & 69 deletions scripts/host-jupyter-using-docker.sh

This file was deleted.

4 changes: 2 additions & 2 deletions setup.py
Expand Up @@ -100,7 +100,7 @@ def _path_under_setup(*args):
_author, _author_email = open(_path_under_setup("AUTHORS"), "rt").readline().split("<")

extras_req = {
"integrators": ["pyodeint>=0.10.4", "pycvodes>=0.14.0", "pygslodeiv2>=0.9.4"],
"integrators": ["pyodeint>=0.10.4", "pycvodes>=0.14.5", "pygslodeiv2>=0.9.4"],
"solvers": ["pykinsol>=0.1.6"],
"native": ["pycompilation>=0.4.12", "pycodeexport>=0.1.3", "appdirs"],
"docs": ["Sphinx", "sphinx_rtd_theme", "numpydoc"],
Expand Down Expand Up @@ -128,7 +128,7 @@ def _path_under_setup(*args):
"sympy>=1.1.1,!=1.2",
"quantities>=0.12.1",
"pyneqsys>=0.5.5",
"pyodesys>=0.14.1" if sys.version_info[0] >= 3 else "pyodesys<0.12",
"pyodesys>=0.14.4" if sys.version_info[0] >= 3 else "pyodesys<0.12",
"pyparsing>=2.0.3",
"sym>=0.3.4",
"pulp>=1.6.8",
Expand Down