Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
126 changes: 74 additions & 52 deletions .github/workflows/eos-simulation.yml
Original file line number Diff line number Diff line change
Expand Up @@ -39,41 +39,50 @@ jobs:
ref: master
path: ebuild

- name: Checkout eFab (CAD pipeline)
uses: actions/checkout@v4
with:
repository: embeddedos-org/eFab
ref: master
path: eFab
# embeddedos-org/eFab does not exist -- the checkout 404s and takes this
# job, and everything downstream of it, with it. Restore this block and
# the CAD step below once the repository is published.
# - name: Checkout eFab (CAD pipeline)
# uses: actions/checkout@v4
# with:
# repository: embeddedos-org/eFab
# ref: master
# path: eFab

- name: Install build dependencies
run: |
sudo apt-get update -qq
sudo apt-get install -y --no-install-recommends \
gcc-aarch64-linux-gnu \
binutils-aarch64-linux-gnu \
libc6-dev-arm64-cross \
cmake \
ninja-build \
qemu-system-arm \
python3 \
python3-pytest

- name: Run eFab CAD pipeline (KiCad → linker script + DTS)
# - name: Run eFab CAD pipeline (KiCad → linker script + DTS)
# run: |
# python3 ebuild/tools/cad_pipeline.py \
# eFab/samples/eos_reference_board.kicad_pcb \
# sim_artifacts/
# echo "=== Generated artifacts ==="
# ls -la sim_artifacts/
# cat sim_artifacts/board_manifest.json
- name: Prepare artifact directory
run: |
python3 ebuild/tools/cad_pipeline.py \
eFab/samples/eos_reference_board.kicad_pcb \
sim_artifacts/
echo "=== Generated artifacts ==="
ls -la sim_artifacts/
cat sim_artifacts/board_manifest.json
# Normally populated by the eFab CAD pipeline above. Created empty so
# the upload step below still has a path to collect.
mkdir -p sim_artifacts

- name: Build eBoot (ARM64 qemu_arm64 board)
run: |
cd eBoot
mkdir -p build_ci
cmake -B build_ci -S . \
-DCMAKE_TOOLCHAIN_FILE=toolchains/aarch64-linux-gnu.cmake \
-DBOARD=qemu_arm64 \
-DEBLDR_BOARD=qemu_arm64 \
-DCMAKE_BUILD_TYPE=Release
cmake --build build_ci --parallel $(nproc)
echo "eBoot artifacts:"
Expand All @@ -84,7 +93,7 @@ jobs:
cd eos
mkdir -p build_ci
cmake -B build_ci -S . \
-DCMAKE_TOOLCHAIN_FILE=cmake/aarch64-linux-gnu.cmake \
-DCMAKE_TOOLCHAIN_FILE=toolchains/aarch64-linux-gnu.cmake \
-DTARGET_ARCH=aarch64 \
-DTARGET_CPU=cortex-a57 \
-DCMAKE_BUILD_TYPE=Release
Expand Down Expand Up @@ -195,11 +204,13 @@ jobs:

# ── Job 3: Python unit tests for all middleware layers ─────────────────────
test-middleware:
name: "Python unit tests (eAI, eNI, eosllm, eDB, eVera, eBrowser, eIPC)"
name: "Python unit tests (eAI, eNI, eosllm, eDB, eBrowser, eIPC)"
runs-on: ubuntu-22.04
strategy:
matrix:
repo: [eAI, eNI, eosllm, eDB, eVera, eBrowser, eIPC, eOffice, EoStudio, EoSim, eApps]
# eVera removed: embeddedos-org/eVera does not exist, so its checkout
# 404s. Add it back when the repository is published.
repo: [eAI, eNI, eosllm, eDB, eBrowser, eIPC, eOffice, EoStudio, EoSim, eApps]
steps:
- name: Checkout ${{ matrix.repo }}
uses: actions/checkout@v4
Expand All @@ -211,7 +222,11 @@ jobs:
uses: actions/setup-python@v5
with:
python-version: "3.11"
cache: pip
# No cache: pip. setup-python errors out with "No file ... matched to
# [**/requirements.txt or **/pyproject.toml]" when the repository it
# is caching for has neither, which is the case for most of the
# matrix below. The cache is an optimisation; failing the job over it
# is not a trade worth making.

