diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
new file mode 100644
index 0000000..90fef9c
--- /dev/null
+++ b/.github/workflows/ci.yml
@@ -0,0 +1,163 @@
+name: CI
+on:
+ pull_request:
+ push:
+ branches: [main]
+
+# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages
+permissions:
+ contents: read
+ pages: write
+ id-token: write
+ checks: write
+
+jobs:
+ ci:
+ name: CI
+ needs: [test, clippy, docs]
+ runs-on: ubuntu-latest
+ steps:
+ - name: Done
+ run: exit 0
+ test:
+ name: Tests
+ strategy:
+ fail-fast: false
+ matrix:
+ os: [ubuntu-latest]
+ rust: [1.85.1, nightly]
+ runs-on: ${{ matrix.os }}
+ steps:
+ - uses: actions/checkout@v4
+ - name: Install rust
+ uses: dtolnay/rust-toolchain@stable
+ with:
+ toolchain: ${{ matrix.rust }}
+ - name: Ready cache
+ if: matrix.os == 'ubuntu-latest'
+ run: sudo chown -R $(whoami):$(id -ng) ~/.cargo/
+ - name: Install dependencies
+ run: sudo apt-get update; sudo apt-get install --no-install-recommends libxcb-render0-dev libxcb-shape0-dev libxcb-xfixes0-dev libudev-dev libasound2-dev
+ - name: Cache cargo
+ uses: actions/cache@v4
+ id: cache
+ with:
+ path: ~/.cargo
+ key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
+ - name: Test
+ run: cargo test --verbose --all-features -- --nocapture
+ fmt:
+ name: Rustfmt
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+ - uses: dtolnay/rust-toolchain@stable
+ with:
+ toolchain: 1.85.1
+ components: rustfmt
+ - name: Run fmt --all -- --check
+ run: cargo fmt --all -- --check
+
+ clippy:
+ name: Clippy
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+ - uses: dtolnay/rust-toolchain@stable
+ with:
+ toolchain: 1.85.1
+ components: clippy
+ - name: Install dependencies
+ run: sudo apt-get update; sudo apt-get install --no-install-recommends libudev-dev libasound2-dev
+ - name: Cache cargo
+ uses: actions/cache@v4
+ id: cache
+ with:
+ path: ~/.cargo
+ key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
+ - name: Run clippy
+ run: cargo clippy --all-targets --
+ docs:
+ name: Docs
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+ - uses: dtolnay/rust-toolchain@stable
+ with:
+ toolchain: 1.85.1
+ - name: Install dependencies
+ run: sudo apt-get update; sudo apt-get install --no-install-recommends libudev-dev libasound2-dev
+ - name: Cache cargo
+ uses: actions/cache@v4
+ id: cache
+ with:
+ path: ~/.cargo
+ key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
+ - name: Run doc tests
+ run: cargo test --doc --all-features
+ - name: Check docs
+ run: cargo doc --no-deps --all-features
+ docs-and-demos-ghpages:
+ name: Update Docs and Demos in GitHub Pages
+ runs-on: ubuntu-latest
+ if: github.ref == 'refs/heads/main'
+ steps:
+ - uses: actions/checkout@v4
+ - uses: jetli/wasm-bindgen-action@v0.2.0
+ with:
+ version: 'latest'
+ - uses: dtolnay/rust-toolchain@stable
+ with:
+ targets: wasm32-unknown-unknown
+ toolchain: 1.85.1
+ - name: Install dependencies
+ run: sudo apt-get update; sudo apt-get install --no-install-recommends libudev-dev libasound2-dev
+ - name: Build docs
+ env:
+ GITHUB_REPO: ${{ github.repository }}
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ run: |-
+ cargo doc --verbose --all-features &&
+ echo "" > target/doc/index.html &&
+ cargo build --examples --release --target wasm32-unknown-unknown --features bevy/webgl2 &&
+ for demowasm in $(cd target/wasm32-unknown-unknown/release/examples; ls *.wasm | grep -v -); do
+ wasm-bindgen target/wasm32-unknown-unknown/release/examples/$demowasm --out-dir target/doc/demos/ --target web
+ cat > target/doc/demos/${demowasm%.*}.html <
+
+
+
+
+
+
+