From 3d30f1f733bdf8a37615ac18df99c68afe024df1 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Thu, 9 Nov 2023 02:04:39 -0600 Subject: [PATCH] Update Dockerfile to use piwheels for armv7 (#5709) --- docker/Dockerfile | 41 +++++++++++++++++++++++++++++++---------- docker/build.py | 18 ++++-------------- 2 files changed, 35 insertions(+), 24 deletions(-) diff --git a/docker/Dockerfile b/docker/Dockerfile index 262827dea4..7ca633a982 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -5,6 +5,7 @@ # One of "docker", "hassio" ARG BASEIMGTYPE=docker + # https://github.com/hassio-addons/addon-debian-base/releases FROM ghcr.io/hassio-addons/debian-base:7.2.0 AS base-hassio # https://hub.docker.com/_/debian?tab=tags&page=1&name=bookworm @@ -12,9 +13,10 @@ FROM debian:12.2-slim AS base-docker FROM base-${BASEIMGTYPE} AS base + ARG TARGETARCH ARG TARGETVARIANT -ARG PIP_EXTRA_INDEX_URL + # Note that --break-system-packages is used below because # https://peps.python.org/pep-0668/ added a safety check that prevents @@ -59,8 +61,7 @@ ENV \ # Fix click python3 lang warning https://click.palletsprojects.com/en/7.x/python3/ LANG=C.UTF-8 LC_ALL=C.UTF-8 \ # Store globally installed pio libs in /piolibs - PLATFORMIO_GLOBALLIB_DIR=/piolibs \ - PIP_EXTRA_INDEX_URL=${PIP_EXTRA_INDEX_URL} + PLATFORMIO_GLOBALLIB_DIR=/piolibs # Support legacy binaries on Debian multiarch system. There is no "correct" way # to do this, other than using properly built toolchains... @@ -72,8 +73,12 @@ RUN \ RUN \ # Ubuntu python3-pip is missing wheel - pip3 install --break-system-packages --no-cache-dir \ - platformio==6.1.11 \ + if [ "$TARGETARCH$TARGETVARIANT" = "armv7" ]; then \ + export PIP_EXTRA_INDEX_URL="https://www.piwheels.org/simple"; \ + fi; \ + pip3 install \ + --break-system-packages --no-cache-dir \ + platformio==6.1.11 \ # Change some platformio settings && platformio settings set enable_telemetry No \ && platformio settings set check_platformio_interval 1000000 \ @@ -84,8 +89,12 @@ RUN \ # tmpfs is for https://github.com/rust-lang/cargo/issues/8719 COPY requirements.txt requirements_optional.txt script/platformio_install_deps.py platformio.ini / -RUN --mount=type=tmpfs,target=/root/.cargo CARGO_REGISTRIES_CRATES_IO_PROTOCOL=sparse CARGO_HOME=/root/.cargo \ - pip3 install --break-system-packages --no-cache-dir -r /requirements.txt -r /requirements_optional.txt \ +RUN --mount=type=tmpfs,target=/root/.cargo if [ "$TARGETARCH$TARGETVARIANT" = "armv7" ]; then \ + export PIP_EXTRA_INDEX_URL="https://www.piwheels.org/simple"; \ + fi; \ + CARGO_REGISTRIES_CRATES_IO_PROTOCOL=sparse CARGO_HOME=/root/.cargo \ + pip3 install \ + --break-system-packages --no-cache-dir -r /requirements.txt -r /requirements_optional.txt \ && /platformio_install_deps.py /platformio.ini --libraries @@ -94,7 +103,11 @@ FROM base AS docker # Copy esphome and install COPY . /esphome -RUN pip3 install --break-system-packages --no-cache-dir --no-use-pep517 -e /esphome +RUN if [ "$TARGETARCH$TARGETVARIANT" = "armv7" ]; then \ + export PIP_EXTRA_INDEX_URL="https://www.piwheels.org/simple"; \ + fi; \ + pip3 install \ + --break-system-packages --no-cache-dir --no-use-pep517 -e /esphome # Settings for dashboard ENV USERNAME="" PASSWORD="" @@ -140,7 +153,11 @@ COPY docker/ha-addon-rootfs/ / # Copy esphome and install COPY . /esphome -RUN pip3 install --break-system-packages --no-cache-dir --no-use-pep517 -e /esphome +RUN if [ "$TARGETARCH$TARGETVARIANT" = "armv7" ]; then \ + export PIP_EXTRA_INDEX_URL="https://www.piwheels.org/simple"; \ + fi; \ + pip3 install \ + --break-system-packages --no-cache-dir --no-use-pep517 -e /esphome # Labels LABEL \ @@ -176,7 +193,11 @@ RUN \ /var/lib/apt/lists/* COPY requirements_test.txt / -RUN pip3 install --break-system-packages --no-cache-dir -r /requirements_test.txt +RUN if [ "$TARGETARCH$TARGETVARIANT" = "armv7" ]; then \ + export PIP_EXTRA_INDEX_URL="https://www.piwheels.org/simple"; \ + fi; \ + pip3 install \ + --break-system-packages --no-cache-dir -r /requirements_test.txt VOLUME ["/esphome"] WORKDIR /esphome diff --git a/docker/build.py b/docker/build.py index ae0f5088d8..47461ddf97 100755 --- a/docker/build.py +++ b/docker/build.py @@ -143,25 +143,15 @@ def main(): imgs = [f"{params.build_to}:{tag}" for tag in tags_to_push] imgs += [f"ghcr.io/{params.build_to}:{tag}" for tag in tags_to_push] - build_args = [ - "--build-arg", - f"BASEIMGTYPE={params.baseimgtype}", - "--build-arg", - f"BUILD_VERSION={args.tag}", - ] - - if args.arch == ARCH_ARMV7: - build_args += [ - "--build-arg", - "PIP_EXTRA_INDEX_URL=https://www.piwheels.org/simple", - ] - # 3. build cmd = [ "docker", "buildx", "build", - *build_args, + "--build-arg", + f"BASEIMGTYPE={params.baseimgtype}", + "--build-arg", + f"BUILD_VERSION={args.tag}", "--cache-from", f"type=registry,ref={cache_img}", "--file",