-
Notifications
You must be signed in to change notification settings - Fork 0
154 lines (139 loc) · 5.27 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
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_S3-SPIRAM_OCT:XIAO_ESP32S3
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
# 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 make command
IFS='-' read -r BOARD_NAME BOARD_VARIANT <<< "${{ matrix.board }}"
IFS=':' read -r NOT_USED CAMERA_MODEL <<< "${{ matrix.board }}"
if [ -n "${BOARD_VARIANT}" ]; then
MAKE_CMD="USER_C_MODULES=${{ github.workspace }}/src/micropython.cmake BOARD=$BOARD_NAME BOARD_VARIANT=$BOARD_VARIANT"
else
MAKE_CMD="USER_C_MODULES=${{ github.workspace }}/src/micropython.cmake BOARD=$BOARD_NAME"
fi
if [ -n "${CAMERA_MODEL}" ]; then
make $MAKE_CMD CFLAGS_EXTRA="-DMP_CAMERA_MODEL_${CAMERA_MODEL}" all
else
make $MAKE_CMD all
fi
mv ~/micropython/ports/esp32/build-${{ matrix.board }}/firmware.bin ~/${{ matrix.board }}.bin
- name: Upload firmware artifact
uses: actions/upload-artifact@v4
with:
name: firmware-${{ matrix.board }}
path: ~/${{ matrix.board }}.bin
retention-days: 90