esp-idf-smtp 0.4.0

Lightweight SMTP client over esp_tls for esp-idf-svc in Rust
name: CI

on:
  push:
  pull_request:

concurrency:
  group: ci-${{ github.head_ref || github.ref }}
  cancel-in-progress: true

env:
  CARGO_TERM_COLOR: always

jobs:
  pr-title:
    if: github.event_name == 'pull_request'
    runs-on: ubuntu-latest
    steps:
      - uses: amannn/action-semantic-pull-request@48f256284bd46cdaab1048c3721360e808335d50 # v6
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

  test:
    runs-on: ubuntu-latest
    env:
      SCCACHE_GHA_ENABLED: "true"
      RUSTC_WRAPPER: "sccache"
    steps:
      - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6
      - uses: dtolnay/rust-toolchain@29eef336d9b2848a0b548edc03f92a220660cdb8 # stable
      - uses: taiki-e/install-action@nextest
      - uses: mozilla-actions/sccache-action@v0.0.10
      - run: cargo nextest run --no-default-features
      - name: Verify publishable
        run: cargo publish --dry-run --no-default-features

  lint:
    runs-on: ubuntu-latest
    env:
      SCCACHE_GHA_ENABLED: "true"
      RUSTC_WRAPPER: "sccache"
    steps:
      - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6
      - uses: dtolnay/rust-toolchain@29eef336d9b2848a0b548edc03f92a220660cdb8 # stable
        with:
          components: clippy, rustfmt
      - uses: mozilla-actions/sccache-action@v0.0.10
      - run: cargo clippy --no-default-features --all-targets -- -D warnings
      - run: cargo fmt --check

  check-features:
    runs-on: ubuntu-latest
    env:
      SCCACHE_GHA_ENABLED: "true"
      RUSTC_WRAPPER: "sccache"
    steps:
      - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6
      - uses: dtolnay/rust-toolchain@29eef336d9b2848a0b548edc03f92a220660cdb8 # stable
      - uses: mozilla-actions/sccache-action@v0.0.10
      - run: cargo check --no-default-features

  changes:
    if: github.event_name == 'pull_request'
    runs-on: ubuntu-latest
    outputs:
      rust: ${{ steps.filter.outputs.rust }}
    steps:
      - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6
      - uses: dorny/paths-filter@7b450fff21473bca461d4b92ce414b9d0420d706 # v4
        id: filter
        with:
          filters: |
            rust:
              - 'src/**'
              - 'Cargo.toml'
              - 'Cargo.lock'

  ci-ok:
    if: always()
    needs: [pr-title, test, lint, check-features]
    runs-on: ubuntu-latest
    steps:
      - name: Check all jobs
        run: |
          results='${{ toJSON(needs) }}'
          echo "Job results: $results"
          if echo "$results" | jq -e 'to_entries | map(select(.value.result != "success" and .value.result != "skipped")) | length > 0' > /dev/null; then
            echo "Some required jobs failed or were cancelled"
            exit 1
          fi
          echo "All required jobs passed or were skipped"