diff --git a/.github/workflows/eos-simulation.yml b/.github/workflows/eos-simulation.yml index 21558a8b..ec311539 100644 --- a/.github/workflows/eos-simulation.yml +++ b/.github/workflows/eos-simulation.yml @@ -39,12 +39,15 @@ 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: | @@ -52,20 +55,26 @@ jobs: 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: | @@ -73,7 +82,7 @@ jobs: 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:" @@ -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 @@ -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 @@ -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: | @@ -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: diff --git a/.github/workflows/python-tests.yml b/.github/workflows/python-tests.yml index fb2008ce..c5f6c2fe 100644 --- a/.github/workflows/python-tests.yml +++ b/.github/workflows/python-tests.yml @@ -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: |