Skip to content

release: AIngle v0.6.3 — total data integrity hardening #140

release: AIngle v0.6.3 — total data integrity hardening

release: AIngle v0.6.3 — total data integrity hardening #140

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