blstrs 0.7.1

High performance implementation of BLS12 381
Documentation
name: CI

on:
  pull_request:
  push:
    branches: master

env:
  MSRV: 1.56.1
  RUSTFLAGS: "-Dwarnings"
  CARGO_INCREMENTAL: 0
  RUST_BACKTRACE: 1

jobs:
  set-msrv:
    runs-on: ubuntu-latest
    outputs:
      msrv: ${{ steps.msrv.outputs.msrv }}
    steps:
      - uses: actions/checkout@v2
      - id: msrv
        run: echo "::set-output name=msrv::$(echo $MSRV)"

  # NOTE vmx 2022-06-14: currently doesn't work, hence run it on CircleCI
  # for now.
  #linux_foreign:
  #  strategy:
  #    matrix:
  #      include:
  #        # 64-bit Linux/arm64
  #        - target: aarch64-unknown-linux-gnu
  #          rust: nightly
  #          arch: aarch64
  #
  #  runs-on: ubuntu-18.04
  #  steps:
  #    - uses: actions/checkout@v2
  #    - uses: uraimo/run-on-arch-action@v2.1.1
  #      name: Run commands
  #      id: runcmd
  #      with:
  #        arch: aarch64
  #        distro: ubuntu18.04
  #
  #        # Not required, but speeds up builds by storing container images in
  #        # a GitHub package registry.
  #        githubToken: ${{ github.token }}
  #
  #        install: |
  #          apt-get update -q -y
  #          apt-get install -q -y ocl-icd-opencl-dev curl build-essential
  #          curl https://sh.rustup.rs -sSf | sh -s -- --profile minimal --default-toolchain ${{ matrix.rust }} -y
  #          source $HOME/.cargo/env
  #
  #        run: |
  #          $HOME/.cargo/bin/cargo test --release --target ${{ matrix.target }}
  #          $HOME/.cargo/bin/cargo test --release --features portable --target ${{ matrix.target }}

  # Linux tests
  linux:
    needs: set-msrv
    strategy:
      matrix:
        include:
          # 32-bit Linux/x86
          - target: i686-unknown-linux-gnu
            rust: ${{needs.set-msrv.outputs.msrv}}
            deps: sudo apt update && sudo apt install gcc-multilib
          - target: i686-unknown-linux-gnu
            rust: stable
            deps: sudo apt update && sudo apt install gcc-multilib

          # 64-bit Linux/x86_64
          - target: x86_64-unknown-linux-gnu
            rust: ${{needs.set-msrv.outputs.msrv}}
          - target: x86_64-unknown-linux-gnu
            rust: stable

    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: actions-rs/toolchain@v1
        with:
          profile: minimal
          toolchain: ${{ matrix.rust }}
          target: ${{ matrix.target }}
          override: true
      - name: Install opencl
        run: sudo apt-get install -y ocl-icd-opencl-dev
      - run: ${{ matrix.deps }}
      - run: cargo test --target ${{ matrix.target }}
      - run: cargo test --target ${{ matrix.target }} --features portable

  # macOS tests
  macos:
    needs: set-msrv
    strategy:
      matrix:
        toolchain:
          - ${{needs.set-msrv.outputs.msrv}}
          - stable

    runs-on: macos-latest
    steps:
      - uses: actions/checkout@v2
      - uses: actions-rs/toolchain@v1
        with:
          profile: minimal
          toolchain: ${{ matrix.toolchain }}
          target: x86_64-apple-darwin
          override: true
      - run: cargo test
      - run: cargo test --features portable

 # Windows tests
  windows:
    needs: set-msrv
    strategy:
      matrix:
        include:
          # 64-bit Windows (MSVC)
          - target: x86_64-pc-windows-msvc
            toolchain: stable

    runs-on: windows-latest
    steps:
      - uses: actions/checkout@v2
      - uses: actions-rs/toolchain@v1
        with:
          profile: minimal
          toolchain: ${{ matrix.toolchain }}
          target: ${{ matrix.target }}
          override: true
      - uses: msys2/setup-msys2@v2
      - run: cargo test --target ${{ matrix.target }}
      - run: cargo test --target ${{ matrix.target }} --features portable

  clippy_check:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@master
      - run: rustup component add clippy
      - uses: actions-rs/clippy-check@v1
        with:
          token: ${{ secrets.GITHUB_TOKEN }}
          args: --all-features          

  check_fmt_and_docs:
    name: Checking fmt and docs
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@master

    - uses: actions-rs/toolchain@v1
      with:
          profile: minimal
          toolchain: nightly
          override: true
          components: rustfmt

    - name: setup
      run: |
        rustup component add rustfmt
        rustc --version
    - name: fmt
      run: cargo fmt --all -- --check

    - name: Docs
      run: cargo doc