Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
163 changes: 163 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -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 "<meta http-equiv=refresh content=0;url=bevy_play_card/index.html>" > 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
<html lang="en-us">
<head>
<script type="module">
import init from './${demowasm%.*}.js';
var res = await init();
res.start();
</script>
</head>
<body>
<script>
document.body.addEventListener("contextmenu", (e) => {
e.preventDefault();
e.stopPropagation();
});
</script>
</body>
</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