From b73f28c1744311188e18bb5a4dba5996b65a8875 Mon Sep 17 00:00:00 2001 From: David Montero Crespo Date: Sat, 4 Apr 2026 18:02:48 -0300 Subject: [PATCH] feat: add pre-built ESP-IDF toolchain image workflow --- .github/workflows/build-espidf-toolchain.yml | 42 ++++++++++++++++++++ Dockerfile.espidf-toolchain | 28 +++++++++++++ Dockerfile.standalone | 4 +- 3 files changed, 72 insertions(+), 2 deletions(-) create mode 100644 .github/workflows/build-espidf-toolchain.yml create mode 100644 Dockerfile.espidf-toolchain diff --git a/.github/workflows/build-espidf-toolchain.yml b/.github/workflows/build-espidf-toolchain.yml new file mode 100644 index 0000000..f7e1552 --- /dev/null +++ b/.github/workflows/build-espidf-toolchain.yml @@ -0,0 +1,42 @@ +name: Build ESP-IDF Toolchain Image + +# Only runs manually or when ESP-IDF version changes (rare) +on: + workflow_dispatch: + +env: + REGISTRY: ghcr.io + IMAGE_NAME: ${{ github.repository_owner }}/velxio-espidf-toolchain + +permissions: + contents: read + packages: write + +jobs: + build-toolchain: + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Log in to GHCR + uses: docker/login-action@v3 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Build and push ESP-IDF toolchain image + uses: docker/build-push-action@v6 + with: + context: . + file: Dockerfile.espidf-toolchain + push: true + tags: | + ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest + ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:idf-4.4.7 + cache-from: type=gha,scope=espidf + cache-to: type=gha,scope=espidf,mode=max diff --git a/Dockerfile.espidf-toolchain b/Dockerfile.espidf-toolchain new file mode 100644 index 0000000..613f894 --- /dev/null +++ b/Dockerfile.espidf-toolchain @@ -0,0 +1,28 @@ +# ESP-IDF toolchain image — built once, pulled many times. +# Published to GHCR by build-espidf-toolchain.yml Action. +# Usage: docker build -f Dockerfile.espidf-toolchain -t velxio-espidf-toolchain . +FROM ubuntu:22.04 + +RUN apt-get update && apt-get install -y --no-install-recommends \ + git wget flex bison gperf python3 python3-pip python3-venv \ + cmake ninja-build ccache libffi-dev libssl-dev \ + libusb-1.0-0 ca-certificates \ + && rm -rf /var/lib/apt/lists/* + +# Install ESP-IDF 4.4.7 (matches Arduino ESP32 core 2.0.17 / lcgamboa QEMU ROM) +RUN git clone -b v4.4.7 --recursive --depth=1 --shallow-submodules \ + https://github.com/espressif/esp-idf.git /opt/esp-idf + +WORKDIR /opt/esp-idf + +# Install toolchains for esp32 (Xtensa) and esp32c3 (RISC-V) only +RUN ./install.sh esp32,esp32c3 + +# Clean up large unnecessary files to reduce image size +RUN rm -rf .git docs examples \ + && find /root/.espressif -name '*.tar.*' -delete 2>/dev/null || true + +# Install Arduino-as-component for full Arduino API support in ESP-IDF builds +RUN git clone --branch 2.0.17 --depth=1 --recursive --shallow-submodules \ + https://github.com/espressif/arduino-esp32.git /opt/arduino-esp32 \ + && rm -rf /opt/arduino-esp32/.git diff --git a/Dockerfile.standalone b/Dockerfile.standalone index 69ab6be..b40262d 100644 --- a/Dockerfile.standalone +++ b/Dockerfile.standalone @@ -136,9 +136,9 @@ COPY deploy/nginx.conf /etc/nginx/conf.d/default.conf # Copy built frontend assets from builder stage COPY --from=frontend-builder /app/frontend/dist /usr/share/nginx/html -# Copy and configure entrypoint script +# Copy and configure entrypoint script (fix Windows CRLF → LF) COPY deploy/entrypoint.sh /app/entrypoint.sh -RUN chmod +x /app/entrypoint.sh +RUN sed -i 's/\r$//' /app/entrypoint.sh && chmod +x /app/entrypoint.sh # ── ESP32 emulation: pre-built QEMU .so + ROM binaries ────────────────────── # Downloaded from GitHub Release (public — no access to qemu-lcgamboa needed)