Skip to content

ci: Fix GitHub Actions workflows and update MSRV to 1.83 #12

ci: Fix GitHub Actions workflows and update MSRV to 1.83

ci: Fix GitHub Actions workflows and update MSRV to 1.83 #12

Workflow file for this run

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!"