From 63869a3c6508f7937ba8f9a8340405b605dfdec2 Mon Sep 17 00:00:00 2001 From: Idan Arye Date: Tue, 1 Apr 2025 00:04:44 +0300 Subject: [PATCH] Add CI --- .github/workflows/ci.yml | 163 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 163 insertions(+) create mode 100644 .github/workflows/ci.yml 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 < + + + + + + + + EOF + done && + cp -R assets/ target/doc/demos/ + - name: Add read permissions + run: |- + chmod --recursive +r target/doc + - name: Upload artifact + uses: actions/upload-pages-artifact@v3 + with: + path: target/doc + deploy-ghpages: + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + runs-on: ubuntu-latest + needs: docs-and-demos-ghpages + if: github.ref == 'refs/heads/main' + steps: + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v4