129 lines
5.1 KiB
YAML
129 lines
5.1 KiB
YAML
name: Backend E2E Tests
|
|
|
|
on:
|
|
push:
|
|
branches: [master, main]
|
|
pull_request:
|
|
branches: [master, main]
|
|
|
|
jobs:
|
|
e2e:
|
|
runs-on: ubuntu-latest
|
|
timeout-minutes: 20
|
|
|
|
env:
|
|
QEMU_RELEASE_URL: https://github.com/davidmonterocrespo24/velxio/releases/download/qemu-prebuilt
|
|
QEMU_DIR: /opt/velxio-qemu
|
|
BACKEND_URL: http://localhost:8001
|
|
|
|
steps:
|
|
- name: Checkout repository
|
|
uses: actions/checkout@v4
|
|
|
|
# ── QEMU binaries + ROM files ──────────────────────────────────────────────
|
|
- name: Download QEMU binaries and ROM files
|
|
run: |
|
|
mkdir -p $QEMU_DIR
|
|
cd $QEMU_DIR
|
|
|
|
echo "Downloading QEMU shared libraries..."
|
|
curl -fSL -o libqemu-xtensa.so "$QEMU_RELEASE_URL/libqemu-xtensa-amd64.so"
|
|
curl -fSL -o libqemu-riscv32.so "$QEMU_RELEASE_URL/libqemu-riscv32-amd64.so"
|
|
|
|
echo "Downloading ROM files..."
|
|
curl -fSL -o esp32-v3-rom.bin "$QEMU_RELEASE_URL/esp32-v3-rom.bin"
|
|
curl -fSL -o esp32-v3-rom-app.bin "$QEMU_RELEASE_URL/esp32-v3-rom-app.bin"
|
|
curl -fSL -o esp32c3-rom.bin "$QEMU_RELEASE_URL/esp32c3-rom.bin"
|
|
|
|
chmod +x libqemu-xtensa.so libqemu-riscv32.so
|
|
ls -lh .
|
|
|
|
# ── arduino-cli + ESP32 core ───────────────────────────────────────────────
|
|
- name: Install arduino-cli
|
|
run: |
|
|
curl -fsSL https://raw.githubusercontent.com/arduino/arduino-cli/master/install.sh \
|
|
| BINDIR=/usr/local/bin sh
|
|
|
|
- name: Cache arduino-cli cores and libraries
|
|
uses: actions/cache@v4
|
|
with:
|
|
path: ~/.arduino15
|
|
key: arduino-cores-esp32-${{ runner.os }}-v1
|
|
|
|
- name: Install ESP32 arduino core
|
|
run: |
|
|
arduino-cli config init --overwrite
|
|
arduino-cli config add board_manager.additional_urls \
|
|
https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
|
|
arduino-cli core update-index
|
|
arduino-cli core install esp32:esp32
|
|
|
|
# ── Python + backend dependencies ─────────────────────────────────────────
|
|
- name: Set up Python 3.11
|
|
uses: actions/setup-python@v5
|
|
with:
|
|
python-version: '3.11'
|
|
|
|
- name: Cache pip
|
|
uses: actions/cache@v4
|
|
with:
|
|
path: ~/.cache/pip
|
|
key: pip-${{ hashFiles('backend/requirements.txt') }}
|
|
|
|
- name: Install backend dependencies
|
|
run: pip install -r backend/requirements.txt
|
|
|
|
# ── Node.js ───────────────────────────────────────────────────────────────
|
|
- name: Set up Node.js 20
|
|
uses: actions/setup-node@v4
|
|
with:
|
|
node-version: '20'
|
|
|
|
# ── Start backend ─────────────────────────────────────────────────────────
|
|
- name: Start backend server
|
|
run: |
|
|
cd backend
|
|
QEMU_ESP32_LIB=$QEMU_DIR/libqemu-xtensa.so \
|
|
QEMU_RISCV32_LIB=$QEMU_DIR/libqemu-riscv32.so \
|
|
uvicorn app.main:app --port 8001 &
|
|
echo "Backend PID: $!"
|
|
env:
|
|
QEMU_ESP32_LIB: /opt/velxio-qemu/libqemu-xtensa.so
|
|
QEMU_RISCV32_LIB: /opt/velxio-qemu/libqemu-riscv32.so
|
|
|
|
- name: Wait for backend to be ready
|
|
run: |
|
|
echo "Waiting for backend on port 8001..."
|
|
for i in $(seq 1 30); do
|
|
if curl -sf http://localhost:8001/docs > /dev/null 2>&1; then
|
|
echo "Backend is up after ${i}s"
|
|
break
|
|
fi
|
|
sleep 1
|
|
done
|
|
curl -sf http://localhost:8001/docs > /dev/null || (echo "Backend failed to start" && exit 1)
|
|
|
|
# ── Run e2e tests ─────────────────────────────────────────────────────────
|
|
#
|
|
# These tests compile real firmware via the backend and run full simulations
|
|
# over WebSocket. Each test has a generous timeout because compilation +
|
|
# firmware boot takes 30-60 s.
|
|
#
|
|
# NOT run here (require Windows DLLs, not .so):
|
|
# test/backend/integration/ — uses libqemu-xtensa.dll (Windows only)
|
|
#
|
|
- name: Run DHT22 e2e test
|
|
run: node test/backend/e2e/test_dht22_simulation.mjs --timeout=60
|
|
env:
|
|
BACKEND_URL: http://localhost:8001
|
|
|
|
- name: Run HC-SR04 e2e test
|
|
run: node test/backend/e2e/test_hcsr04_simulation.mjs --timeout=75
|
|
env:
|
|
BACKEND_URL: http://localhost:8001
|
|
|
|
- name: Run MPU-6050 e2e test
|
|
run: node test/backend/e2e/test_mpu6050_simulation.mjs --timeout=60
|
|
env:
|
|
BACKEND_URL: http://localhost:8001
|