name: CI
on:
push:
branches: [master, main]
pull_request:
branches: [master, main, develop, 'release/**']
env:
RUST_BACKTRACE: 1
jobs:
test-native:
name: Test Suite (Native Precision)
runs-on: ubuntu-latest
strategy:
matrix:
rust: [stable, nightly]
steps:
- uses: actions/checkout@v6
- name: Install Rust
uses: dtolnay/rust-toolchain@master
with:
toolchain: ${{ matrix.rust }}
components: rustfmt, clippy
- name: Cache cargo registry
uses: actions/cache@v5
with:
path: ~/.cargo/registry
key: ${{ runner.os }}-cargo-registry-${{ hashFiles('**/Cargo.lock') }}
- name: Cache cargo index
uses: actions/cache@v5
with:
path: ~/.cargo/git
key: ${{ runner.os }}-cargo-git-${{ hashFiles('**/Cargo.lock') }}
- name: Cache cargo build
uses: actions/cache@v5
with:
path: target
key: ${{ runner.os }}-cargo-build-target-${{ hashFiles('**/Cargo.lock') }}
- name: Install system dependencies
run: |
sudo apt-get update
sudo apt-get install -y libgmp-dev libmpfr-dev
- name: Run tests with native precision
run: cargo test --workspace --features native-precision
- name: Run clippy
run: cargo clippy --workspace --features native-precision -- -D warnings
if: matrix.rust == 'stable'
- name: Check formatting
run: cargo fmt --all -- --check
if: matrix.rust == 'stable'
- name: Verify workflow crate configuration
run: ./scripts/verify-workflow-crates.sh
if: matrix.rust == 'stable'
test-wasm-compat:
name: Test Suite (WASM-Compatible Precision)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: Install Rust
uses: dtolnay/rust-toolchain@stable
with:
components: rustfmt, clippy
- name: Cache cargo registry
uses: actions/cache@v5
with:
path: ~/.cargo/registry
key: ${{ runner.os }}-cargo-wasm-compat-${{ hashFiles('**/Cargo.lock') }}
- name: Run tests with WASM-compatible precision
run: cargo test --workspace --features high-precision
- name: Test individual crates
run: |
cargo test -p amari-core --features high-precision
cargo test -p amari-tropical --features high-precision
cargo test -p amari-dual --features high-precision
cargo test -p amari-network --features high-precision
cargo test -p amari-relativistic --features high-precision
wasm:
name: WASM Build
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: Install Rust
uses: dtolnay/rust-toolchain@stable
- name: Install and verify WASM target
run: |
rustup target add wasm32-unknown-unknown
rustup target list --installed
rustup show
- name: Cache cargo registry
uses: actions/cache@v5
with:
path: |
~/.cargo/registry
~/.cargo/git
target
key: ${{ runner.os }}-cargo-wasm32-${{ hashFiles('**/Cargo.lock') }}
restore-keys: |
${{ runner.os }}-cargo-wasm32-
${{ runner.os }}-cargo-
- name: Install wasm-pack
run: curl https://rustwasm.github.io/wasm-pack/installer/init.sh -sSf | sh
- name: Check WASM compilation (individual crates)
run: |
echo "🔍 Checking WASM target availability..."
rustc --print target-list | grep wasm32
echo "🔍 Checking sysroot..."
rustc --target wasm32-unknown-unknown --print sysroot
echo "🔍 Testing basic WASM compilation..."
echo 'fn main() {}' > test.rs
rustc --target wasm32-unknown-unknown test.rs -o test.wasm
rm test.rs test.wasm
echo "✅ Basic WASM compilation works, checking crates..."
echo "🔍 Checking amari-core..."
cargo check -p amari-core --target wasm32-unknown-unknown --features high-precision -v
echo "🔍 Checking amari-tropical..."
cargo check -p amari-tropical --target wasm32-unknown-unknown --features high-precision -v
echo "🔍 Checking amari-dual..."
cargo check -p amari-dual --target wasm32-unknown-unknown --features high-precision -v
echo "🔍 Checking amari-network..."
cargo check -p amari-network --target wasm32-unknown-unknown --features high-precision -v
echo "🔍 Checking amari-relativistic..."
cargo check -p amari-relativistic --target wasm32-unknown-unknown --features high-precision -v
- name: Build WASM package
run: |
cd amari-wasm
echo "🏗️ Building WASM package with wasm-pack..."
# Try standard build first
if wasm-pack build --target web --out-dir pkg --scope amari --verbose; then
echo "✅ Standard WASM build succeeded"
else
echo "⚠️ Standard build failed, trying alternative approaches..."
# Clean target directory to avoid cache issues
cargo clean
# Try with explicit target installation and rebuild
echo "🔄 Reinstalling WASM target and trying again..."
rustup target remove wasm32-unknown-unknown || true
rustup target add wasm32-unknown-unknown
# Verify target is properly installed
rustup target list --installed | grep wasm32-unknown-unknown
# Try build again
if wasm-pack build --target web --out-dir pkg --scope amari --verbose; then
echo "✅ WASM build succeeded after target reinstall"
else
echo "❌ WASM build failed even after target reinstall"
echo "🔍 Target list:"
rustup target list --installed
echo "🔍 Toolchain info:"
rustup show
exit 1
fi
fi
- name: Test WASM package
run: |
cd amari-wasm
wasm-pack test --node
- name: Upload WASM artifacts
uses: actions/upload-artifact@v7
with:
name: wasm-package
path: amari-wasm/pkg/
benchmark:
name: Performance Benchmarks
runs-on: ubuntu-latest
if: github.event_name == 'push' && github.ref == 'refs/heads/master'
steps:
- uses: actions/checkout@v6
- name: Install Rust
uses: dtolnay/rust-toolchain@stable
- name: Run benchmarks
run: cargo bench --workspace 2>&1 | tee output.txt || echo "Benchmarks completed"
continue-on-error: true
- name: Store benchmark result
uses: benchmark-action/github-action-benchmark@v1
with:
tool: 'cargo'
output-file-path: output.txt
github-token: ${{ secrets.GITHUB_TOKEN }}
auto-push: true
continue-on-error: true
if: always()