mirror of
https://github.com/Akkudoktor-EOS/EOS.git
synced 2026-08-30 04:06:37 +00:00
Consolidates the currently applicable dependency updates into one PR, including the closed Dependabot backlog such as #1241, plus dependency surfaces that were not covered by the repository's previous pip-only Dependabot configuration. Cleanup of test warnings. Most importent: * GitPython + pypdf security hardening. * Uvicorn WebSocket close/backpressure/header fixes for server/dashboard reliability. * FastAPI dependency-memory/OpenAPI improvements for the API process. * Bokeh WebSocket/resource-leak/prefix fixes for EOSdash and proxied deployments. * cachebox cancellation/lock cleanup fixes for long-running/concurrent work. * pandas 3.0.5 avoiding the yanked 3.0.4 datetime/segfault build. * Ruff security-lint and pydocstyle correctness fixes, plus faster release builds via PGO. * platformdirs malformed-XDG and duplicate-directory fixes for deployment portability. * CI action modernization, regenerated uv.lock, and expanded Dependabot coverage. Runtime dependencies cachebox: 6.1.2 → 6.2.2 fastapi: 0.139.2 → 0.141.1 python-fasthtml: 0.14.9 → 0.14.11 MonsterUI: 1.0.46 → 1.0.47 bokeh: 3.9.1 → 3.9.2 uvicorn: 0.51.0 → 0.52.4 (build(deps): bump uvicorn from 0.51.0 to 0.52.3 #1241, refreshed to latest patch) pandas: 3.0.3 → 3.0.5 platformdirs: 4.11.0 → 4.11.3 Development/test dependencies pandas-stubs: 3.0.3.260530 → 3.0.5.260730 types-PyYAML: 6.0.12.20260518 → 6.0.12.20260724 GitPython: 3.1.53 → 3.1.58 (security/fix releases) coverage: 7.15.2 → 7.15.4 pypdf: 6.14.2 → 6.16.1 (includes security fixes) Pre-commit/tooling ruff-pre-commit: v0.15.21 → v0.16.3 synchronize pandas-stubs, types-docutils, and types-PyYAML pins with pyproject.toml CI / repository dependencies Python 3.13.9 → 3.13.15 in CI, Docker, .env, and local Docker Make targets actions/checkout → v7 in pytest, pre-commit, CodeQL, and release workflows actions/setup-python → v7 in pytest, pre-commit, and release workflows actions/upload-artifact → v7 in pytest workflow actions/stale: v9.1.0 → v11.0.0 (SHA-pinned) regenerate uv.lock from the final dependency pins so locked/frozen installs match pyproject.toml Future update coverage Expand Dependabot from pip-only to also monitor: GitHub Actions Docker The existing open docutils 0.23 update (#1085) is intentionally excluded because it has separate compatibility/ignore handling and should remain isolated. docker-build.yml was audited and is already using the newer action generations, so no changes were needed there. --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
98 lines
3.0 KiB
Docker
98 lines
3.0 KiB
Docker
# syntax=docker/dockerfile:1.7
|
|
# Dockerfile
|
|
|
|
# Support both Home Assistant builds and standalone builds
|
|
# Only Debian based images are supported (no Alpine)
|
|
ARG BUILD_FROM
|
|
ARG PYTHON_VERSION=3.13.15
|
|
|
|
# If BUILD_FROM is set (Home Assistant), use it; otherwise use python-slim
|
|
FROM ${BUILD_FROM:-python:${PYTHON_VERSION}-slim}
|
|
|
|
LABEL \
|
|
io.hass.version="VERSION" \
|
|
io.hass.type="addon" \
|
|
io.hass.arch="aarch64|amd64" \
|
|
source="https://github.com/Akkudoktor-EOS/EOS"
|
|
|
|
ENV EOS_DIR="/opt/eos"
|
|
# Create persistent data directory similar to home assistant add-on
|
|
# - EOS_DATA_DIR: Persistent data directory
|
|
# - MPLCONFIGDIR: user customizations to Mathplotlib
|
|
ENV EOS_DATA_DIR="/data"
|
|
ENV EOS_CACHE_DIR="${EOS_DATA_DIR}/cache"
|
|
ENV EOS_OUTPUT_DIR="${EOS_DATA_DIR}/output"
|
|
ENV EOS_CONFIG_DIR="${EOS_DATA_DIR}/config"
|
|
ENV MPLCONFIGDIR="${EOS_DATA_DIR}/mplconfigdir"
|
|
|
|
# Overwrite when starting the container in a production environment
|
|
ENV EOS_SERVER__EOSDASH_SESSKEY=s3cr3t
|
|
|
|
# Set environment variables to reduce threading needs
|
|
ENV OPENBLAS_NUM_THREADS=1
|
|
ENV OMP_NUM_THREADS=1
|
|
ENV MKL_NUM_THREADS=1
|
|
ENV PIP_PROGRESS_BAR=off
|
|
ENV PIP_NO_COLOR=1
|
|
|
|
# Generic environment
|
|
ENV LANG=C.UTF-8
|
|
ENV VENV_PATH=/opt/venv
|
|
# - Use .venv for python commands
|
|
ENV PATH="$VENV_PATH/bin:$PATH"
|
|
|
|
WORKDIR ${EOS_DIR}
|
|
|
|
# Create eos user and data directories with eos user permissions
|
|
RUN apt-get update && apt-get install -y --no-install-recommends adduser \
|
|
&& adduser --system --group --no-create-home eos \
|
|
&& mkdir -p "${EOS_DATA_DIR}" \
|
|
&& chown -R eos:eos "${EOS_DATA_DIR}" \
|
|
&& mkdir -p "${EOS_CACHE_DIR}" "${EOS_OUTPUT_DIR}" "${EOS_CONFIG_DIR}" "${MPLCONFIGDIR}" \
|
|
&& chown -R eos:eos "${EOS_CACHE_DIR}" "${EOS_OUTPUT_DIR}" "${EOS_CONFIG_DIR}" "${MPLCONFIGDIR}"
|
|
|
|
# Install build dependencies (Debian)
|
|
# - System deps
|
|
RUN apt-get update && apt-get install -y --no-install-recommends \
|
|
python3-venv \
|
|
gcc g++ gfortran \
|
|
libopenblas-dev liblapack-dev \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
# - Copy project metadata first (better Docker layer caching)
|
|
COPY pyproject.toml .
|
|
|
|
# - Create venv
|
|
RUN python3 -m venv ${VENV_PATH}
|
|
|
|
# - Upgrade pip inside venv
|
|
RUN pip install --upgrade pip setuptools wheel
|
|
|
|
# Install EOS/ EOSdash
|
|
# - Copy source
|
|
COPY src/ ./src
|
|
|
|
# - Create version information
|
|
COPY scripts/get_version.py ./scripts/get_version.py
|
|
RUN python scripts/get_version.py > ./version.txt
|
|
RUN rm ./scripts/get_version.py
|
|
|
|
RUN echo "Building Akkudoktor-EOS with Python $PYTHON_VERSION"
|
|
|
|
# - Install akkudoktoreos package in editable form (-e)
|
|
# - pyproject-toml will read the version from version.txt
|
|
RUN pip install --no-cache-dir -e .
|
|
|
|
ENTRYPOINT []
|
|
|
|
EXPOSE 8504
|
|
EXPOSE 8503
|
|
|
|
# Ensure EOS and EOSdash bind to 0.0.0.0
|
|
# EOS is started with root provileges. EOS will drop root proviledges and switch to user eos.
|
|
CMD ["python", "-m", "akkudoktoreos.server.eos", "--host", "0.0.0.0", "--run_as_user", "eos"]
|
|
|
|
# Persistent data
|
|
# (Not recognized by home assistant add-on management, but there we have /data anyway)
|
|
VOLUME ["${EOS_DATA_DIR}"]
|