ci: Fix GitHub Actions workflows and update MSRV to 1.83 #12
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.83" | |
| # Fix __rust_probestack undefined symbol with Wasmer 6.0 on Linux | |
| RUSTFLAGS: "-C probe-stack=none" | |
| 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 --workspace | |
| # 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 --workspace -- -W clippy::all | |
| # Note: Not using -D warnings yet due to legacy code | |
| # Will be enabled incrementally | |
| # 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 --workspace | |
| - name: Build release | |
| run: cargo build --workspace --release | |
| # 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 --workspace | |
| 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 new crates | |
| run: | | |
| cargo test -p aingle_graph | |
| cargo test -p aingle_logic | |
| cargo test -p aingle_zk | |
| cargo test -p aingle_cortex | |
| cargo test -p aingle_contracts | |
| cargo test -p hope_agents | |
| cargo test -p titans_memory | |
| # 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 --workspace --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 benchmarks | |
| run: cargo bench --workspace -- --noplot | |
| continue-on-error: true | |
| # 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 --workspace --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 --workspace | |
| - 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 | |
| - name: Check hw_wallet feature | |
| run: cargo check -p aingle_minimal --features hw_wallet | |
| continue-on-error: true # HID may require USB permissions | |
| - name: Check new crates | |
| run: | | |
| cargo check -p aingle_cortex | |
| cargo check -p aingle_zk | |
| cargo check -p aingle_contracts | |
| cargo check -p aingle_viz | |
| cargo check -p aingle_graph | |
| cargo check -p aingle_logic | |
| # 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!" |