trussed 0.2.0

Modern Cryptographic Firmware
Documentation
name: CI

on:
  pull_request:
    branches: [main]
  push:
    branches: [main]

jobs:
  build:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        target:
          - x86_64-unknown-linux-gnu
          - thumbv7em-none-eabi

    steps:
      - name: Checkout repository
        uses: actions/checkout@v2

      - name: Install Rust toolchain
        run: |
          rustup show
          rustup target add ${{ matrix.target }}

      - name: Install build dependencies
        run: >
          sudo apt-get update -y -qq &&
          sudo apt-get install -y -qq llvm libc6-dev-i386 libclang-dev

      - uses: fiam/arm-none-eabi-gcc@v1
        with:
          release: "9-2020-q2"

      - name: Build
        run: cargo build --workspace --target ${{ matrix.target }}

      - name: Check all targets without default features
        run: |
          cargo check --workspace --all-targets --no-default-features
          cargo check --package trussed-core --all-targets --no-default-features
        if: matrix.target == 'x86_64-unknown-linux-gnu'

      - name: Check all targets with only one client feature
        run: |
          for client in attestation certificate crypto counter filesystem management ui
          do
            for package in trussed-core trussed
            do
              cargo check --package ${package} --all-targets --no-default-features --features ${client}-client
            done
          done
        if: matrix.target == 'x86_64-unknown-linux-gnu'

      - name: Check all targets with only one mechanism feature
        run: |
          # trussed-core + trussed
          for mechanism in \
            aes256-cbc aes256-gcm chacha8-poly1305 ed255 hmac-blake2s hmac-sha1 hmac-sha256 hmac-sha512 \
            p256 p384 p521 sha256 shared-secret tdes totp trng x255
          do
            for package in trussed-core trussed
            do
              echo "${package}: ${mechanism}"
              cargo check --package ${package} --all-targets --no-default-features --features crypto-client,${mechanism}
            done
          done
          # trussed-core only
          for mechanism in \
            brainpoolp256r1 brainpoolp384r1 brainpoolp512r1 mldsa44 rsa2048 rsa3072 rsa4096 secp256k1
          do
            echo "trussed-core: ${mechanism}"
            cargo check --package trussed-core --all-targets --no-default-features --features crypto-client,${mechanism}
          done
        if: matrix.target == 'x86_64-unknown-linux-gnu'

      - name: Check all targets with default features
        run: |
          cargo check --workspace --all-targets
          cargo check --package trussed-core --all-targets
        if: matrix.target == 'x86_64-unknown-linux-gnu'

      - name: Check all targets with default features and logging
        run: |
          cargo check --all-targets --features log-all
        if: matrix.target == 'x86_64-unknown-linux-gnu'

      - name: Check all features and targets
        run: |
          cargo check --workspace --all-features --all-targets
          cargo check --package trussed-core --all-targets --all-features
        if: matrix.target == 'x86_64-unknown-linux-gnu'

      - name: Run tests
        run: cargo test --workspace
        if: matrix.target == 'x86_64-unknown-linux-gnu'

      - name: Run tests with all features
        run: cargo test --workspace --all-features
        if: matrix.target == 'x86_64-unknown-linux-gnu'

      - name: Check formatting
        run: cargo fmt --all -- --check
        if: matrix.target == 'x86_64-unknown-linux-gnu'

      - name: Check clippy lints
        run: make clippy
        if: matrix.target == 'x86_64-unknown-linux-gnu'

      - name: Check documentation
        run: |
          export RUSTDOCFLAGS="-D warnings"
          cargo doc --no-deps --workspace --all-features
        if: matrix.target == 'x86_64-unknown-linux-gnu'