test #20
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 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: | |
# 1. code formatting | |
# 2. absence of lints | |
# 3. absence of errors and warnings on Linux/x86 | |
# 4. cross compilation on Windows and Linux/ARM | |
jobs: | |
fmt: | |
name: cargo fmt | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout code | |
uses: actions/[email protected] | |
- name: Install toolchain | |
run: curl https://sh.rustup.rs -sSf | sh -s -- --profile default --default-toolchain stable -y | |
- run: cargo fmt --all -- --check | |
clippy: | |
needs: fmt | |
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/[email protected] | |
- name: Install toolchain | |
run: curl https://sh.rustup.rs -sSf | sh -s -- --profile default --default-toolchain ${{ matrix.toolchain }} -y | |
- name: Get Rustc version | |
id: get-rustc-version | |
run: echo "version=$(rustc -V)" >> $GITHUB_OUTPUT | |
shell: bash | |
- name: Cache Rust dependencies | |
uses: actions/[email protected] | |
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 | |
test-linux: | |
name: cargo +${{ matrix.toolchain }} check (${{ matrix.os }}) | |
runs-on: ${{ matrix.os }} | |
continue-on-error: ${{ matrix.experimental }} | |
needs: clippy | |
strategy: | |
fail-fast: false | |
matrix: | |
os: [ubuntu-latest] | |
toolchain: | |
- "1.74" # 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/[email protected] | |
- name: Install toolchain | |
run: curl https://sh.rustup.rs -sSf | sh -s -- --profile minimal --default-toolchain ${{ matrix.toolchain }} -y | |
- name: Get Rustc version | |
id: get-rustc-version | |
run: echo "version=$(rustc -V)" >> $GITHUB_OUTPUT | |
shell: bash | |
- name: Cache Rust dependencies | |
uses: actions/[email protected] | |
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 fetch --locked | |
- run: cargo build --frozen --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: clippy | |
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.74" # MSRV (Minimum supported rust version) | |
- stable | |
steps: | |
- name: Checkout code | |
uses: actions/[email protected] | |
# hyper-rustls >=0.27 uses aws-lc as default backend which requires NASM to build | |
- name: Install NASM | |
uses: ilammy/[email protected] | |
- name: Install toolchain | |
run: curl https://sh.rustup.rs -sSf | sh -s -- --profile minimal --default-toolchain ${{ matrix.toolchain }} -y | |
- name: Get Rustc version | |
id: get-rustc-version | |
run: echo "version=$(rustc -V)" >> $GITHUB_OUTPUT | |
shell: bash | |
- name: Cache Rust dependencies | |
uses: actions/[email protected] | |
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 fetch --locked | |
- run: cargo build --frozen --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-linux: | |
name: cross +${{ matrix.toolchain }} build ${{ matrix.target }} | |
needs: clippy | |
runs-on: ${{ matrix.os }} | |
continue-on-error: false | |
strategy: | |
fail-fast: false | |
matrix: | |
os: [ubuntu-latest] | |
target: | |
- armv7-unknown-linux-gnueabihf | |
- aarch64-unknown-linux-gnu | |
- riscv64gc-unknown-linux-gnu | |
toolchain: | |
- "1.74" # MSRV (Minimum supported rust version) | |
- stable | |
steps: | |
- name: Checkout code | |
uses: actions/[email protected] | |
- name: Install toolchain | |
run: curl https://sh.rustup.rs -sSf | sh -s -- --profile minimal --default-toolchain ${{ matrix.toolchain }} -y | |
- name: Get Rustc version | |
id: get-rustc-version | |
run: echo "version=$(rustc -V)" >> $GITHUB_OUTPUT | |
shell: bash | |
- name: Cache Rust dependencies | |
uses: actions/[email protected] | |
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 the cross compiler rust targets | |
run: rustup target add ${{ matrix.target }} | |
- name: Install cross compiler | |
run: | | |
if [ ${{ matrix.target }} = "armv7-unknown-linux-gnueabihf" ]; then | |
sudo apt-get install -y gcc-arm-linux-gnueabihf | |
fi | |
if [ ${{ matrix.target }} = "aarch64-unknown-linux-gnu" ]; then | |
sudo apt-get install -y gcc-aarch64-linux-gnu | |
fi | |
if [ ${{ matrix.target }} = "riscv64gc-unknown-linux-gnu" ]; then | |
sudo apt-get install -y gcc-riscv64-linux-gnu | |
fi | |
- name: Set target link compiler | |
run: | | |
# Convert target to uppercase and replace - with _ | |
target=${{ matrix.target }} | |
target=${target^^} | |
target=${target//-/_} | |
if [ ${{ matrix.target }} = "armv7-unknown-linux-gnueabihf" ]; then | |
echo "CARGO_TARGET_${target}_LINKER=arm-linux-gnueabihf-gcc" >> $GITHUB_ENV | |
fi | |
if [ ${{ matrix.target }} = "aarch64-unknown-linux-gnu" ]; then | |
echo "CARGO_TARGET_${target}_LINKER=aarch64-linux-gnu-gcc" >> $GITHUB_ENV | |
fi | |
if [ ${{ matrix.target }} = "riscv64gc-unknown-linux-gnu" ]; then | |
echo "CARGO_TARGET_${target}_LINKER=riscv64-linux-gnu-gcc" >> $GITHUB_ENV | |
fi | |
- name: Fetch | |
run: cargo fetch --locked | |
- name: Build | |
run: cargo build --frozen --verbose --target ${{ matrix.target }} --no-default-features | |
- name: Check binary | |
run: file target/${{ matrix.target }}/debug/librespot |