- name: Install dependencies
run: |
Expand Down Expand Up @@ -243,41 +258,48 @@ jobs:
repository: embeddedos-org/ebuild
ref: master

- name: Checkout eFab
uses: actions/checkout@v4
with:
repository: embeddedos-org/eFab
ref: master
path: eFab

- name: Run CAD pipeline
run: |
python3 tools/cad_pipeline.py \
eFab/samples/eos_reference_board.kicad_pcb \
cad_output/
echo "=== Validating generated artifacts ==="
test -f cad_output/eos_generated.ld && echo "[PASS] Linker script" || exit 1
test -f cad_output/eos_generated.dts && echo "[PASS] Device tree" || exit 1
test -f cad_output/eos_recipe.yaml && echo "[PASS] ebuild recipe" || exit 1
test -f cad_output/eos_toolchain.cmake && echo "[PASS] CMake toolchain" || exit 1
test -f cad_output/board_manifest.json && echo "[PASS] Board manifest" || exit 1

- name: Validate memory map completeness
# Same missing repository as in build-kernel.
# - name: Checkout eFab
# uses: actions/checkout@v4
# with:
# repository: embeddedos-org/eFab
# ref: master
# path: eFab

# Every step below reads eFab/samples/eos_reference_board.kicad_pcb, which
# cannot be checked out. Restore them together with the checkout above.
# - name: Run CAD pipeline
# run: |
# python3 tools/cad_pipeline.py \
# eFab/samples/eos_reference_board.kicad_pcb \
# cad_output/
# echo "=== Validating generated artifacts ==="
# test -f cad_output/eos_generated.ld && echo "[PASS] Linker script" || exit 1
# test -f cad_output/eos_generated.dts && echo "[PASS] Device tree" || exit 1
# test -f cad_output/eos_recipe.yaml && echo "[PASS] ebuild recipe" || exit 1
# test -f cad_output/eos_toolchain.cmake && echo "[PASS] CMake toolchain" || exit 1
# test -f cad_output/board_manifest.json && echo "[PASS] Board manifest" || exit 1
#
# - name: Validate memory map completeness
# run: |
# python3 - <<'EOF'
# import json
# with open("cad_output/board_manifest.json") as f:
# m = json.load(f)
# regions = {r["name"] for r in m["memory_regions"]}
# required = {"FLASH_NOR", "RAM_LPDDR4", "UART0_PL011", "HEAP_REGION", "OTA_SCRATCH"}
# missing = required - regions
# if missing:
# print(f"[FAIL] Missing memory regions: {missing}")
# exit(1)
# print(f"[PASS] All required memory regions present: {required}")
# print(f"[PASS] Total regions: {len(regions)}")
# print(f"[PASS] Peripherals: {len(m['peripherals'])}")
# EOF
- name: Skip CAD pipeline (eFab unavailable)
run: |
python3 - <<'EOF'
import json
with open("cad_output/board_manifest.json") as f:
m = json.load(f)
regions = {r["name"] for r in m["memory_regions"]}
required = {"FLASH_NOR", "RAM_LPDDR4", "UART0_PL011", "HEAP_REGION", "OTA_SCRATCH"}
missing = required - regions
if missing:
print(f"[FAIL] Missing memory regions: {missing}")
exit(1)
print(f"[PASS] All required memory regions present: {required}")
print(f"[PASS] Total regions: {len(regions)}")
print(f"[PASS] Peripherals: {len(m['peripherals'])}")
EOF
echo "embeddedos-org/eFab does not exist; the CAD pipeline cannot be"
echo "validated. Re-enable the steps above once it is published."

# ── Job 5: Full stack integration summary ──────────────────────────────────
integration-summary:
Expand Down
4 changes: 3 additions & 1 deletion .github/workflows/python-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,9 @@ jobs:
uses: actions/setup-python@v5
with:
python-version: "3.11"
cache: pip
# No cache: pip -- this repository has neither requirements.txt nor
# pyproject.toml, and setup-python treats that as a hard error rather
# than skipping the cache.

- name: Install dependencies
run: |
Expand Down
Loading