Merge pull request #47 from vpochapuis/main #222
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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.76.0, nightly] | |
runs-on: ${{ matrix.os }} | |
steps: | |
- uses: actions/checkout@v2 | |
- name: Install rust | |
uses: actions-rs/toolchain@v1 | |
with: | |
toolchain: ${{ matrix.rust }} | |
override: true | |
- 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 | |
- name: Cache cargo | |
uses: actions/cache@v1 | |
id: cache | |
with: | |
path: ~/.cargo | |
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} | |
- name: Test | |
run: cargo test --verbose -- --nocapture | |
fmt: | |
name: Rustfmt | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v2 | |
- uses: actions-rs/toolchain@v1 | |
with: | |
profile: minimal | |
toolchain: stable | |
override: true | |
components: rustfmt | |
- name: Run fmt --all -- --check | |
uses: actions-rs/cargo@v1 | |
with: | |
command: fmt | |
args: --all -- --check | |
clippy: | |
name: Clippy | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v2 | |
- uses: actions-rs/toolchain@v1 | |
with: | |
profile: minimal | |
toolchain: stable | |
override: true | |
components: clippy | |
- name: Install dependencies | |
run: sudo apt-get update; sudo apt-get install --no-install-recommends libudev-dev | |
- name: Cache cargo | |
uses: actions/cache@v1 | |
id: cache | |
with: | |
path: ~/.cargo | |
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} | |
- name: Run clippy --all-targets -- | |
uses: actions-rs/clippy-check@v1 | |
with: | |
token: ${{ secrets.GITHUB_TOKEN }} | |
args: --workspace --all-targets -- | |
docs: | |
name: Docs | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v2 | |
- uses: actions-rs/toolchain@v1 | |
with: | |
profile: minimal | |
toolchain: 1.76.0 | |
override: true | |
- name: Install dependencies | |
run: sudo apt-get update; sudo apt-get install --no-install-recommends libudev-dev | |
- name: Cache cargo | |
uses: actions/cache@v1 | |
id: cache | |
with: | |
path: ~/.cargo | |
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} | |
- name: Run doc tests | |
uses: actions-rs/cargo@v1 | |
with: | |
command: test | |
args: --doc | |
- name: Get package names | |
id: get-package-names | |
run: |- | |
echo "PACKAGE_NAMES=$( | |
cargo metadata --no-deps --format-version=1 \ | |
| jq '.packages[].name' -r \ | |
| sort -u \ | |
| xargs -L1 echo --package \ | |
| paste -sd ' ' | |
)" >> "$GITHUB_OUTPUT" | |
- name: Get features for docs | |
id: get-features-for-docs | |
run: |- | |
echo "FEATURES_FOR_DOCS=$( | |
cargo metadata --no-deps --format-version=1 \ | |
| jq '.packages[].metadata.docs.rs.features | select(.) | .[]' -r \ | |
| sort -u \ | |
| xargs -L1 echo --features \ | |
| paste -sd ' ' | |
)" >> "$GITHUB_OUTPUT" | |
- name: Check docs | |
uses: actions-rs/cargo@v1 | |
with: | |
command: doc | |
args: --no-deps ${{ steps.get-package-names.outputs.PACKAGE_NAMES }} | |
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@v2 | |
- uses: jetli/[email protected] | |
with: | |
version: 'latest' | |
- uses: actions-rs/toolchain@v1 | |
with: | |
target: wasm32-unknown-unknown | |
toolchain: 1.76.0 | |
override: true | |
- name: Get package names | |
id: get-package-names | |
run: |- | |
echo "PACKAGE_NAMES=$( | |
cargo metadata --no-deps --format-version=1 \ | |
| jq '.packages[].name | select(. != "tnua-demos-crate")' -r \ | |
| sort -u \ | |
| xargs -L1 echo --package \ | |
| paste -sd ' ' | |
)" >> "$GITHUB_OUTPUT" | |
- name: Get features for docs | |
id: get-features-for-docs | |
run: |- | |
echo "FEATURES_FOR_DOCS=$( | |
cargo metadata --no-deps --format-version=1 \ | |
| jq '.packages[].metadata.docs.rs.features | select(.) | .[]' -r \ | |
| sort -u \ | |
| xargs -L1 echo --features \ | |
| paste -sd ' ' | |
)" >> "$GITHUB_OUTPUT" | |
- name: Build docs and demos | |
env: | |
GITHUB_REPO: ${{ github.repository }} | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
run: |- | |
set -ex | |
cargo doc --verbose ${{ steps.get-package-names.outputs.PACKAGE_NAMES }} | |
echo "<meta http-equiv=refresh content=0;url=bevy_tnua/index.html>" > target/doc/index.html | |
for physics_backend in rapier xpbd; do | |
cargo build \ | |
--package tnua-demos-crate \ | |
--bins \ | |
--release \ | |
--features ${physics_backend}2d \ | |
--features ${physics_backend}3d \ | |
--features bevy/webgl2 \ | |
--target wasm32-unknown-unknown | |
for demowasm in $(cd target/wasm32-unknown-unknown/release; ls *.wasm | grep -v -); do | |
variant=${demowasm%.*}-$physics_backend | |
wasm-bindgen target/wasm32-unknown-unknown/release/$demowasm --out-dir target/doc/demos/ --out-name $variant --target web | |
cat > target/doc/demos/$variant.html <<EOF | |
<html lang="en-us"> | |
<head> | |
<script type="module"> | |
import init from './$variant.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 | |
done | |
cp -R demos/assets/ target/doc/demos/ | |
# TODO: remove the aliases once a release is made and they are no longer needed | |
function alias_to_old_example_name () { | |
cp target/doc/demos/$1.html target/doc/demos/$2.html | |
} | |
alias_to_old_example_name platformer_2d-rapier platformer_rapier2d | |
alias_to_old_example_name platformer_2d-xpbd platformer_xpbd2d | |
alias_to_old_example_name platformer_3d-rapier platformer_rapier3d | |
alias_to_old_example_name platformer_3d-xpbd platformer_xpbd3d | |
- name: Add read permissions | |
run: |- | |
chmod --recursive +r target/doc | |
- name: Upload artifact | |
uses: actions/upload-pages-artifact@v1 | |
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@v2 |