gridiron 0.12.2

Rust finite field library with fixed size multi-word values.
Documentation
on:
  push:
    branches:
      - main
  pull_request:

name: Gridiron

jobs:
  check:
    name: Check
    runs-on: ubuntu-24.04
    strategy:
      matrix:
        rust_version:
          - stable
          - beta
          - 1.88.0 # MSRV
        limb_size:
          - limb31
          - limb62
    steps:
      - uses: actions/checkout@v6
      - uses: IronCoreLabs/rust-toolchain@v1
        with:
          toolchain: ${{ matrix.rust_version }}
      - uses: actions-rs/cargo@v1
        with:
          command: check
          args: --no-default-features --features ${{ matrix.limb_size }}

  build_linux:
    name: (Linux) Builds
    runs-on: ubuntu-24.04
    strategy:
      matrix:
        target:
          - aarch64-linux-android # Android x64
          - x86_64-unknown-linux-musl # Alpine Linux x86_64
          - wasm32-unknown-unknown
        limb_size:
          - limb31
          - limb62
        exclude:
          # WASM requires 31-bit limbs (no 64-bit integers in WASM32)
          - target: wasm32-unknown-unknown
            limb_size: limb62
    steps:
      - uses: actions/checkout@v6
      - uses: IronCoreLabs/rust-toolchain@v1
        with:
          targets: ${{ matrix.target }}
      - uses: actions-rs/cargo@v1
        with:
          use-cross: true
          command: build
          args: --release --target=${{ matrix.target }} --no-default-features --features ${{ matrix.limb_size }}

  build_macos:
    name: (OS X) Builds
    runs-on: macos-14
    strategy:
      matrix:
        target:
          - aarch64-apple-ios
          - x86_64-apple-darwin # 64-bit OSX
        limb_size:
          - limb31
          - limb62
    steps:
      - uses: actions/checkout@v6
      - uses: IronCoreLabs/rust-toolchain@v1
        with:
          targets: ${{ matrix.target }}
      - uses: actions-rs/cargo@v1
        with:
          use-cross: true
          command: build
          args: --release --target=${{ matrix.target }} --no-default-features --features ${{ matrix.limb_size }}

  build_win:
    name: (Windows) Builds
    runs-on: windows-2025
    strategy:
      matrix:
        target:
          - x86_64-pc-windows-msvc
        limb_size:
          - limb31
          - limb62
    steps:
      - uses: actions/checkout@v6
      - uses: IronCoreLabs/rust-toolchain@v1
        with:
          targets: ${{ matrix.target }}
      - uses: actions-rs/cargo@v1
        with:
          command: build
          args: --release --target=${{ matrix.target }} --no-default-features --features ${{ matrix.limb_size }}

  test:
    name: Test Suite
    runs-on: ubuntu-24.04
    strategy:
      matrix:
        rust_version:
          - stable
          - 1.88.0
        limb_size:
          - limb31
          - limb62
    steps:
      - uses: actions/checkout@v6
      - uses: IronCoreLabs/rust-toolchain@v1
        with:
          toolchain: ${{ matrix.rust_version }}
      - uses: actions-rs/cargo@v1
        with:
          command: test
          args: --no-default-features --features ${{ matrix.limb_size }}

  bench_build:
    name: Bench Compile
    runs-on: ubuntu-24.04
    strategy:
      matrix:
        rust_version:
          - stable
        limb_size:
          - limb31
          - limb62
    steps:
      - uses: actions/checkout@v6
      - uses: IronCoreLabs/rust-toolchain@v1
        with:
          toolchain: ${{ matrix.rust_version }}
      - run: cargo bench --no-run --no-default-features --features ${{ matrix.limb_size }}

  fmt:
    name: Rustfmt
    runs-on: ubuntu-24.04
    strategy:
      matrix:
        rust_version:
          - nightly
    steps:
      - uses: actions/checkout@v6
      - uses: IronCoreLabs/rust-toolchain@v1
        with:
          toolchain: ${{ matrix.rust_version }}
          components: rustfmt
      - uses: actions-rs/cargo@v1
        with:
          command: fmt
          args: --all -- --check
      - name: Cancel workflow
        if: failure()
        uses: andymckay/cancel-action@0.5