directip 0.2.6

Iridium SBD Direct-IP communication protocol
Documentation
name: Rust checks

on:
  push:
    branches: [main]
  pull_request:
  schedule:
    - cron: '0 5 * * 5'

jobs:
  check:
    name: Check
    runs-on: ubuntu-latest
    steps:
      - name: Checkout sources
        uses: actions/checkout@v2

      - name: Install stable toolchain
        uses: actions-rs/toolchain@v1
        with:
          profile: minimal
          toolchain: stable
          override: true

      - name: Run cargo check
        uses: actions-rs/cargo@v1
        with:
          command: check

  test:
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: false
      matrix:
        build: [beta, stable, windows, macos]
        include:
          - build: macos
            os: macos-latest
            rust: stable
          - build: windows
            os: windows-latest
            rust: stable
          - build: beta
            os: ubuntu-latest
            rust: beta
          - build: stable
            os: ubuntu-latest
            rust: stable
    steps:
      - uses: actions/checkout@v2

      - uses: actions-rs/toolchain@v1
        with:
          toolchain: ${{ matrix.rust }}
          override: true

      - name: Run tests
        uses: actions-rs/cargo@v1
        with:
          command: test
          args: --workspace --no-fail-fast

  cross_testing:
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        target: [
          aarch64-unknown-linux-gnu,
          powerpc64le-unknown-linux-gnu,
          s390x-unknown-linux-gnu,
        ]
    steps:
      - uses: actions/checkout@v2

      - uses: actions-rs/toolchain@v1
        with:
          toolchain: stable
          target: ${{ matrix.target }}
          override: true

      - name: Run tests
        uses: actions-rs/cargo@v1
        with:
          use-cross: true
          command: test
          args: --target ${{ matrix.target }} --no-fail-fast --

  coverage:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2

      - uses: actions-rs/toolchain@v1
        with:
          toolchain: nightly
          override: true

      - name: Get Rust Version
        id: rust-version
        run: echo "::set-output name=version::$(cargo -V | head -n1 | awk '{print $2}')"

      - name: Get Tarpaulin Version
        id: tarpaulin-version
        run: echo "::set-output name=version::$(wget -qO- 'https://api.github.com/repos/xd009642/tarpaulin/releases/latest' | jq -r '.tag_name')"

      - uses: actions/cache@v2
        with:
          path: |
            ~/.cargo/bin/cargo-tarpaulin
            ~/.cargo/git
            ~/.cargo/registry
            target
          key: ${{ runner.os }}-cargo-${{ steps.rust-version.outputs.version }}-tarpaulin-${{ steps.tarpaulin-version.outputs.version }} }}

      - name: Install Tarpaulin
        run: |
          test -e ~/.cargo/bin/cargo-tarpaulin || cargo install cargo-tarpaulin --version ${{ steps.tarpaulin-version.outputs.version }}

      - name: Run cargo-tarpaulin
        run: cargo tarpaulin --all-features --timeout 600 --out Xml -- --test-threads 1

      - name: Upload coverage to codecov
        uses: codecov/codecov-action@v3

  lints:
    name: Lints
    runs-on: ubuntu-latest
    steps:
      - name: Checkout sources
        uses: actions/checkout@v2
        with:
          submodules: 'recursive'

      - name: Install stable toolchain
        uses: actions-rs/toolchain@v1
        with:
          profile: minimal
          toolchain: stable
          override: true
          components: rustfmt, clippy

      - name: Run cargo fmt
        uses: actions-rs/cargo@v1
        with:
          command: fmt
          args: --all -- --check

      - name: Run cargo clippy
        uses: actions-rs/cargo@v1
        with:
          command: clippy
          args: --all-features --tests -- -D warnings

  minimum_rust_version:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2

      - name: check if README matches MSRV defined here
        run: grep '1.60.0' README.md

      - name: check if Cargo.toml matches MSRV defined here
        run: grep 'rust-version = "1.60.0"' Cargo.toml

      - uses: actions-rs/toolchain@v1
        with:
          toolchain: 1.60.0
          override: true

      - name: Check if it builds
        uses: actions-rs/cargo@v1
        with:
          command: build

  publish:
    name: Publish (dry-run)
    runs-on: ubuntu-latest
    steps:
      - name: Checkout sources
        uses: actions/checkout@v2

      - name: Install stable toolchain
        uses: actions-rs/toolchain@v1
        with:
          profile: minimal
          toolchain: stable
          override: true

      - name: Make sure we can publish core library
        uses: actions-rs/cargo@v1
        with:
          command: publish
          args: --dry-run -p directip

      - name: Make sure we can publish directip-client
        uses: actions-rs/cargo@v1
        with:
          command: publish
          args: --dry-run -p directip-client

      - name: Make sure we can publish directip-dump
        uses: actions-rs/cargo@v1
        with:
          command: publish
          args: --dry-run -p directip-dump

      - name: Make sure we can publish directip-storage
        uses: actions-rs/cargo@v1
        with:
          command: publish
          args: --dry-run -p directip-storage