diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 000000000..86b3a5056 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,181 @@ +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: --all-features + + test: + name: Test + runs-on: ${{ matrix.os || 'ubuntu-latest' }} + + strategy: + fail-fast: false + matrix: + name: + - stable + - beta + - nightly + - macOS + - Windows + - driver only + - gateway only + + include: + - name: beta + toolchain: beta + - name: nightly + toolchain: nightly + - name: macOS + os: macOS-latest + - name: Windows + os: windows-latest + - name: driver only + features: driver + - name: gateway only + features: serenity-rustls + + 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: 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: Build all features + if: matrix.features == '' + run: cargo build --all-features + + - name: Test all features + if: matrix.features == '' + run: cargo test --all-features + + - name: Build some features + if: matrix.features + run: cargo build --no-default-features --features "${{ matrix.features }}" + + - name: Test some features + if: 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 collector,voice + cargo doc --no-deps -p command_attr + + 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_storage' + working-directory: examples + run: cargo build -p voice_storage + - name: 'Build twilight' + working-directory: examples + run: cargo build -p twilight diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml new file mode 100644 index 000000000..4cd229bb0 --- /dev/null +++ b/.github/workflows/docs.yml @@ -0,0 +1,62 @@ +name: Publish docs + +on: + push: + branches: + - current + - next + +jobs: + docs: + name: Publish 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 + target/debug + key: ${{ runner.os }}-gh-pages-${{ steps.tc.outputs.rustc_hash }}-${{ hashFiles('**/Cargo.toml') }} + + - name: Build docs + env: + RUSTDOCFLAGS: -D broken_intra_doc_links + run: | + cargo doc --no-deps --all-features + + - name: Prepare docs + shell: bash -e -O extglob {0} + run: | + DIR=${GITHUB_REF/refs\/+(heads|tags)\//} + mkdir -p ./docs/$DIR + touch ./docs/.nojekyll + echo '' > ./docs/$DIR/index.html + mv ./target/doc/* ./docs/$DIR/ + + - name: Deploy docs + uses: peaceiris/actions-gh-pages@v3 + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + publish_branch: gh-pages + publish_dir: ./docs + allow_empty_commit: false + keep_files: true diff --git a/README.md b/README.md index 07e6df476..1b2805cab 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,5 @@ +[![docs-badge][]][docs] [![build badge]][build] + # Songbird ![](songbird.png) @@ -29,3 +31,9 @@ Songbird's logo is based upon the copyright-free image ["Black-Capped Chickadee" ["Black-Capped Chickadee"]: https://www.oldbookillustrations.com/illustrations/black-capped-chickadee/ [lavalink]: https://github.com/Frederikam/Lavalink [this crate's examples directory]: https://github.com/serenity-rs/songbird/tree/current/examples + +[build badge]: https://img.shields.io/github/workflow/status/serenity-rs/songbird/Build%20and%20Test%20(Stable)?style=flat-square +[build]: https://github.com/serenity-rs/songbird/actions + +[docs-badge]: https://img.shields.io/badge/docs-online-4d76ae.svg?style=flat-square +[docs]: https://serenity-rs.github.io/songbird/current diff --git a/examples/Cargo.toml b/examples/Cargo.toml new file mode 100644 index 000000000..77c21b99f --- /dev/null +++ b/examples/Cargo.toml @@ -0,0 +1,8 @@ +[workspace] +members = [ + "serenity/voice", + "serenity/voice_events_queue", + "serenity/voice_receive", + "serenity/voice_storage", + "twilight", +] diff --git a/examples/twilight/Cargo.toml b/examples/twilight/Cargo.toml index 5d45f925c..4b47bad26 100644 --- a/examples/twilight/Cargo.toml +++ b/examples/twilight/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "basic-twilight-bot" +name = "twilight" version = "0.1.0" authors = ["Twilight and Serenity Contributors"] edition = "2018"