Prune zephyr manifest #128
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: ci | |
| on: | |
| pull_request: | |
| push: | |
| branches: | |
| - main | |
| jobs: | |
| lint: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Lint | |
| run: | | |
| make fmt | |
| build: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| with: | |
| submodules: false # We'll handle submodules with smart caching | |
| fetch-depth: 0 | |
| # Cache project dependencies (fprime, fprime-zephyr, zephyr) | |
| - name: Cache Project Dependencies | |
| id: cache-submodules | |
| uses: actions/cache@v4 | |
| with: | |
| path: | | |
| lib/fprime | |
| lib/fprime-zephyr | |
| lib/zephyr-workspace/zephyr | |
| key: project-deps-${{ hashFiles('.gitmodules') }}-v3 | |
| restore-keys: | | |
| project-deps-${{ hashFiles('.gitmodules') }}- | |
| project-deps- | |
| # Cache Zephyr west modules and SDK (the slow parts) | |
| - name: Cache Zephyr workspace and SDK | |
| id: cache-zephyr | |
| uses: actions/cache@v4 | |
| with: | |
| path: | | |
| lib/zephyr-workspace/modules | |
| lib/zephyr-workspace/bootloader | |
| ~/zephyr-sdk-0.17.2 | |
| key: zephyr-minimal-${{ hashFiles('west.yml') }}-${{ runner.os }}-v3 | |
| restore-keys: | | |
| zephyr-minimal-${{ hashFiles('west.yml') }}-${{ runner.os }}- | |
| zephyr-minimal- | |
| # Initialize dependencies with robust cache handling | |
| - name: Setup Dependencies (fprime, fprime-zephyr, zephyr) | |
| run: | | |
| echo "Setting up project dependencies..." | |
| # Check if we have cached content | |
| if [ "${{ steps.cache-submodules.outputs.cache-hit }}" == "true" ]; then | |
| echo "✓ Dependencies restored from cache" | |
| # Verify cached content is valid by checking for key files | |
| valid_cache=true | |
| if [ ! -f "lib/fprime/CMakeLists.txt" ]; then | |
| echo "⚠️ fprime cache invalid, will re-download" | |
| valid_cache=false | |
| fi | |
| if [ ! -f "lib/fprime-zephyr/CMakeLists.txt" ]; then | |
| echo "⚠️ fprime-zephyr cache invalid, will re-download" | |
| valid_cache=false | |
| fi | |
| if [ ! -f "lib/zephyr-workspace/zephyr/CMakeLists.txt" ]; then | |
| echo "⚠️ zephyr cache invalid, will re-download" | |
| valid_cache=false | |
| fi | |
| if [ "$valid_cache" = "true" ]; then | |
| echo "✓ All cached dependencies are valid, skipping download" | |
| exit 0 | |
| fi | |
| fi | |
| echo "Downloading dependencies manually..." | |
| # Remove any existing directories | |
| rm -rf lib/fprime lib/fprime-zephyr lib/zephyr-workspace/zephyr | |
| # Create directories | |
| mkdir -p lib/zephyr-workspace | |
| # Clone fprime | |
| echo "Cloning fprime..." | |
| git clone --depth 1 --branch v4.0.0 https://github.com/nasa/fprime.git lib/fprime | |
| # Clone fprime-zephyr | |
| echo "Cloning fprime-zephyr..." | |
| git clone --depth 1 https://github.com/fprime-community/fprime-zephyr.git lib/fprime-zephyr | |
| cd lib/fprime-zephyr | |
| git checkout 931354e26e39cb711f846e1ca8bb1337ede83b7c | |
| cd ../.. | |
| # Clone zephyr | |
| echo "Cloning zephyr..." | |
| git clone --depth 1 --branch v4.2.0 https://github.com/zephyrproject-rtos/zephyr.git lib/zephyr-workspace/zephyr | |
| echo "✓ All dependencies downloaded successfully" | |
| - name: Setup minimal Zephyr environment | |
| if: steps.cache-zephyr.outputs.cache-hit != 'true' | |
| run: | | |
| make zephyr-setup | |
| env: | |
| PIP_DISABLE_PIP_VERSION_CHECK: 1 | |
| PIP_NO_COMPILE: 1 | |
| - name: Verify Zephyr setup (from cache or fresh) | |
| run: | | |
| echo "=== Verification ===" | |
| echo "Git submodules status:" | |
| git submodule status | |
| echo "" | |
| echo "Zephyr workspace modules installed:" | |
| find lib/zephyr-workspace/modules lib/zephyr-workspace/bootloader -name '.git' -type d 2>/dev/null | wc -l || echo "0" | |
| echo "" | |
| echo "SDK toolchain:" | |
| if [ -f ~/zephyr-sdk-0.17.2/arm-zephyr-eabi/bin/arm-zephyr-eabi-gcc ]; then | |
| echo "✓ ARM toolchain installed" | |
| ls -lh ~/zephyr-sdk-0.17.2/arm-zephyr-eabi/bin/arm-zephyr-eabi-gcc | awk '{print "Size:", $5}' | |
| else | |
| echo "✗ ARM toolchain not found" | |
| fi | |
| - name: Display setup statistics | |
| run: | | |
| echo "=== Setup Statistics ===" | |
| echo "Git submodules cache hit: ${{ steps.cache-submodules.outputs.cache-hit }}" | |
| echo "Zephyr modules cache hit: ${{ steps.cache-zephyr.outputs.cache-hit }}" | |
| echo "" | |
| echo "Submodule sizes:" | |
| du -sh lib/fprime lib/fprime-zephyr lib/zephyr-workspace/zephyr 2>/dev/null || echo "Some submodules not found" | |
| echo "" | |
| echo "Zephyr modules size: $(du -sh lib/zephyr-workspace/modules lib/zephyr-workspace/bootloader 2>/dev/null | awk '{sum+=$1} END {print sum"M"}' || echo 'N/A')" | |
| echo "SDK size: $(du -sh ~/zephyr-sdk-0.17.2 2>/dev/null | cut -f1 || echo 'N/A')" | |
| echo "Total modules count: $(find lib/zephyr-workspace/modules lib/zephyr-workspace/bootloader -name '.git' -type d 2>/dev/null | wc -l)" | |
| - name: Build for PROVES Flight Control Board v5c | |
| run: | | |
| # Skip both zephyr-setup and submodules since we cached them separately | |
| make build -o zephyr-setup -o submodules | |
| - name: Upload build artifacts | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: firmware-v5c | |
| path: | | |
| build-artifacts/zephyr.uf2 | |
| build-artifacts/zephyr.elf | |
| build-artifacts/zephyr.hex | |
| build-artifacts/zephyr.bin | |
| retention-days: 30 | |
| - name: Display build statistics | |
| if: success() | |
| run: | | |
| echo "=== Build Statistics ===" | |
| if [ -f build-artifacts/zephyr.uf2 ]; then | |
| echo "Firmware size: $(ls -lh build-artifacts/zephyr.uf2 | awk '{print $5}')" | |
| fi | |
| echo "" | |
| echo "Memory usage:" | |
| cat build-fprime-automatic-zephyr/zephyr/zephyr.stat 2>/dev/null || echo "Stats not available" |