Skip to content

ESP32.yml aktualisieren #28

ESP32.yml aktualisieren

ESP32.yml aktualisieren #28

Workflow file for this run

name: Build MicroPython for ESP32 Boards
on:
push:
branches:
- CI
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
setup-environment:
runs-on: ubuntu-24.04
steps:
# Cache ESP-IDF dependencies and MicroPython
- name: Cache ESP-IDF and MicroPython
id: cache_esp_idf
uses: actions/cache@v4
with:
path: |
~/esp-idf/
~/.espressif/
!~/.espressif/dist/
~/.cache/pip/
./micropython/
key: esp-idf-${{ hashFiles('path-to-lock-file-or-important-files') }}
restore-keys: |
esp-idf-
# 3. Install ESP-IDF dependencies (if not cached)
- name: Install ESP-IDF dependencies
if: steps.cache_esp_idf.outputs.cache-hit != 'true'
run: |
sudo apt-get update
sudo apt-get install -y git wget flex bison gperf python3 python3-pip python3-venv cmake ninja-build ccache libffi-dev libssl-dev dfu-util libusb-1.0-0
# 4. Download and set up ESP-IDF 5.2.x (if not cached)
- name: Set up ESP-IDF 5.2.x
id: export-idf
if: steps.cache_esp_idf.outputs.cache-hit != 'true'
run: |
if [ ! -d "esp-idf" ]; then
cd ~
git clone --branch release/v5.2 --recursive https://github.com/espressif/esp-idf.git
cd esp-idf
./install.sh all
else
echo "ESP-IDF found in cache."
fi
# 5. Clone the latest MicroPython release (if not cached)
- name: Clone MicroPython latest release
id: clone-micropython
if: steps.cache_esp_idf.outputs.cache-hit != 'true'
run: |
if [ ! -d "micropython" ]; then
LATEST_RELEASE=$(curl --silent "https://api.github.com/repos/micropython/micropython/releases/latest" | jq -r .tag_name)
echo "Cloning MicroPython release: $LATEST_RELEASE"
git clone --depth 1 --branch $LATEST_RELEASE https://github.com/micropython/micropython.git
cd micropython
git submodule update --init --depth 1
echo "::set-output name=micropython-path::$(pwd)"
cd mpy-cross
make
echo "Mpy-Cross compiler built successfully"
else
echo "MicroPython found in cache."
echo "::set-output name=micropython-path::$(pwd)/micropython"
fi
- name: test ESP-IDF environment
run: |
cd ~/esp-idf/
source ./export.sh
# Dynamically create jobs for each board
build:
needs: setup-environment
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
board:
- ESP32_GENERIC:SPIRAM
- ESP32_GENERIC_S2:SPIRAM
- ESP32_GENERIC_S3:SPIRAM
steps:
# Cache ESP-IDF dependencies and MicroPython
- name: Cache ESP-IDF and MicroPython
uses: actions/cache@v4
with:
path: |
~/esp-idf/
~/.espressif/
!~/.espressif/dist/
~/.cache/pip/
./micropython/
key: esp-idf-${{ hashFiles('path-to-lock-file-or-important-files') }}
restore-keys: |
esp-idf-
- name: Checkout repository
uses: actions/checkout@v4
- name: Install ESP-IDF dependencies
run: |
sudo apt-get update
sudo apt-get install -y git wget flex bison gperf python3 python3-pip python3-venv cmake ninja-build ccache libffi-dev libssl-dev dfu-util libusb-1.0-0
# 1. Set up ESP-IDF environment for the job
- name: Set up ESP-IDF environment
run: |
cd ~/esp-idf/
source ./export.sh
cd -
# 2. Parse Board Name and Variant
- name: Parse Board Name and Variant
id: parse
run: |
IFS=':' read -r BOARD_NAME BOARD_VARIANT <<< "${{ matrix.board }}"
echo "::set-output name=board_name::${BOARD_NAME}"
echo "::set-output name=board_variant::${BOARD_VARIANT}"
# 3. Build MicroPython for each board
- name: Build MicroPython
run: |
cd ${{ needs.setup-environment.outputs.micropython-path }}/ports/esp32
make submodules
# Apply sdkconfig if available
if [ -f "../../../src/sdkconfig_${{ steps.parse.outputs.board_name }}" ]; then
cp ../../../src/sdkconfig_${{ steps.parse.outputs.board_name }} sdkconfig.defaults
fi