-
Notifications
You must be signed in to change notification settings - Fork 0
93 lines (81 loc) · 2.73 KB
/
Copy pathbuild-firmware.yml
File metadata and controls
93 lines (81 loc) · 2.73 KB
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
# .github/workflows/build-firmware.yml
name: Build frozen firmware
on:
workflow_dispatch:
inputs:
micropython_ref:
description: "MicroPython git tag/branch to build from"
type: string
default: "v1.28.0"
push:
tags: ["v*.*.*"]
jobs:
build:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
role: [student, helper]
env:
MICROPYTHON_REF: ${{ inputs.micropython_ref || 'v1.28.0' }}
BOARD: RPI_PICO2
steps:
- name: Checkout alpaca
uses: actions/checkout@v4
with:
path: alpaca-src
- uses: astral-sh/setup-uv@v5
with:
working-directory: alpaca-src
- name: Collect ${{ matrix.role }} files
working-directory: alpaca-src
run: uv run alpaca collect-files ${{ matrix.role }}
- name: Checkout MicroPython
uses: actions/checkout@v4
with:
repository: micropython/micropython
ref: ${{ env.MICROPYTHON_REF }}
path: micropython
submodules: false
- name: Install ARM toolchain
run: |
sudo apt-get update
sudo apt-get install -y \
build-essential cmake ninja-build \
gcc-arm-none-eabi libnewlib-arm-none-eabi libstdc++-arm-none-eabi-newlib
- name: Build mpy-cross
run: make -C micropython/mpy-cross
- name: Fetch rp2 submodules
run: make -C micropython/ports/rp2 BOARD="$BOARD" submodules
- name: Write freeze manifest
run: |
ROOT="$GITHUB_WORKSPACE/alpaca-src/.alpaca/${{ matrix.role }}_root"
cat > "$GITHUB_WORKSPACE/manifest.py" <<EOF
# Auto-generated by build-firmware.yml
include("\$(PORT_DIR)/boards/manifest.py")
freeze("$ROOT")
EOF
echo "----- manifest.py -----"
cat "$GITHUB_WORKSPACE/manifest.py"
echo "----- frozen root -----"
find "$ROOT" -type f | sort
- name: Build firmware
run: |
make -C micropython/ports/rp2 \
BOARD="$BOARD" \
FROZEN_MANIFEST="$GITHUB_WORKSPACE/manifest.py"
- name: Stage artifact
run: |
mkdir -p dist
VERSION="$(cd alpaca-src && uv run python -c 'import importlib.metadata as m; print(m.version("alpaca"))')"
SRC="micropython/ports/rp2/build-$BOARD/firmware.uf2"
DEST="dist/alpaca-${{ matrix.role }}-${BOARD}-v${VERSION}-mp${MICROPYTHON_REF}.uf2"
cp "$SRC" "$DEST"
echo "Built $DEST"
ls -la dist
- name: Upload firmware
uses: actions/upload-artifact@v4
with:
name: alpaca-${{ matrix.role }}-firmware
path: dist/*.uf2
if-no-files-found: error