🌙 UFFS Tier 2 Nightly CI #202
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
| # UFFS Tier 2 Nightly CI | |
| # Copyright 2025-2026 Robert Nio | |
| # SPDX-License-Identifier: MIT OR Apache-2.0 | |
| # | |
| # Tier 2 keeps the slower nightly checks out of the PR path while still | |
| # exercising the important scheduled/on-demand validation gates. | |
| name: 🌙 UFFS Tier 2 Nightly CI | |
| on: | |
| schedule: | |
| - cron: '0 6 * * 1' | |
| workflow_dispatch: | |
| permissions: | |
| contents: read | |
| env: | |
| CARGO_TERM_COLOR: always | |
| RUST_BACKTRACE: 1 | |
| CARGO_TARGET_DIR: target | |
| # Disable sccache in CI - it's configured in .cargo/config.toml for local dev | |
| # but not installed on GitHub Actions runners | |
| RUSTC_WRAPPER: "" | |
| # Limit parallel jobs to reduce memory pressure during Polars compilation | |
| # GitHub Actions runners have limited RAM; too many parallel rustc processes | |
| # can trigger OOM killer or runner preemption (exit code 143) | |
| CARGO_BUILD_JOBS: 2 | |
| jobs: | |
| coverage: | |
| name: Tier 2 / Coverage | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 60 | |
| steps: | |
| - name: Free up disk space | |
| run: | | |
| echo "🧹 Freeing up disk space for Polars compilation..." | |
| sudo rm -rf /usr/share/dotnet | |
| sudo rm -rf /usr/local/lib/android | |
| sudo rm -rf /opt/ghc | |
| sudo rm -rf /opt/hostedtoolcache/CodeQL | |
| sudo docker image prune --all --force || true | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| - name: Install nightly Rust toolchain | |
| uses: dtolnay/rust-toolchain@nightly | |
| with: | |
| components: llvm-tools-preview | |
| - name: Cache dependencies | |
| uses: Swatinem/rust-cache@v2 | |
| - name: Install cargo-llvm-cov | |
| uses: taiki-e/install-action@cargo-llvm-cov | |
| - name: Generate coverage report | |
| run: cargo llvm-cov --workspace --all-features --lcov --output-path lcov.info | |
| - name: Upload coverage to Codecov | |
| uses: codecov/codecov-action@v4 | |
| with: | |
| files: lcov.info | |
| token: ${{ secrets.CODECOV_TOKEN }} | |
| fail_ci_if_error: false | |
| verbose: true | |
| cross-check: | |
| name: Tier 2 / Windows Cross-Check | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 30 | |
| steps: | |
| - name: Free up disk space | |
| run: | | |
| echo "🧹 Freeing up disk space for Polars compilation..." | |
| sudo rm -rf /usr/share/dotnet | |
| sudo rm -rf /usr/local/lib/android | |
| sudo rm -rf /opt/ghc | |
| sudo rm -rf /opt/hostedtoolcache/CodeQL | |
| sudo docker image prune --all --force || true | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| - name: Install nightly Rust toolchain | |
| uses: dtolnay/rust-toolchain@nightly | |
| with: | |
| targets: x86_64-pc-windows-msvc | |
| - name: Cache dependencies | |
| uses: Swatinem/rust-cache@v2 | |
| - name: Run Windows cross-check | |
| run: cargo check --workspace --all-features --target x86_64-pc-windows-msvc | |
| build-validation: | |
| name: Tier 2 / Build Validation | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 60 | |
| steps: | |
| - name: Free up disk space | |
| run: | | |
| echo "🧹 Freeing up disk space for Polars compilation..." | |
| sudo rm -rf /usr/share/dotnet | |
| sudo rm -rf /usr/local/lib/android | |
| sudo rm -rf /opt/ghc | |
| sudo rm -rf /opt/hostedtoolcache/CodeQL | |
| sudo docker image prune --all --force || true | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| - name: Install nightly Rust toolchain | |
| uses: dtolnay/rust-toolchain@nightly | |
| - name: Cache dependencies | |
| uses: Swatinem/rust-cache@v2 | |
| - name: Run build validation | |
| run: cargo build --workspace --all-features --bins | |
| udeps: | |
| name: Tier 2 / cargo-udeps | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 60 | |
| steps: | |
| - name: Free up disk space | |
| run: | | |
| echo "🧹 Freeing up disk space for Polars compilation..." | |
| sudo rm -rf /usr/share/dotnet | |
| sudo rm -rf /usr/local/lib/android | |
| sudo rm -rf /opt/ghc | |
| sudo rm -rf /opt/hostedtoolcache/CodeQL | |
| sudo docker image prune --all --force || true | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| - name: Install nightly Rust toolchain | |
| uses: dtolnay/rust-toolchain@nightly | |
| - name: Cache dependencies | |
| uses: Swatinem/rust-cache@v2 | |
| - name: Install cargo-udeps | |
| uses: taiki-e/install-action@cargo-udeps | |
| - name: Run cargo-udeps | |
| run: cargo +nightly udeps --workspace --all-targets --all-features | |
| miri: | |
| name: Tier 2 / Miri | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 90 | |
| steps: | |
| - name: Free up disk space | |
| run: | | |
| echo "🧹 Freeing up disk space for Polars compilation..." | |
| sudo rm -rf /usr/share/dotnet | |
| sudo rm -rf /usr/local/lib/android | |
| sudo rm -rf /opt/ghc | |
| sudo rm -rf /opt/hostedtoolcache/CodeQL | |
| sudo docker image prune --all --force || true | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| - name: Install nightly Rust toolchain | |
| uses: dtolnay/rust-toolchain@nightly | |
| with: | |
| components: miri | |
| - name: Cache dependencies | |
| uses: Swatinem/rust-cache@v2 | |
| - name: Run focused Miri coverage | |
| env: | |
| MIRIFLAGS: -Zmiri-disable-isolation | |
| run: | | |
| # These raw persistence tests use temp files, so Miri needs isolation disabled. | |
| # Keep coverage focused on the subset that runs under Miri today; the zstd-backed | |
| # compressed raw test uses foreign-function calls that Miri does not support. | |
| cargo +nightly miri test -p uffs-mft raw::tests::test_header_roundtrip -- --exact | |
| cargo +nightly miri test -p uffs-mft raw::tests::test_load_header_only -- --exact | |
| cargo +nightly miri test -p uffs-mft raw::tests::test_save_load_uncompressed -- --exact | |
| cargo +nightly miri test -p uffs-mft raw::tests::test_raw_compat_mode -- --exact | |
| tier-2-summary: | |
| name: Tier 2 / Summary | |
| runs-on: ubuntu-latest | |
| needs: [coverage, cross-check, build-validation, udeps, miri] | |
| if: always() | |
| timeout-minutes: 5 | |
| steps: | |
| - name: Check pipeline success | |
| run: | | |
| if [[ "${{ needs.coverage.result }}" == "success" && \ | |
| "${{ needs.cross-check.result }}" == "success" && \ | |
| "${{ needs.build-validation.result }}" == "success" && \ | |
| "${{ needs.udeps.result }}" == "success" && \ | |
| "${{ needs.miri.result }}" == "success" ]]; then | |
| echo "✅ All Tier 2 nightly checks passed!" | |
| else | |
| echo "❌ Some Tier 2 nightly checks failed - review above" | |
| exit 1 | |
| fi | |
| - name: Create summary | |
| if: success() | |
| run: | | |
| echo "## ✅ UFFS Tier 2 Nightly CI Passed" >> $GITHUB_STEP_SUMMARY | |
| echo "" >> $GITHUB_STEP_SUMMARY | |
| echo "| Check | Status |" >> $GITHUB_STEP_SUMMARY | |
| echo "|-------|--------|" >> $GITHUB_STEP_SUMMARY | |
| echo "| Coverage | ✅ |" >> $GITHUB_STEP_SUMMARY | |
| echo "| Windows cross-check | ✅ |" >> $GITHUB_STEP_SUMMARY | |
| echo "| Build validation | ✅ |" >> $GITHUB_STEP_SUMMARY | |
| echo "| cargo-udeps | ✅ |" >> $GITHUB_STEP_SUMMARY | |
| echo "| Miri | ✅ |" >> $GITHUB_STEP_SUMMARY |