mirror of
https://github.com/home-assistant/supervisor.git
synced 2026-08-17 10:23:22 +01:00
The editable install of the Supervisor package resolves its build backend (setuptools, pinned via build-system.requires in pyproject.toml) in an isolated build environment. Unlike the runtime requirements install, this step was not given the locally built wheels, so it resolved build dependencies solely from the configured package indexes. When a pinned build dependency is newer than what the Home Assistant musllinux wheels index currently carries (e.g. a Dependabot setuptools bump), uv's default first-index strategy never falls through to PyPI and the editable install fails with "No solution found". Pass the locally built wheels via --find-links, mirroring the runtime requirements step, so the isolated build environment can satisfy build dependencies from them. Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
87 lines
2.7 KiB
Docker
87 lines
2.7 KiB
Docker
ARG BUILD_FROM=ghcr.io/home-assistant/base-python:3.14-alpine3.22-2026.05.0
|
|
FROM ${BUILD_FROM} AS supervisor-base
|
|
|
|
ENV \
|
|
S6_SERVICES_GRACETIME=415000 \
|
|
S6_KILL_GRACETIME=3000 \
|
|
SUPERVISOR_API=http://localhost \
|
|
CRYPTOGRAPHY_OPENSSL_NO_LEGACY=1 \
|
|
UV_SYSTEM_PYTHON=true
|
|
|
|
# Install OS packages used both by build and final image
|
|
RUN \
|
|
set -x \
|
|
&& apk add --no-cache \
|
|
findutils \
|
|
eudev \
|
|
eudev-libs \
|
|
git \
|
|
libffi \
|
|
libpulse \
|
|
musl \
|
|
openssl \
|
|
yaml \
|
|
\
|
|
&& pip3 install uv==0.10.9
|
|
|
|
#############################################
|
|
# Install requirements and build Supervisor #
|
|
#############################################
|
|
|
|
FROM supervisor-base AS supervisor-build
|
|
|
|
WORKDIR /usr/src
|
|
|
|
# Install requirements
|
|
RUN \
|
|
--mount=type=bind,source=./requirements.txt,target=/usr/src/requirements.txt \
|
|
--mount=type=bind,source=./wheels,target=/usr/src/wheels \
|
|
if ls /usr/src/wheels/musllinux/* >/dev/null 2>&1; then \
|
|
LOCAL_WHEELS=/usr/src/wheels/musllinux; \
|
|
echo "Using local wheels from: $LOCAL_WHEELS"; \
|
|
else \
|
|
LOCAL_WHEELS=; \
|
|
echo "No local wheels found"; \
|
|
fi && \
|
|
uv pip install --compile-bytecode --no-cache --no-build \
|
|
-r requirements.txt \
|
|
${LOCAL_WHEELS:+--find-links $LOCAL_WHEELS}
|
|
|
|
# Install Home Assistant Supervisor
|
|
ARG BUILD_VERSION="9999.09.9.dev9999"
|
|
COPY . supervisor
|
|
RUN \
|
|
--mount=type=bind,source=./wheels,target=/usr/src/wheels \
|
|
if ls /usr/src/wheels/musllinux/* >/dev/null 2>&1; then \
|
|
LOCAL_WHEELS=/usr/src/wheels/musllinux; \
|
|
echo "Using local wheels from: $LOCAL_WHEELS"; \
|
|
else \
|
|
LOCAL_WHEELS=; \
|
|
echo "No local wheels found"; \
|
|
fi \
|
|
&& sed -i "s/^SUPERVISOR_VERSION =.*/SUPERVISOR_VERSION = \"${BUILD_VERSION}\"/g" /usr/src/supervisor/supervisor/const.py \
|
|
&& uv pip install --no-cache -e ./supervisor \
|
|
${LOCAL_WHEELS:+--find-links $LOCAL_WHEELS} \
|
|
&& python3 -m compileall ./supervisor/supervisor
|
|
|
|
# Copy the rest of rootfs files
|
|
COPY rootfs /
|
|
|
|
#########################
|
|
# Final flattened image #
|
|
#########################
|
|
|
|
FROM supervisor-base
|
|
|
|
# Copy everything from the build stage as a single layer
|
|
COPY --from=supervisor-build / /
|
|
|
|
LABEL \
|
|
io.hass.type="supervisor" \
|
|
org.opencontainers.image.title="Home Assistant Supervisor" \
|
|
org.opencontainers.image.description="Container-based system for managing Home Assistant Core installation" \
|
|
org.opencontainers.image.authors="The Home Assistant Authors" \
|
|
org.opencontainers.image.url="https://www.home-assistant.io/" \
|
|
org.opencontainers.image.documentation="https://www.home-assistant.io/docs/" \
|
|
org.opencontainers.image.licenses="Apache License 2.0"
|