name: CI on: push: branches: [ main, develop ] pull_request: branches: [ main ] env: CARGO_TERM_COLOR: always RUST_BACKTRACE: 1 jobs: format: name: Format Check runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: dtolnay/rust-toolchain@stable with: components: rustfmt - run: cargo fmt --all -- --check clippy: name: Clippy Check runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: dtolnay/rust-toolchain@stable with: components: clippy - uses: Swatinem/rust-cache@v2 - name: Run Clippy run: | cargo clippy --workspace --all-features -- \ -W clippy::all \ -W clippy::pedantic \ -A clippy::module_name_repetitions \ -A clippy::similar_names \ -A clippy::too_many_lines \ -A clippy::too_many_arguments \ -A clippy::must_use_candidate \ -A clippy::missing_errors_doc \ -A clippy::missing_panics_doc \ -A clippy::doc_markdown \ -A clippy::cast_possible_truncation \ -A clippy::cast_sign_loss \ -A clippy::cast_precision_loss build: name: Build (${{ matrix.os }}) runs-on: ${{ matrix.os }} strategy: fail-fast: false matrix: os: [ubuntu-latest, macos-latest] steps: - uses: actions/checkout@v4 - uses: dtolnay/rust-toolchain@stable - uses: Swatinem/rust-cache@v2 - name: Build workspace run: cargo build --workspace test: name: Test (${{ matrix.os }}) runs-on: ${{ matrix.os }} needs: [build] strategy: fail-fast: false matrix: os: [ubuntu-latest, macos-latest] steps: - uses: actions/checkout@v4 - uses: dtolnay/rust-toolchain@stable - uses: Swatinem/rust-cache@v2 - name: Run tests run: cargo test --workspace env: RUST_BACKTRACE: 1 build-cpu-explicit: name: Build CPU-Only (Explicit) runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: dtolnay/rust-toolchain@stable - uses: Swatinem/rust-cache@v2 - name: Build (CPU features only) run: cargo build --workspace --no-default-features --features cpu - name: Test (CPU features only) run: cargo test --workspace --no-default-features --features cpu env: RUST_BACKTRACE: 1 ci-success: name: CI Success runs-on: ubuntu-latest needs: [format, clippy, build, test, build-cpu-explicit] if: always() steps: - name: Check all jobs passed run: | if [ "${{ needs.format.result }}" != "success" ] || \ [ "${{ needs.clippy.result }}" != "success" ] || \ [ "${{ needs.build.result }}" != "success" ] || \ [ "${{ needs.test.result }}" != "success" ] || \ [ "${{ needs.build-cpu-explicit.result }}" != "success" ]; then echo "One or more required jobs failed" exit 1 fi echo "All required CI checks passed!"