# Note, this is used in the badge URL! name: test on: push: branches: [master, dev] 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 jobs: fmt: name: rustfmt runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v2 - name: Install toolchain uses: actions-rs/toolchain@v1 with: profile: minimal toolchain: stable override: true components: rustfmt - run: cargo fmt --all -- --check test-linux: needs: fmt name: cargo +${{ matrix.toolchain }} build (${{ matrix.os }}) runs-on: ${{ matrix.os }} continue-on-error: ${{ matrix.experimental }} strategy: fail-fast: false matrix: os: [ubuntu-latest] toolchain: - 1.53 # MSRV (Minimum supported rust version) - stable - beta experimental: [false] # Ignore failures in nightly include: - os: ubuntu-latest toolchain: nightly experimental: true steps: - name: Checkout code uses: actions/checkout@v2 - name: Install toolchain uses: actions-rs/toolchain@v1 with: profile: minimal toolchain: ${{ matrix.toolchain }} override: true - name: Get Rustc version id: get-rustc-version run: echo "::set-output name=version::$(rustc -V)" shell: bash - name: Cache Rust dependencies uses: actions/cache@v2 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-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 build -p librespot-core --no-default-features - run: cargo build -p librespot-core - run: cargo hack build --each-feature -p librespot-discovery - run: cargo hack build --each-feature -p librespot-playback - run: cargo hack build --each-feature test-windows: needs: fmt name: cargo build (${{ matrix.os }}) runs-on: ${{ matrix.os }} strategy: fail-fast: false matrix: os: [windows-latest] toolchain: [stable] steps: - name: Checkout code uses: actions/checkout@v2 - name: Install toolchain uses: actions-rs/toolchain@v1 with: toolchain: ${{ matrix.toolchain }} profile: minimal override: true - name: Get Rustc version id: get-rustc-version run: echo "::set-output name=version::$(rustc -V)" shell: bash - name: Cache Rust dependencies uses: actions/cache@v2 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 build --no-default-features - run: cargo build test-cross-arm: needs: fmt runs-on: ${{ matrix.os }} continue-on-error: false strategy: fail-fast: false matrix: include: - os: ubuntu-latest target: armv7-unknown-linux-gnueabihf toolchain: stable steps: - name: Checkout code uses: actions/checkout@v2 - name: Install toolchain uses: actions-rs/toolchain@v1 with: profile: minimal target: ${{ matrix.target }} toolchain: ${{ matrix.toolchain }} override: true - name: Get Rustc version id: get-rustc-version run: echo "::set-output name=version::$(rustc -V)" shell: bash - name: Cache Rust dependencies uses: actions/cache@v2 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