-
Notifications
You must be signed in to change notification settings - Fork 0
133 lines (120 loc) · 4.6 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
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: |
cd ~
git clone --branch release/v5.2 --recursive https://github.com/espressif/esp-idf.git
cd esp-idf
./install.sh all
cd components
git clone https://github.com/espressif/esp32-camera
# 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: |
LATEST_RELEASE=$(curl --silent "https://api.github.com/repos/micropython/micropython/releases/latest" | jq -r .tag_name)
echo "Cloning MicroPython release: $LATEST_RELEASE"
cd ~
git clone --depth 1 --branch $LATEST_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"
- 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-24.04
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
# Parse Board Name and Variant
- name: Parse Board Name and Variant
id: parse
run: |
IFS=':' read -r BOARD_NAME BOARD_VARIANT <<< "${{ matrix.board }}"
echo "BOARD_NAME=${BOARD_NAME}" >> $GITHUB_ENV
if [ -n "${BOARD_VARIANT}" ]; then
echo "BOARD_VARIANT=${BOARD_VARIANT}" >> $GITHUB_ENV
else
echo "BOARD_VARIANT=none" >> $GITHUB_ENV
fi
# Build MicroPython for each board
- name: Build MicroPython
run: |
cd ~/micropython/mpy-cross
make
cd ~/micropython/ports/esp32
source ~/esp-idf/export.sh
# Check if a variant is defined and adjust the make command
make USER_C_MODULES=${{ github.workspace }}/src/micropython.cmake BOARD=${{ env.BOARD_NAME }} BUILD=~/build/${{ env.BOARD_NAME }} submodules
if [ "${{ env.BOARD_VARIANT }}" != "none" ]; then
make USER_C_MODULES=${{ github.workspace }}/src/micropython.cmake BOARD=${{ env.BOARD_NAME }} VARIANT=${{ env.BOARD_VARIANT }} BUILD=~/build/${{ env.BOARD_NAME }} all
else
make USER_C_MODULES=${{ github.workspace }}/src/micropython.cmake BOARD=${{ env.BOARD_NAME }} BUILD=~/build/${{ env.BOARD_NAME }} all
fi
# delete Build in MicroPython