name: ci
on: [push, pull_request]

jobs:
  unit-test:
    name: Cargo build & test
    runs-on: ubuntu-latest
    strategy:
      matrix:
        rust:
          - 1.65.0
          - 1.66.1
          - 1.67.1
          - 1.68.1
          - stable
          - beta
          - nightly
    steps:
      - uses: actions/checkout@v3
      - name: Install Rust ${{ matrix.rust }}
        uses: actions-rs/toolchain@v1
        with:
          toolchain: ${{ matrix.rust }}
          override: true
          profile: minimal
      - name: Run cargo build
        uses: actions-rs/cargo@v1
        with:
          command: build
          args: --verbose --all-features
      - name: Run cargo test
        uses: actions-rs/cargo@v1
        with:
          command: test
          args: --verbose --all-features
  integration-test:
    name: Integration test
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Apt update
        run: sudo apt update
      - name: Install Python
        run: sudo apt install -y python3
      - name: Install dkimpy
        run: sudo apt install -y python3-dkim python3-dnspython python3-nacl python3-authres
      - name: Install OpenSMTPD
        run: sudo apt install -y opensmtpd
      - name: Stop OpenSMTPD
        run: sudo systemctl stop opensmtpd.service
      - name: Install Rust stable
        uses: actions-rs/toolchain@v1
        with:
          toolchain: stable
          override: true
          profile: minimal
      - name: Run cargo build
        uses: actions-rs/cargo@v1
        with:
          command: build
          args: --verbose --all-features
      - name: Run the integration test
        run: ./tests/start_test.py
  cargo-fmt:
    name: Cargo fmt
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: actions-rust-lang/setup-rust-toolchain@v1
        with:
          components: rustfmt
      - name: Rustfmt Check
        uses: actions-rust-lang/rustfmt@v1
  cargo-deny:
    name: Cargo deny
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: EmbarkStudios/cargo-deny-action@v1
  black:
    name: Black
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Apt update
        run: sudo apt update
      - name: Install Python
        run: sudo apt install -y python3
      - name: Install Black
        run: sudo apt install -y black
      - name: Check Pyhton code format using Black
        run: black --check .
