magic-wormhole 0.6.0

Get things from one computer to another, safely
Documentation
name: Rust

on:
  push:
    branches: [master, dev]
  pull_request:
    branches: [master, dev]

jobs:
  format:
    name: cargo fmt (nightly)
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v1
      - uses: actions-rs/toolchain@v1
        with:
          toolchain: nightly
          override: true
          components: rustfmt
          profile: minimal
      - name: Format
        run: cargo fmt -- --check

  clippy:
    name: clippy (stable)
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v1
      - name: Cache ~/.cargo
        uses: actions/cache@v1
        with:
          path: ~/.cargo
          key: ${{ runner.os }}-clippy-dotcargo
      - name: Cache cargo build
        uses: actions/cache@v1
        with:
          path: target
          key: ${{ runner.os }}-clippy-cargo-build-target
      - uses: actions-rs/toolchain@v1
        with:
          toolchain: stable
          components: clippy
          override: true
      - uses: actions-rs/clippy-check@v1
        with:
          token: ${{ secrets.GITHUB_TOKEN }}
          args: --all-features
          name: clippy results

  test:
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: false
      matrix:
        os:
          - ubuntu-latest
          - windows-latest
        rust:
          - 1.61.0 # MSRV (also change in Cargo.toml)
          - stable
          - nightly
    steps:
      - uses: actions/checkout@v1
      - uses: actions-rs/toolchain@v1
        with:
          profile: minimal
          toolchain: ${{ matrix.rust }}
          override: true
      - name: Cache ~/.cargo
        uses: actions/cache@v1
        with:
          path: ~/.cargo
          key: ${{ runner.os }}-test-dotcargo-${{ matrix.rust }}
      - name: Cache cargo build
        uses: actions/cache@v1
        with:
          path: target
          key: ${{ runner.os }}-test-build-target-${{ matrix.rust }}
      - name: build library (no default features)
        uses: actions-rs/cargo@v1
        with:
          command: build
          args: -p magic-wormhole --no-default-features
      - name: build library (features=transit)
        uses: actions-rs/cargo@v1
        with:
          command: build
          args: -p magic-wormhole --no-default-features --features=transit
      - name: build library (features=transfer)
        uses: actions-rs/cargo@v1
        with:
          command: build
          args: -p magic-wormhole --no-default-features --features=transfer
      - name: build library (features=forwarding)
        uses: actions-rs/cargo@v1
        with:
          command: build
          args: -p magic-wormhole --no-default-features --features=forwarding
      - name: build CLI
        uses: actions-rs/cargo@v1
        with:
          command: build
          args: --all-targets
      - name: test
        uses: actions-rs/cargo@v1
        with:
          command: test
          args: --verbose --all

  dist:
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: false
      matrix:
        os:
          - ubuntu-latest
          - windows-latest
    steps:
      - uses: actions/checkout@v1
      - uses: actions-rs/toolchain@v1
        with:
          profile: minimal
          toolchain: stable
          override: true
      - name: Cache ~/.cargo
        uses: actions/cache@v1
        with:
          path: ~/.cargo
          key: ${{ runner.os }}-test-dotcargo-stable
      - name: Cache cargo build
        uses: actions/cache@v1
        with:
          path: target
          key: ${{ runner.os }}-test-build-target-stable
      - name: Build
        uses: actions-rs/cargo@v1
        with:
          command: build
          args: --bins --locked --release
      - name: Upload artifacts
        uses: actions/upload-artifact@v3
        with:
          name: wormhole-${{ matrix.os }}-${{ github.sha }}
          path: |
            ./target/release/wormhole-rs
            ./target/release/wormhole-rs.exe
          if-no-files-found: error

  coverage:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v1
      - uses: actions-rs/toolchain@v1
        with:
          toolchain: nightly
          override: true
      - name: Cache ~/.cargo
        uses: actions/cache@v1
        with:
          path: ~/.cargo
          key: ${{ runner.os }}-coverage-dotcargo
      - name: Cache cargo build
        uses: actions/cache@v1
        with:
          path: target
          key: ${{ runner.os }}-coverage-cargo-build-target
      - uses: actions-rs/tarpaulin@v0.1
        with:
          args: --all
      - name: upload coverage
        uses: codecov/codecov-action@v1
        with:
          token: ${{ secrets.CODECOV_TOKEN }}

  cargo-deny:
    name: Cargo deny
    runs-on: ubuntu-latest
    steps:
      - name: Checkout Rust toolcnain
        uses: actions/checkout@v2
        with:
          toolchain: stable
          override: true
      - uses: EmbarkStudios/cargo-deny-action@v1