rustls-ffi 0.9.2

Rustls bindings for non-Rust languages
Documentation
name: rustls-ffi

permissions:
  contents: read

on: [push, pull_request]

jobs:
  build:
    name: Build+test
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        # test a bunch of toolchains on ubuntu
        cc: [clang, gcc]
        rust:
          - stable
          - beta
          - nightly
          - 1.57.0 # MSRV - keep in sync with what rustls considers MSRV
        os: [ubuntu-18.04]
        # but only stable on macos/windows (slower platforms)
        include:
          - os: macos-latest
            cc: clang
            rust: stable
    steps:
      - name: Checkout sources
        uses: actions/checkout@v2
        with:
          persist-credentials: false

      - name: Install ${{ matrix.rust }} toolchain
        uses: actions-rs/toolchain@v1
        with:
          toolchain: ${{ matrix.rust }}
          override: true
      - env:
          CARGO_UNSTABLE_HTTP_REGISTRY: true
        run: make CC=${{ matrix.cc }} PROFILE=release test

  valgrind:
    name: Valgrind
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
        with:
          persist-credentials: false
      - name: Install valgrind
        run: sudo apt-get update && sudo apt-get install -y valgrind
      - run: export VALGRIND="valgrind -q"
      - run: make test

  test-windows:
    name: Windows
    runs-on: windows-latest
    steps:
      - uses: actions/checkout@v2
        with:
          persist-credentials: false
      - name: Setup PATH for CL.EXE
        uses: ilammy/msvc-dev-cmd@v1
      # Remove link.exe from non-MSVC packages that interferes with MSVC link
      - run: rm "C:\Program Files\Git\usr\bin\link.exe"
      - run: rm "C:\msys64\usr\bin\link.exe"
      - run: make -f Makefile.Windows

  test-windows-cmake-debug:
    name: Windows CMake, Debug configuration
    runs-on: windows-latest
    steps:
      - uses: actions/checkout@v2
        with:
          persist-credentials: false
      - name: Configure CMake
        run: cmake -S . -B build
      - name: Build, debug configuration
        run: cmake --build build --config Debug
      - name: Client-server test, debug
        run: python tests/client-server.py build/tests/Debug/client.exe build/tests/Debug/server.exe
      - name: Check static library list
        run: python tests/verify-static-libraries.py

  test-windows-cmake-release:
    name: Windows CMake, Release configuration
    runs-on: windows-latest
    steps:
      - uses: actions/checkout@v2
        with:
          persist-credentials: false
      - name: Configure CMake
        run: cmake -S . -B build
      - name: Build, release configuration
        run: cmake --build build --config Release
      - name: Client-server test, release
        run: python tests/client-server.py build/tests/Release/client.exe build/tests/Release/server.exe

  ensure-header-updated:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
        with:
          persist-credentials: false
      - run: touch src/lib.rs
      - run: make src/rustls.h
      - run: git diff --exit-code

  docs:
    name: Check for documentation errors
    runs-on: ubuntu-18.04
    steps:
      - name: Checkout sources
        uses: actions/checkout@v2
        with:
          persist-credentials: false

      - name: Install rust toolchain
        uses: actions-rs/toolchain@v1
        with:
          toolchain: nightly
          override: true
          default: true

      - name: cargo doc (all features)
        run: cargo doc --all-features --no-deps --workspace
        env:
          RUSTDOCFLAGS: -Dwarnings

  minver:
    name: Check minimum versions
    runs-on: ubuntu-18.04
    steps:
      - name: Checkout sources
        uses: actions/checkout@v2
        with:
          persist-credentials: false

      - name: Install rust toolchain
        uses: actions-rs/toolchain@v1
        with:
          toolchain: nightly
          override: true
          default: true

      - name: cargo test (debug; all features; -Z minimal-versions)
        run: cargo -Z minimal-versions test --all-features

  format:
    name: Format
    runs-on: ubuntu-latest
    steps:
      - name: Checkout sources
        uses: actions/checkout@v2
        with:
          persist-credentials: false
      - name: Install rust toolchain
        uses: actions-rs/toolchain@v1
        with:
          toolchain: 1.67.1
          override: true
          default: true
          components: rustfmt
      - name: Check formatting
        uses: actions-rs/cargo@v1
        with:
          command: fmt
          args: --all -- --check

  clippy:
    name: Clippy
    runs-on: ubuntu-latest
    steps:
      - name: Checkout sources
        uses: actions/checkout@v2
        with:
          persist-credentials: false
      - name: Install rust toolchain
        uses: actions-rs/toolchain@v1
        with:
          toolchain: 1.67.1
          override: true
          default: true
          components: clippy
      - name: Check formatting
        uses: actions-rs/cargo@v1
        with:
          command: clippy
          args: --workspace -- -D warnings

  clippy-nightly-optional:
    name: Clippy nightly (optional)
    runs-on: ubuntu-latest
    steps:
      - name: Checkout sources
        uses: actions/checkout@v2
        with:
          persist-credentials: false
      - name: Install rust toolchain
        uses: actions-rs/toolchain@v1
        with:
          toolchain: nightly
          override: true
          default: true
          components: clippy
      - name: Check formatting
        uses: actions-rs/cargo@v1
        with:
          command: clippy
          args: --workspace -- -D warnings

  miri:
    name: Miri
    runs-on: ubuntu-latest
    steps:
      - name: Checkout sources
        uses: actions/checkout@v2
        with:
          persist-credentials: false

      - name: Install nightly Rust
        uses: actions-rs/toolchain@v1
        with:
          toolchain: nightly
          profile: minimal
          override: true
      - run: rustup override set "nightly-$(curl -s https://rust-lang.github.io/rustup-components-history/x86_64-unknown-linux-gnu/miri)"
      - run: rustup component add miri
      - run: cargo miri test