rspotify 0.16.0

Spotify API wrapper
Documentation
on:
  pull_request:
  push:
    branches: master

name: Continuous Integration

jobs:
  formatting:
    name: Formatting
    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
          components: rustfmt

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

  docs:
    name: Check Docs
    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: Install cargo-deadlinks
        run: cargo install cargo-deadlinks

      - name: Build and Check
        run: RUSTDOCFLAGS='-D warnings' cargo doc --features=cli,env-file

      - name: Look for Dead Links
        # We don't enforce deadlinks in the CI because it may print various
        # false positives, or errors that aren't related to the current PR.
        continue-on-error: true
        run: |
          cd target
          for crate in doc/rspotify*; do
            echo ">> Checking in $crate"
            cargo deadlinks --check-http --dir "$crate"
          done

  test:
    name: Test and Lint for each Client
    runs-on: ubuntu-latest
    env:
      RUST_BACKTRACE: 1
    strategy:
      matrix:
        features:
          - rspotify/cli,rspotify/env-file,rspotify/client-ureq,rspotify/ureq-rustls-tls,rspotify-http/client-ureq,rspotify-http/ureq-rustls-tls
          - rspotify/cli,rspotify/env-file,rspotify/client-reqwest,rspotify/reqwest-rustls-tls,rspotify-http/client-reqwest,rspotify-http/reqwest-rustls-tls
          - rspotify/cli,rspotify/env-file,rspotify/client-ureq,rspotify/ureq-native-tls,rspotify-http/client-ureq,rspotify-http/ureq-native-tls
    steps:
      - name: Checkout sources
        uses: actions/checkout@v2

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

      - name: Install libssl-dev
        if: ${{ contains(matrix.features, 'ureq-native-tls') }}
        run: sudo apt-get install libssl-dev

      - name: Run cargo clippy
        uses: actions-rs/cargo@v1
        with:
          command: clippy
          args: -p rspotify -p rspotify-http -p rspotify-model -p rspotify-macros --no-default-features --features=${{ matrix.features }} --all-targets -- -D warnings

      - name: Run cargo test
        uses: actions-rs/cargo@v1
        with:
          command: test
          args: -p rspotify -p rspotify-http -p rspotify-model -p rspotify-macros --no-default-features --features=${{ matrix.features }}

  test-wasm:
    name: Test WASM client
    runs-on: ubuntu-latest
    env:
      RUST_BACKTRACE: 1

    steps:
      - name: Checkout sources
        uses: actions/checkout@v2

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

      - name: Install node
        uses: actions/setup-node@v4
        with:
          node-version: 20

      - name: Install wasm-pack
        run: curl https://rustwasm.github.io/wasm-pack/installer/init.sh -sSf | sh

      - name: Run wasm-pack test
        run: wasm-pack test --node