# Note, this is used in the badge URL! name: test on: push: branches: [dev, master] paths: [ "**.rs", "Cargo.toml", "Cargo.lock", "rustfmt.toml", ".github/workflows/*", "!*.md", "!contrib/*", "!docs/*", "!LICENSE", "!*.sh", ] pull_request: paths: [ "**.rs", "Cargo.toml", "Cargo.lock", "rustfmt.toml", ".github/workflows/*", "!*.md", "!contrib/*", "!docs/*", "!LICENSE", "!*.sh", ] schedule: # Run CI every week - cron: "00 01 * * 0" env: RUST_BACKTRACE: 1 RUSTFLAGS: -D warnings # The layering here is as follows, checking in priority from highest to lowest: # 1. absence of errors and warnings on Linux/x86 # 2. cross compilation on Windows and Linux/ARM # 3. absence of lints # 4. code formatting jobs: test-linux: name: cargo +${{ matrix.toolchain }} check (${{ matrix.os }}) runs-on: ${{ matrix.os }} continue-on-error: ${{ matrix.experimental }} strategy: fail-fast: false matrix: os: [ubuntu-latest] toolchain: - "1.64" # MSRV (Minimum supported rust version) - stable experimental: [false] # Ignore failures in beta include: - os: ubuntu-latest toolchain: beta experimental: true steps: - name: Checkout code uses: actions/checkout@v3.5.0 - name: Install toolchain uses: actions-rs/toolchain@v1.0.7 with: profile: minimal toolchain: ${{ matrix.toolchain }} override: true - name: Get Rustc version id: get-rustc-version run: echo "version=$(rustc -V)" >> $GITHUB_OUTPUT shell: bash - name: Cache Rust dependencies uses: actions/cache@v3.3.1 with: path: | ~/.cargo/registry/index ~/.cargo/registry/cache ~/.cargo/git target key: ${{ runner.os }}-${{ steps.get-rustc-version.outputs.version }}-${{ hashFiles('Cargo.lock') }} - name: Install developer package dependencies run: sudo apt-get update && sudo apt install -y libunwind-dev && sudo apt-get install libpulse-dev portaudio19-dev libasound2-dev libsdl2-dev gstreamer1.0-dev libgstreamer-plugins-base1.0-dev libavahi-compat-libdnssd-dev - run: cargo build --workspace --examples - run: cargo test --workspace - run: cargo install cargo-hack - run: cargo hack --workspace --remove-dev-deps - run: cargo check -p librespot-core --no-default-features - run: cargo check -p librespot-core - run: cargo hack check --each-feature -p librespot-discovery - run: cargo hack check --each-feature -p librespot-playback - run: cargo hack check --each-feature test-windows: needs: test-linux name: cargo +${{ matrix.toolchain }} check (${{ matrix.os }}) runs-on: ${{ matrix.os }} continue-on-error: false strategy: fail-fast: false matrix: os: [windows-latest] toolchain: - "1.64" # MSRV (Minimum supported rust version) - stable steps: - name: Checkout code uses: actions/checkout@v3.5.0 - name: Install toolchain uses: actions-rs/toolchain@v1.0.7 with: toolchain: ${{ matrix.toolchain }} profile: minimal override: true - name: Get Rustc version id: get-rustc-version run: echo "version=$(rustc -V)" >> $GITHUB_OUTPUT shell: bash - name: Cache Rust dependencies uses: actions/cache@v3.3.1 with: path: | ~/.cargo/registry/index ~/.cargo/registry/cache ~/.cargo/git target key: ${{ runner.os }}-${{ steps.get-rustc-version.outputs.version }}-${{ hashFiles('Cargo.lock') }} - run: cargo build --workspace --examples - run: cargo test --workspace - run: cargo install cargo-hack - run: cargo hack --workspace --remove-dev-deps - run: cargo check --no-default-features - run: cargo check test-cross-arm: name: cross +${{ matrix.toolchain }} build ${{ matrix.target }} needs: test-linux runs-on: ${{ matrix.os }} continue-on-error: false strategy: fail-fast: false matrix: os: [ubuntu-latest] target: [armv7-unknown-linux-gnueabihf] toolchain: - "1.64" # MSRV (Minimum supported rust version) - stable steps: - name: Checkout code uses: actions/checkout@v3.5.0 - name: Install toolchain uses: actions-rs/toolchain@v1.0.7 with: profile: minimal target: ${{ matrix.target }} toolchain: ${{ matrix.toolchain }} override: true - name: Get Rustc version id: get-rustc-version run: echo "version=$(rustc -V)" >> $GITHUB_OUTPUT shell: bash - name: Cache Rust dependencies uses: actions/cache@v3.3.1 with: path: | ~/.cargo/registry/index ~/.cargo/registry/cache ~/.cargo/git target key: ${{ runner.os }}-${{ matrix.target }}-${{ steps.get-rustc-version.outputs.version }}-${{ hashFiles('Cargo.lock') }} - name: Install cross run: cargo install cross || true - name: Build run: cross build --target ${{ matrix.target }} --no-default-features clippy: needs: [test-cross-arm, test-windows] name: cargo +${{ matrix.toolchain }} clippy (${{ matrix.os }}) runs-on: ${{ matrix.os }} continue-on-error: false strategy: fail-fast: false matrix: os: [ubuntu-latest] toolchain: [stable] steps: - name: Checkout code uses: actions/checkout@v3.5.0 - name: Install toolchain uses: actions-rs/toolchain@v1.0.7 with: profile: minimal toolchain: ${{ matrix.toolchain }} override: true components: clippy - name: Get Rustc version id: get-rustc-version run: echo "version=$(rustc -V)" >> $GITHUB_OUTPUT shell: bash - name: Cache Rust dependencies uses: actions/cache@v3.3.1 with: path: | ~/.cargo/registry/index ~/.cargo/registry/cache ~/.cargo/git target key: ${{ runner.os }}-${{ steps.get-rustc-version.outputs.version }}-${{ hashFiles('Cargo.lock') }} - name: Install developer package dependencies run: sudo apt-get update && sudo apt install -y libunwind-dev && sudo apt-get install libpulse-dev portaudio19-dev libasound2-dev libsdl2-dev gstreamer1.0-dev libgstreamer-plugins-base1.0-dev libavahi-compat-libdnssd-dev - run: cargo install cargo-hack - run: cargo hack --workspace --remove-dev-deps - run: cargo clippy -p librespot-core --no-default-features - run: cargo clippy -p librespot-core - run: cargo hack clippy --each-feature -p librespot-discovery - run: cargo hack clippy --each-feature -p librespot-playback - run: cargo hack clippy --each-feature fmt: needs: clippy name: cargo +${{ matrix.toolchain }} fmt runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v3.5.0 - name: Install toolchain uses: actions-rs/toolchain@v1.0.7 with: profile: minimal toolchain: stable override: true components: rustfmt - run: cargo fmt --all -- --check