release: AIngle v0.6.3 — total data integrity hardening #140
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: AIngle CI | |
| on: | |
| push: | |
| branches: [ main, develop ] | |
| pull_request: | |
| branches: [ main, develop ] | |
| env: | |
| CARGO_TERM_COLOR: always | |
| RUST_BACKTRACE: 1 | |
| MSRV: "1.85" | |
| jobs: | |
| # MSRV (Minimum Supported Rust Version) check | |
| msrv: | |
| name: MSRV Check | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - name: Install Rust ${{ env.MSRV }} | |
| uses: dtolnay/rust-toolchain@master | |
| with: | |
| toolchain: ${{ env.MSRV }} | |
| - name: Install system dependencies | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y libsodium-dev libssl-dev pkg-config | |
| - name: Cache cargo registry | |
| uses: actions/cache@v5 | |
| with: | |
| path: | | |
| ~/.cargo/registry | |
| ~/.cargo/git | |
| target | |
| key: ${{ runner.os }}-cargo-msrv-${{ hashFiles('**/Cargo.lock') }} | |
| restore-keys: | | |
| ${{ runner.os }}-cargo-msrv- | |
| - name: Check MSRV | |
| run: cargo check -p aingle_minimal | |
| # Format check | |
| fmt: | |
| name: Format Check | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - name: Install Rust | |
| uses: dtolnay/rust-toolchain@stable | |
| with: | |
| components: rustfmt | |
| - name: Check formatting | |
| run: cargo fmt --all -- --check | |
| # Clippy lints | |
| clippy: | |
| name: Clippy | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - name: Install Rust | |
| uses: dtolnay/rust-toolchain@stable | |
| with: | |
| components: clippy | |
| - name: Install system dependencies | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y libsodium-dev libssl-dev pkg-config | |
| - name: Cache cargo registry | |
| uses: actions/cache@v5 | |
| with: | |
| path: | | |
| ~/.cargo/registry | |
| ~/.cargo/git | |
| target | |
| key: ${{ runner.os }}-cargo-clippy-${{ hashFiles('**/Cargo.lock') }} | |
| restore-keys: | | |
| ${{ runner.os }}-cargo-clippy- | |
| - name: Run Clippy | |
| run: cargo clippy -p aingle_minimal --features rest -- -W clippy::all | |
| # Build check | |
| build: | |
| name: Build | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - name: Install Rust | |
| uses: dtolnay/rust-toolchain@stable | |
| - name: Install system dependencies | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y libsodium-dev libssl-dev pkg-config | |
| - name: Cache cargo registry | |
| uses: actions/cache@v5 | |
| with: | |
| path: | | |
| ~/.cargo/registry | |
| ~/.cargo/git | |
| target | |
| key: ${{ runner.os }}-cargo-build-${{ hashFiles('**/Cargo.lock') }} | |
| restore-keys: | | |
| ${{ runner.os }}-cargo-build- | |
| - name: Build debug | |
| run: cargo build -p aingle_minimal --features rest | |
| - name: Build release | |
| run: cargo build -p aingle_minimal --release --features rest | |
| # Unit tests | |
| test: | |
| name: Tests | |
| runs-on: ubuntu-latest | |
| needs: build | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - name: Install Rust | |
| uses: dtolnay/rust-toolchain@stable | |
| - name: Install system dependencies | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y libsodium-dev libssl-dev pkg-config | |
| - name: Cache cargo registry | |
| uses: actions/cache@v5 | |
| with: | |
| path: | | |
| ~/.cargo/registry | |
| ~/.cargo/git | |
| target | |
| key: ${{ runner.os }}-cargo-test-${{ hashFiles('**/Cargo.lock') }} | |
| restore-keys: | | |
| ${{ runner.os }}-cargo-test- | |
| - name: Run tests | |
| run: cargo test -p aingle_minimal --features rest | |
| env: | |
| RUST_LOG: info | |
| # Test with specific features (separate job to isolate failures) | |
| test-features: | |
| name: Test Features | |
| runs-on: ubuntu-latest | |
| needs: test | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - name: Install Rust | |
| uses: dtolnay/rust-toolchain@stable | |
| - name: Install system dependencies | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y libsodium-dev libssl-dev pkg-config libdbus-1-dev | |
| - name: Cache cargo registry | |
| uses: actions/cache@v5 | |
| with: | |
| path: | | |
| ~/.cargo/registry | |
| ~/.cargo/git | |
| target | |
| key: ${{ runner.os }}-cargo-test-features-${{ hashFiles('**/Cargo.lock') }} | |
| restore-keys: | | |
| ${{ runner.os }}-cargo-test-features- | |
| - name: Test aingle_minimal with sqlite | |
| run: cargo test -p aingle_minimal --features sqlite | |
| - name: Test aingle_minimal with coap | |
| run: cargo test -p aingle_minimal --features coap | |
| - name: Test aingle_minimal with quic | |
| run: cargo test -p aingle_minimal --features quic | |
| - name: Test aingle_minimal with rest | |
| run: cargo test -p aingle_minimal --features rest | |
| - name: Test aingle_minimal with all transports | |
| run: cargo test -p aingle_minimal --features "sqlite,coap,quic,webrtc,rest" | |
| # Note: Other crates (aingle_graph, kaneru, ineru, etc.) | |
| # will be added to CI once they pass all checks independently | |
| # Security audit for dependencies | |
| security-audit: | |
| name: Security Audit | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - name: Install Rust | |
| uses: dtolnay/rust-toolchain@stable | |
| - name: Install cargo-audit | |
| run: cargo install cargo-audit | |
| - name: Run security audit | |
| run: cargo audit | |
| continue-on-error: true # Advisory only, don't block CI | |
| # Code coverage (optional, doesn't block CI) | |
| coverage: | |
| name: Code Coverage | |
| runs-on: ubuntu-latest | |
| needs: test | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - name: Install Rust | |
| uses: dtolnay/rust-toolchain@stable | |
| with: | |
| components: llvm-tools-preview | |
| - name: Install system dependencies | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y libsodium-dev libssl-dev pkg-config | |
| - name: Install cargo-llvm-cov | |
| run: cargo install cargo-llvm-cov | |
| - name: Cache cargo registry | |
| uses: actions/cache@v5 | |
| with: | |
| path: | | |
| ~/.cargo/registry | |
| ~/.cargo/git | |
| target | |
| key: ${{ runner.os }}-cargo-coverage-${{ hashFiles('**/Cargo.lock') }} | |
| restore-keys: | | |
| ${{ runner.os }}-cargo-coverage- | |
| - name: Generate coverage report | |
| run: cargo llvm-cov -p aingle_minimal --lcov --output-path lcov.info | |
| continue-on-error: true | |
| - name: Upload coverage to Codecov | |
| uses: codecov/codecov-action@v5 | |
| with: | |
| files: lcov.info | |
| fail_ci_if_error: false | |
| continue-on-error: true | |
| # Benchmarks (informational only, runs only on main) | |
| bench: | |
| name: Benchmarks | |
| runs-on: ubuntu-latest | |
| if: github.event_name == 'push' && github.ref == 'refs/heads/main' | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - name: Install Rust | |
| uses: dtolnay/rust-toolchain@stable | |
| - name: Install system dependencies | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y libsodium-dev libssl-dev pkg-config | |
| - name: Cache cargo registry | |
| uses: actions/cache@v5 | |
| with: | |
| path: | | |
| ~/.cargo/registry | |
| ~/.cargo/git | |
| target | |
| key: ${{ runner.os }}-cargo-bench-${{ hashFiles('**/Cargo.lock') }} | |
| restore-keys: | | |
| ${{ runner.os }}-cargo-bench- | |
| - name: Run aingle_minimal benchmarks | |
| run: cargo bench -p aingle_minimal --features "sqlite,coap" -- --noplot | |
| continue-on-error: true | |
| - name: Benchmark Summary | |
| run: | | |
| echo "## Benchmark Summary" >> $GITHUB_STEP_SUMMARY | |
| echo "" >> $GITHUB_STEP_SUMMARY | |
| echo "Benchmarks ran successfully. Full results available in job logs." >> $GITHUB_STEP_SUMMARY | |
| echo "" >> $GITHUB_STEP_SUMMARY | |
| echo "**Crates benchmarked:**" >> $GITHUB_STEP_SUMMARY | |
| echo "- aingle_minimal (Node, CoAP, Gossip, Storage)" >> $GITHUB_STEP_SUMMARY | |
| # Documentation build | |
| docs: | |
| name: Documentation | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - name: Install Rust | |
| uses: dtolnay/rust-toolchain@stable | |
| - name: Install system dependencies | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y libsodium-dev libssl-dev pkg-config | |
| - name: Cache cargo registry | |
| uses: actions/cache@v5 | |
| with: | |
| path: | | |
| ~/.cargo/registry | |
| ~/.cargo/git | |
| target | |
| key: ${{ runner.os }}-cargo-docs-${{ hashFiles('**/Cargo.lock') }} | |
| restore-keys: | | |
| ${{ runner.os }}-cargo-docs- | |
| - name: Build documentation | |
| run: cargo doc -p aingle_minimal --no-deps | |
| # Feature combinations check | |
| feature-check: | |
| name: Feature Combinations | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - name: Install Rust | |
| uses: dtolnay/rust-toolchain@stable | |
| - name: Install system dependencies | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y libsodium-dev libssl-dev pkg-config libdbus-1-dev | |
| - name: Cache cargo registry | |
| uses: actions/cache@v5 | |
| with: | |
| path: | | |
| ~/.cargo/registry | |
| ~/.cargo/git | |
| target | |
| key: ${{ runner.os }}-cargo-features-${{ hashFiles('**/Cargo.lock') }} | |
| restore-keys: | | |
| ${{ runner.os }}-cargo-features- | |
| - name: Check default features | |
| run: cargo check -p aingle_minimal | |
| - name: Check aingle_minimal features | |
| run: | | |
| cargo check -p aingle_minimal --features sqlite | |
| cargo check -p aingle_minimal --features coap | |
| cargo check -p aingle_minimal --features smart_agents | |
| - name: Check transport features | |
| run: | | |
| cargo check -p aingle_minimal --features webrtc | |
| cargo check -p aingle_minimal --features ble | |
| cargo check -p aingle_minimal --features quic | |
| cargo check -p aingle_minimal --features rest | |
| - name: Check hw_wallet feature | |
| run: cargo check -p aingle_minimal --features hw_wallet | |
| continue-on-error: true # HID may require USB permissions | |
| # All required checks must pass | |
| ci-success: | |
| name: CI Success | |
| runs-on: ubuntu-latest | |
| needs: [msrv, fmt, clippy, build, test, test-features, docs, feature-check] | |
| if: always() | |
| steps: | |
| - name: Check all jobs passed | |
| run: | | |
| echo "Job results:" | |
| echo " msrv: ${{ needs.msrv.result }}" | |
| echo " fmt: ${{ needs.fmt.result }}" | |
| echo " clippy: ${{ needs.clippy.result }}" | |
| echo " build: ${{ needs.build.result }}" | |
| echo " test: ${{ needs.test.result }}" | |
| echo " test-features: ${{ needs.test-features.result }}" | |
| echo " docs: ${{ needs.docs.result }}" | |
| echo " feature-check: ${{ needs.feature-check.result }}" | |
| echo "" | |
| # Check required jobs | |
| if [ "${{ needs.msrv.result }}" != "success" ]; then | |
| echo "::error::MSRV check failed" | |
| exit 1 | |
| fi | |
| if [ "${{ needs.fmt.result }}" != "success" ]; then | |
| echo "::error::Format check failed" | |
| exit 1 | |
| fi | |
| if [ "${{ needs.clippy.result }}" != "success" ]; then | |
| echo "::error::Clippy check failed" | |
| exit 1 | |
| fi | |
| if [ "${{ needs.build.result }}" != "success" ]; then | |
| echo "::error::Build failed" | |
| exit 1 | |
| fi | |
| if [ "${{ needs.test.result }}" != "success" ]; then | |
| echo "::error::Tests failed" | |
| exit 1 | |
| fi | |
| if [ "${{ needs.test-features.result }}" != "success" ]; then | |
| echo "::error::Feature tests failed" | |
| exit 1 | |
| fi | |
| if [ "${{ needs.docs.result }}" != "success" ]; then | |
| echo "::error::Documentation build failed" | |
| exit 1 | |
| fi | |
| if [ "${{ needs.feature-check.result }}" != "success" ]; then | |
| echo "::error::Feature check failed" | |
| exit 1 | |
| fi | |
| echo "" | |
| echo "All required CI checks passed!" |