name: CI on: [push, pull_request] jobs: lint: name: Lint runs-on: ubuntu-latest steps: - name: Checkout sources uses: actions/checkout@v2 - name: Install toolchain uses: actions-rs/toolchain@v1 with: toolchain: nightly components: rustfmt, clippy override: true - name: Rustfmt run: cargo +nightly fmt --all -- --check - name: Clippy uses: actions-rs/clippy-check@v1 with: token: ${{ secrets.GITHUB_TOKEN }} args: --features full-doc test: name: Test runs-on: ${{ matrix.os || 'ubuntu-latest' }} strategy: fail-fast: false matrix: name: - stable - beta - nightly - macOS - Windows - driver only - gateway only - simd json include: - name: beta toolchain: beta - name: nightly toolchain: nightly - name: macOS os: macOS-latest - name: Windows os: windows-latest - name: driver only features: driver rustls dont-test: true - name: gateway only features: gateway serenity rustls dont-test: true - name: simd json features: simd-json serenity rustls driver gateway serenity?/simd_json rustflags: -C target-cpu=native dont-test: true steps: - name: Checkout sources uses: actions/checkout@v2 - name: Install toolchain id: tc uses: actions-rs/toolchain@v1 with: toolchain: ${{ matrix.toolchain || 'stable' }} profile: minimal override: true - name: Install dependencies if: runner.os == 'Linux' run: | sudo apt-get update sudo apt-get install -y libopus-dev - name: Install yt-dlp (Unix) if: runner.os != 'Windows' run: | sudo wget https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp -O /usr/local/bin/yt-dlp sudo chmod a+rx /usr/local/bin/yt-dlp - name: Install yt-dlp (Windows) if: runner.os == 'Windows' run: choco install yt-dlp - name: Setup cache if: runner.os != 'macOS' uses: actions/cache@v2 with: path: | ~/.cargo/registry ~/.cargo/git target key: ${{ runner.os }}-test-${{ steps.tc.outputs.rustc_hash }}-${{ hashFiles('**/Cargo.toml') }} - name: Set RUSTFLAGS if: runner.os != 'Windows' run: echo "RUSTFLAGS=${{ matrix.rustflags || '' }}" >> $GITHUB_ENV - name: Build all features if: matrix.features == '' run: cargo build --features full-doc - name: Test all features if: matrix.features == '' run: cargo test --features full-doc - name: Build some features if: matrix.features run: cargo build --no-default-features --features "${{ matrix.features }}" - name: Test some features if: ${{ !matrix.dont-test && matrix.features }} run: cargo test --no-default-features --features "${{ matrix.features }}" doc: name: Build docs runs-on: ubuntu-latest steps: - name: Checkout sources uses: actions/checkout@v2 - name: Install toolchain id: tc uses: actions-rs/toolchain@v1 with: toolchain: nightly profile: minimal override: true - name: Install dependencies run: | sudo apt-get update sudo apt-get install -y libopus-dev - name: Setup cache uses: actions/cache@v2 with: path: | ~/.cargo/registry ~/.cargo/git key: ${{ runner.os }}-docs-${{ steps.tc.outputs.rustc_hash }}-${{ hashFiles('**/Cargo.toml') }} - name: Build docs env: RUSTDOCFLAGS: -D broken_intra_doc_links run: | cargo doc --no-deps --features full-doc examples: name: Examples runs-on: ubuntu-latest steps: - name: Checkout sources uses: actions/checkout@v2 - name: Install toolchain id: tc uses: actions-rs/toolchain@v1 with: toolchain: stable profile: minimal override: true - name: Install dependencies run: | sudo apt-get update sudo apt-get install -y libopus-dev - name: Setup cache uses: actions/cache@v2 with: path: | ~/.cargo/registry ~/.cargo/git examples/target key: ${{ runner.os }}-examples-${{ steps.tc.outputs.rustc_hash }}-${{ hashFiles('**/Cargo.toml') }} - name: 'Build serenity/voice' working-directory: examples run: cargo build -p voice - name: 'Build serenity/voice_events_queue' working-directory: examples run: cargo build -p voice_events_queue - name: 'Build serenity/voice_receive' working-directory: examples run: cargo build -p voice_receive - name: 'Build serenity/voice_cached_audio' working-directory: examples run: cargo build -p voice_cached_audio - name: 'Build twilight' working-directory: examples run: cargo build -p twilight