2929 - name : Get MicroPython latest release
3030 run : |
3131 MPY_RELEASE=$(curl --silent "https://api.github.com/repos/micropython/micropython/releases/latest" | jq -r .tag_name)
32- # echo "MPY_RELEASE=${MPY_RELEASE}" >> $GITHUB_ENV
33- echo "MPY_RELEASE=v1.25.0" >> $GITHUB_ENV
32+ echo "MPY_RELEASE=${MPY_RELEASE}" >> $GITHUB_ENV
3433
3534 # Cache ESP-IDF dependencies and MicroPython
3635 - name : Cache ESP-IDF and MicroPython
@@ -84,56 +83,25 @@ jobs:
8483 cd ~/esp-idf/
8584 source ./export.sh
8685 cd ~
87- git clone --depth 1 --branch ${{ env.MPY_RELEASE }} https://github.com/micropython/micropython.git
88- cd micropython
89- # git submodule update --init --depth 1
90- cd mpy-cross
91- make
92- cd ~/micropython/ports/esp32
93- make submodules
94- echo "Micropython setup successfully"
86+ git clone --branch ${{ env.MPY_RELEASE }} https://github.com/micropython/micropython.git
87+ echo "Micropython cloned successfully"
9588 source ~/micropython/tools/ci.sh && echo "IDF_VER=$IDF_VER" >> $GITHUB_ENV
9689
97- # Dynamically create jobs for each board
90+ # Dynamically create jobs for each commit
9891 build :
9992 needs : setup-environment
10093 runs-on : ubuntu-24.04
10194 strategy :
10295 fail-fast : false
10396 matrix :
104- board :
105- - ESP32_GENERIC-SPIRAM
106- - ESP32_GENERIC_S2
107- - ESP32_GENERIC_S3
108- - ESP32_GENERIC_S3-SPIRAM_OCT
109- - ESP32_GENERIC_S3-FLASH_4M
110- - ESP32_GENERIC-SPIRAM@WROVER_KIT
111- - ESP32_GENERIC-SPIRAM@ESP_EYE
112- - ESP32_GENERIC-SPIRAM@M5STACK_PSRAM
113- - ESP32_GENERIC-SPIRAM@M5STACK_V2_PSRAM
114- - ESP32_GENERIC-SPIRAM@M5STACK_WIDE
115- - ESP32_GENERIC-SPIRAM@M5STACK_ESP32CAM
116- - ESP32_GENERIC-SPIRAM@M5STACK_UNITCAM
117- - ESP32_GENERIC-SPIRAM@AI_THINKER
118- - ESP32_GENERIC-SPIRAM@TTGO_T_JOURNAL
119- - ESP32_GENERIC-SPIRAM@TTGO_T_CAMERA_PLUS
120- - ESP32_GENERIC_S3-SPIRAM_OCT@M5STACK_CAMS3_UNIT
121- - ESP32_GENERIC_S3-SPIRAM_OCT@M5STACK_ATOM_S3R
122- - ESP32_GENERIC_S3-SPIRAM_OCT@XIAO_ESP32S3
123- - ESP32_GENERIC_S3-SPIRAM_OCT@ESP32S3_CAM_LCD
124- - ESP32_GENERIC_S3-SPIRAM_OCT@ESP32S3_EYE
125- - ESP32_GENERIC_S3-SPIRAM_OCT@FREENOVE_ESP32S3_CAM
126- - ESP32_GENERIC_S3-SPIRAM_OCT@DFRobot_ESP32S3
127- - ESP32_GENERIC_S3-SPIRAM_OCT@NEW_ESPS3_RE1_0
128- - ESP32_GENERIC_S3-SPIRAM_OCT@XENOIONEX
97+ commit_offset : [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23]
12998
13099 steps :
131100 # Get the latest MicroPython release
132101 - name : Get MicroPython latest release
133102 run : |
134103 MPY_RELEASE=$(curl --silent "https://api.github.com/repos/micropython/micropython/releases/latest" | jq -r .tag_name)
135- # echo "MPY_RELEASE=${MPY_RELEASE}" >> $GITHUB_ENV
136- echo "MPY_RELEASE=v1.25.0" >> $GITHUB_ENV
104+ echo "MPY_RELEASE=${MPY_RELEASE}" >> $GITHUB_ENV
137105
138106 # Cache ESP-IDF dependencies and MicroPython
139107 - name : Cache ESP-IDF and MicroPython
@@ -156,7 +124,26 @@ jobs:
156124 sudo apt-get update
157125 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 build-essential pkg-config
158126
159- # Build MicroPython for each board
127+ # Setup MicroPython for specific commit
128+ - name : Setup MicroPython for commit
129+ run : |
130+ cd ~/micropython
131+ # Get the commit hash that is N commits before the release tag
132+ COMMIT_HASH=$(git rev-list --reverse HEAD~${{ matrix.commit_offset }}..HEAD | head -1)
133+ if [ -z "$COMMIT_HASH" ]; then
134+ COMMIT_HASH=$(git rev-parse HEAD~${{ matrix.commit_offset }})
135+ fi
136+ echo "Testing commit: $COMMIT_HASH (offset: ${{ matrix.commit_offset }})"
137+ git checkout $COMMIT_HASH
138+ git submodule update --init --depth 1
139+ cd mpy-cross
140+ make
141+ cd ~/micropython/ports/esp32
142+ make submodules
143+ echo "Micropython setup successfully for commit $COMMIT_HASH"
144+ echo "COMMIT_HASH=$COMMIT_HASH" >> $GITHUB_ENV
145+
146+ # Build MicroPython for ESP32_GENERIC_S3-SPIRAM_OCT
160147 - name : Build MicroPython
161148 run : |
162149 cd ${{ github.workspace }}
@@ -166,33 +153,32 @@ jobs:
166153 cd ~/micropython/ports/esp32
167154 source ~/esp-idf/export.sh
168155
169- # Check if a variant is defined and adjust the idf.py command
170- IFS='@' read -r BUILD_TARGET CAMERA_MODEL <<< "${{ matrix.board }}"
171- IFS='-' read -r BOARD_NAME BOARD_VARIANT <<< "${BUILD_TARGET}"
156+ # Fixed board configuration for ESP32_GENERIC_S3-SPIRAM_OCT
157+ BOARD_NAME="ESP32_GENERIC_S3"
158+ BOARD_VARIANT="SPIRAM_OCT"
159+ BUILD_TARGET="ESP32_GENERIC_S3-SPIRAM_OCT"
160+
161+ IDF_CMD="idf.py -D MICROPY_BOARD=$BOARD_NAME -D USER_C_MODULES=${{ github.workspace }}/src/micropython.cmake -D MICROPY_BOARD_VARIANT=$BOARD_VARIANT -B build-$BUILD_TARGET -D MP_CAMERA_DRIVER_VERSION=$CAM_DRIVER -D MP_JPEG_DIR=${{ github.workspace }}/mp_jpeg"
162+ FINAL_CMD="${IDF_CMD} build"
172163
173- if [ -n "${BOARD_VARIANT}" ]; then
174- IDF_CMD="idf.py -D MICROPY_BOARD=$BOARD_NAME -D USER_C_MODULES=${{ github.workspace }}/src/micropython.cmake -D MICROPY_BOARD_VARIANT=$BOARD_VARIANT -B build-$BUILD_TARGET -D MP_CAMERA_DRIVER_VERSION=$CAM_DRIVER -D MP_JPEG_DIR=${{ github.workspace }}/mp_jpeg"
175- else
176- IDF_CMD="idf.py -D MICROPY_BOARD=$BOARD_NAME -D USER_C_MODULES=${{ github.workspace }}/src/micropython.cmake -B build-$BUILD_TARGET -D MP_CAMERA_DRIVER_VERSION=$CAM_DRIVER -D MP_JPEG_DIR=${{ github.workspace }}/mp_jpeg"
177- fi
178- if [ -n "${CAMERA_MODEL}" ]; then
179- echo "FW_NAME=${CAMERA_MODEL}" >> $GITHUB_ENV
180- FINAL_CMD="${IDF_CMD} -D MICROPY_CAMERA_MODEL=${CAMERA_MODEL} build"
181- else
182- echo "FW_NAME=${BUILD_TARGET}" >> $GITHUB_ENV
183- FINAL_CMD="${IDF_CMD} build"
184- fi
185164 make USER_C_MODULES=${{ github.workspace }}/src/micropython.cmake BOARD=$BOARD_NAME submodules
186165 echo "Running command: $FINAL_CMD"
187166 eval $FINAL_CMD
167+
188168 cd ~/micropython/ports/esp32/build-${BUILD_TARGET}
189169 python ../makeimg.py sdkconfig bootloader/bootloader.bin partition_table/partition-table.bin micropython.bin firmware.bin micropython.uf2
190170 mkdir -p ~/artifacts
191171 mv ~/micropython/ports/esp32/build-${BUILD_TARGET}/firmware.bin ~/artifacts/firmware.bin
172+
173+ # Get binary size info
174+ ls -lh ~/artifacts/firmware.bin
175+ FIRMWARE_SIZE=$(stat -c%s ~/artifacts/firmware.bin)
176+ echo "Firmware size: $FIRMWARE_SIZE bytes"
177+ echo "FIRMWARE_SIZE=$FIRMWARE_SIZE" >> $GITHUB_ENV
192178
193179 - name : Upload firmware artifact
194180 uses : actions/upload-artifact@v4
195181 with :
196- name : mpy_cam-${{ env.MPY_RELEASE }}-${{ env.FW_NAME }}
182+ name : mpy_cam-${{ env.MPY_RELEASE }}-commit- ${{ matrix.commit_offset }}-${{ env.COMMIT_HASH }}-ESP32_GENERIC_S3-SPIRAM_OCT
197183 path : ~/artifacts/**
198184 retention-days : 5
0 commit comments