-
-
Notifications
You must be signed in to change notification settings - Fork 4
186 lines (169 loc) · 7.04 KB
/
ESP32.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
name: ESP32
on:
workflow_dispatch:
push:
paths:
- 'src/**'
- '.github/workflows/*.yml'
pull_request:
branches:
- master
paths:
- 'src/**'
- '.github/workflows/*.yml'
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
setup-environment:
runs-on: ubuntu-24.04
steps:
# Get the latest MicroPython release
- name: Get MicroPython latest release
run: |
MPY_RELEASE=$(curl --silent "https://api.github.com/repos/micropython/micropython/releases/latest" | jq -r .tag_name)
echo "MPY_RELEASE=${MPY_RELEASE}" >> $GITHUB_ENV
# Cache ESP-IDF dependencies and MicroPython
- name: Cache ESP-IDF and MicroPython
id: cache_esp_idf
uses: actions/cache@v4
with:
lookup-only: true
path: |
~/esp-idf/
~/.espressif/
!~/.espressif/dist/
~/.cache/pip/
~/micropython/
key: mpy-${{ env.MPY_RELEASE }}
restore-keys: mpy-
# Install ESP-IDF dependencies (if not cached)
- name: Install 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
# 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: |
echo "Cloning MicroPython release: $MPY_RELEASE"
cd ~
git clone --depth 1 --branch ${{ env.MPY_RELEASE }} https://github.com/micropython/micropython.git
cd micropython
git submodule update --init --depth 1
cd mpy-cross
make
cd ~/micropython/ports/esp32
make submodules
echo "Micropython setup successfully"
source ~/micropython/tools/ci.sh && echo "IDF_VER=$IDF_VER" >> $GITHUB_ENV
# Download and set up ESP-IDF (if not cached)
- name: Set up ESP-IDF
id: export-idf
if: steps.cache_esp_idf.outputs.cache-hit != 'true'
run: |
cd ~
git clone --depth 1 --branch release/v5.2 https://github.com/espressif/esp-idf.git
# git clone --depth 1 --branch ${{ env.IDF_VER }} https://github.com/espressif/esp-idf.git
git -C esp-idf submodule update --init --recursive --filter=tree:0
cd esp-idf
./install.sh all
cd components
git clone https://github.com/espressif/esp32-camera
cd ~/esp-idf/
source ./export.sh
# Dynamically create jobs for each board
build:
needs: setup-environment
runs-on: ubuntu-24.04
strategy:
fail-fast: false
matrix:
board:
- ESP32_GENERIC-SPIRAM
- ESP32_GENERIC_S2
- ESP32_GENERIC_S3
- ESP32_GENERIC_S3-SPIRAM_OCT
- ESP32_GENERIC_S3-FLASH_4M
# - ESP32_GENERIC-SPIRAM@WROVER_KIT
# - ESP32_GENERIC-SPIRAM@ESP_EYE
# - ESP32_GENERIC-SPIRAM@M5STACK_PSRAM
# - ESP32_GENERIC-SPIRAM@M5STACK_V2_PSRAM
# - ESP32_GENERIC-SPIRAM@M5STACK_WIDE
# - ESP32_GENERIC-SPIRAM@M5STACK_ESP32CAM
# - ESP32_GENERIC-SPIRAM@M5STACK_UNITCAM
# - ESP32_GENERIC-SPIRAM@AI_THINKER
# - ESP32_GENERIC-SPIRAM@TTGO_T_JOURNAL
# - ESP32_GENERIC-SPIRAM@TTGO_T_CAMERA_PLUS
# - ESP32_GENERIC_S3-SPIRAM_OCT@M5STACK_CAMS3_UNIT
# - ESP32_GENERIC_S3-SPIRAM_OCT@XIAO_ESP32S3
# - ESP32_GENERIC_S3-SPIRAM_OCT@ESP32S3_CAM_LCD
# - ESP32_GENERIC_S3-SPIRAM_OCT@ESP32S3_EYE
# - ESP32_GENERIC_S3-SPIRAM_OCT@FREENOVE_ESP32S3_CAM
# - ESP32_GENERIC_S3-SPIRAM_OCT@DFRobot_FireBeetle2_ESP32S3
# - ESP32_GENERIC_S3-SPIRAM_OCT@DFRobot_Romeo_ESP32S3
# - ESP32_GENERIC_S3-SPIRAM_OCT@NEW_ESPS3_RE1_0
# - ESP32_GENERIC_S3-SPIRAM_OCT@XENOIONEX
steps:
# Get the latest MicroPython release
- name: Get MicroPython latest release
run: |
MPY_RELEASE=$(curl --silent "https://api.github.com/repos/micropython/micropython/releases/latest" | jq -r .tag_name)
echo "MPY_RELEASE=${MPY_RELEASE}" >> $GITHUB_ENV
# 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: mpy-${{ env.MPY_RELEASE }}
restore-keys: mpy-
- 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 build-essential pkg-config pipx
pipx install vfs_merge
pipx inject manim setuptools
# Build MicroPython for each board
- name: Build MicroPython
run: |
cd ~/micropython/ports/esp32
source ~/esp-idf/export.sh
# Check if a variant is defined and adjust the idf.py command
IFS='@' read -r BUILD_TARGET CAMERA_MODEL <<< "${{ matrix.board }}"
IFS='-' read -r BOARD_NAME BOARD_VARIANT <<< "${BUILD_TARGET}"
if [ -n "${BOARD_VARIANT}" ]; then
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"
else
IDF_CMD="idf.py -D MICROPY_BOARD=$BOARD_NAME -D USER_C_MODULES=${{ github.workspace }}/src/micropython.cmake -B build-$BUILD_TARGET"
fi
if [ -n "${CAMERA_MODEL}" ]; then
echo "FW_NAME=${CAMERA_MODEL}" >> $GITHUB_ENV
FINAL_CMD="${IDF_CMD} -D MICROPY_CAMERA_MODEL=${CAMERA_MODEL} build"
else
echo "FW_NAME=${BUILD_TARGET}" >> $GITHUB_ENV
FINAL_CMD="${IDF_CMD} build"
fi
echo "Running command: $FINAL_CMD"
eval $FINAL_CMD
cd ~/micropython/ports/esp32/build-${BUILD_TARGET}
python ../makeimg.py sdkconfig bootloader/bootloader.bin partition_table/partition-table.bin micropython.bin firmware.bin micropython.uf2
mkdir -p ~/artifacts
mv ~/micropython/ports/esp32/build-${BUILD_TARGET}/firmware.bin ~/artifacts/firmware.bin
- name: Write files to binary image
run: |
vfsmerge --port auto --firmware ~/micropython/ports/esp32/build-${BUILD_TARGET}/firmware.bin --source {{ github.workspace }}/examples --build ~/artifacts/firmware2.bin
- name: Upload firmware artifact
uses: actions/upload-artifact@v4
with:
name: firmware-${{ env.FW_NAME }}
path: ~/artifacts/**
retention-days: 5