2020-08-24 18:16:52 +00:00
name : CI
2020-05-29 03:48:18 +00:00
on :
2023-03-06 06:08:21 +00:00
merge_group :
2020-05-29 03:48:18 +00:00
pull_request :
2021-02-19 21:15:29 +00:00
push :
2023-03-07 21:42:53 +00:00
branches :
- main
2020-05-29 03:48:18 +00:00
env :
CARGO_TERM_COLOR : always
2024-01-22 19:32:44 +00:00
NIGHTLY_TOOLCHAIN : nightly
2020-05-29 03:48:18 +00:00
jobs :
build :
2020-08-26 18:57:35 +00:00
strategy :
matrix :
2021-01-27 01:11:38 +00:00
os : [ windows-latest, ubuntu-latest, macos-latest]
2020-08-27 19:24:02 +00:00
runs-on : ${{ matrix.os }}
2023-02-01 15:08:31 +00:00
timeout-minutes : 30
2020-05-29 03:48:18 +00:00
steps :
2023-09-13 19:26:25 +00:00
- uses : actions/checkout@v4
2024-01-28 09:59:48 +00:00
- uses : actions/cache@v4
2021-07-27 02:01:11 +00:00
with :
path : |
~/.cargo/bin/
~/.cargo/registry/index/
~/.cargo/registry/cache/
~/.cargo/git/db/
target/
2022-07-15 22:37:07 +00:00
key : ${{ runner.os }}-cargo-build-stable-${{ hashFiles('**/Cargo.toml') }}
2022-10-31 17:36:23 +00:00
- uses : dtolnay/rust-toolchain@stable
2021-01-27 01:11:38 +00:00
- name : Install alsa and udev
run : sudo apt-get update; sudo apt-get install --no-install-recommends libasound2-dev libudev-dev
if : runner.os == 'linux'
- name : Build & run tests
2022-05-02 19:13:34 +00:00
# See tools/ci/src/main.rs for the commands this runs
run : cargo run -p ci -- test
2020-08-26 18:57:35 +00:00
env :
CARGO_INCREMENTAL : 0
RUSTFLAGS : "-C debuginfo=0 -D warnings"
2021-07-27 02:01:11 +00:00
ci :
runs-on : ubuntu-latest
2023-02-01 15:08:31 +00:00
timeout-minutes : 30
2021-07-27 02:01:11 +00:00
steps :
2023-09-13 19:26:25 +00:00
- uses : actions/checkout@v4
2024-01-28 09:59:48 +00:00
- uses : actions/cache@v4
2021-07-27 02:01:11 +00:00
with :
path : |
~/.cargo/bin/
~/.cargo/registry/index/
~/.cargo/registry/cache/
~/.cargo/git/db/
target/
key : ${{ runner.os }}-cargo-ci-${{ hashFiles('**/Cargo.toml') }}
2022-10-31 17:36:23 +00:00
- uses : dtolnay/rust-toolchain@stable
2021-07-27 02:01:11 +00:00
with :
components : rustfmt, clippy
- name : Install alsa and udev
2021-12-09 20:14:00 +00:00
run : sudo apt-get update; sudo apt-get install --no-install-recommends libasound2-dev libudev-dev libwayland-dev libxkbcommon-dev
2021-07-27 02:01:11 +00:00
- name : CI job
# See tools/ci/src/main.rs for the commands this runs
2022-05-02 19:13:34 +00:00
run : cargo run -p ci -- lints
2021-07-27 02:01:11 +00:00
2022-03-25 00:26:07 +00:00
miri :
2024-02-27 09:00:15 +00:00
runs-on : macos-14
2022-05-14 02:01:38 +00:00
timeout-minutes : 60
2022-03-25 00:26:07 +00:00
steps :
2023-09-13 19:26:25 +00:00
- uses : actions/checkout@v4
2024-01-28 09:59:48 +00:00
- uses : actions/cache@v4
2022-07-01 13:19:39 +00:00
with :
path : |
~/.cargo/bin/
~/.cargo/registry/index/
~/.cargo/registry/cache/
~/.cargo/git/db/
target/
key : ${{ runner.os }}-cargo-miri-${{ hashFiles('**/Cargo.toml') }}
2022-10-31 17:36:23 +00:00
- uses : dtolnay/rust-toolchain@master
2022-03-25 00:26:07 +00:00
with :
2022-07-15 22:37:07 +00:00
toolchain : ${{ env.NIGHTLY_TOOLCHAIN }}
2022-03-25 00:26:07 +00:00
components : miri
- name : CI job
2022-07-06 00:11:24 +00:00
# To run the tests one item at a time for troubleshooting, use
# cargo --quiet test --lib -- --list | sed 's/: test$//' | MIRIFLAGS="-Zmiri-disable-isolation -Zmiri-permissive-provenance -Zmiri-disable-weak-memory-emulation" xargs -n1 cargo miri test -p bevy_ecs --lib -- --exact
2022-03-25 00:26:07 +00:00
run : cargo miri test -p bevy_ecs
env :
# -Zrandomize-layout makes sure we dont rely on the layout of anything that might change
RUSTFLAGS : -Zrandomize-layout
2022-07-01 13:19:39 +00:00
# https://github.com/rust-lang/miri#miri--z-flags-and-environment-variables
2022-03-25 00:26:07 +00:00
# -Zmiri-disable-isolation is needed because our executor uses `fastrand` which accesses system time.
2022-07-01 13:19:39 +00:00
# -Zmiri-permissive-provenance disables warnings against int2ptr casts (since those are used by once_cell)
2022-07-01 21:54:28 +00:00
# -Zmiri-ignore-leaks is necessary because a bunch of tests don't join all threads before finishing.
2022-07-27 16:51:03 +00:00
MIRIFLAGS : -Zmiri-ignore-leaks -Zmiri-disable-isolation -Zmiri-permissive-provenance
2022-03-25 00:26:07 +00:00
2022-05-02 19:13:34 +00:00
check-compiles :
2021-08-26 00:40:56 +00:00
runs-on : ubuntu-latest
2023-02-01 15:08:31 +00:00
timeout-minutes : 30
2021-08-26 00:40:56 +00:00
needs : ci
steps :
2023-09-13 19:26:25 +00:00
- uses : actions/checkout@v4
2024-01-28 09:59:48 +00:00
- uses : actions/cache@v4
2021-08-26 00:40:56 +00:00
with :
path : |
~/.cargo/bin/
~/.cargo/registry/index/
~/.cargo/registry/cache/
~/.cargo/git/db/
target/
2022-05-02 19:13:34 +00:00
crates/bevy_ecs_compile_fail_tests/target/
2023-01-02 21:07:33 +00:00
crates/bevy_reflect_compile_fail_tests/target/
2022-05-02 19:13:34 +00:00
key : ${{ runner.os }}-cargo-check-compiles-${{ hashFiles('**/Cargo.toml') }}
2022-10-31 17:36:23 +00:00
- uses : dtolnay/rust-toolchain@stable
2021-08-26 00:40:56 +00:00
with :
toolchain : stable
- name : Install alsa and udev
run : sudo apt-get update; sudo apt-get install --no-install-recommends libasound2-dev libudev-dev
2022-05-02 19:13:34 +00:00
- name : Check Compile
# See tools/ci/src/main.rs for the commands this runs
run : cargo run -p ci -- compile
2021-08-26 00:40:56 +00:00
2020-10-22 01:15:14 +00:00
build-wasm :
2022-07-15 22:37:07 +00:00
runs-on : ubuntu-latest
2023-02-01 15:08:31 +00:00
timeout-minutes : 30
2022-05-31 17:30:31 +00:00
needs : build
2020-10-22 01:15:14 +00:00
steps :
2023-09-13 19:26:25 +00:00
- uses : actions/checkout@v4
2024-01-28 09:59:48 +00:00
- uses : actions/cache@v4
2021-07-27 02:01:11 +00:00
with :
path : |
~/.cargo/bin/
~/.cargo/registry/index/
~/.cargo/registry/cache/
~/.cargo/git/db/
target/
2022-07-15 22:37:07 +00:00
key : ubuntu-assets-cargo-build-wasm-stable-${{ hashFiles('**/Cargo.toml') }}
2022-10-31 17:36:23 +00:00
- uses : dtolnay/rust-toolchain@stable
2020-10-22 01:15:14 +00:00
with :
target : wasm32-unknown-unknown
2020-09-21 22:47:38 +00:00
- name : Check wasm
2022-10-31 17:36:23 +00:00
run : cargo check --target wasm32-unknown-unknown
Webgpu support (#8336)
# Objective
- Support WebGPU
- alternative to #5027 that doesn't need any async / await
- fixes #8315
- Surprise fix #7318
## Solution
### For async renderer initialisation
- Update the plugin lifecycle:
- app builds the plugin
- calls `plugin.build`
- registers the plugin
- app starts the event loop
- event loop waits for `ready` of all registered plugins in the same
order
- returns `true` by default
- then call all `finish` then all `cleanup` in the same order as
registered
- then execute the schedule
In the case of the renderer, to avoid anything async:
- building the renderer plugin creates a detached task that will send
back the initialised renderer through a mutex in a resource
- `ready` will wait for the renderer to be present in the resource
- `finish` will take that renderer and place it in the expected
resources by other plugins
- other plugins (that expect the renderer to be available) `finish` are
called and they are able to set up their pipelines
- `cleanup` is called, only custom one is still for pipeline rendering
### For WebGPU support
- update the `build-wasm-example` script to support passing `--api
webgpu` that will build the example with WebGPU support
- feature for webgl2 was always enabled when building for wasm. it's now
in the default feature list and enabled on all platforms, so check for
this feature must also check that the target_arch is `wasm32`
---
## Migration Guide
- `Plugin::setup` has been renamed `Plugin::cleanup`
- `Plugin::finish` has been added, and plugins adding pipelines should
do it in this function instead of `Plugin::build`
```rust
// Before
impl Plugin for MyPlugin {
fn build(&self, app: &mut App) {
app.insert_resource::<MyResource>
.add_systems(Update, my_system);
let render_app = match app.get_sub_app_mut(RenderApp) {
Ok(render_app) => render_app,
Err(_) => return,
};
render_app
.init_resource::<RenderResourceNeedingDevice>()
.init_resource::<OtherRenderResource>();
}
}
// After
impl Plugin for MyPlugin {
fn build(&self, app: &mut App) {
app.insert_resource::<MyResource>
.add_systems(Update, my_system);
let render_app = match app.get_sub_app_mut(RenderApp) {
Ok(render_app) => render_app,
Err(_) => return,
};
render_app
.init_resource::<OtherRenderResource>();
}
fn finish(&self, app: &mut App) {
let render_app = match app.get_sub_app_mut(RenderApp) {
Ok(render_app) => render_app,
Err(_) => return,
};
render_app
.init_resource::<RenderResourceNeedingDevice>();
}
}
```
2023-05-04 22:07:57 +00:00
env :
RUSTFLAGS : --cfg=web_sys_unstable_apis
2020-09-21 22:47:38 +00:00
2021-02-22 04:50:05 +00:00
markdownlint :
runs-on : ubuntu-latest
2023-02-01 15:08:31 +00:00
timeout-minutes : 30
2023-03-07 21:42:53 +00:00
needs : check-missing-features-in-docs
2021-07-27 02:01:11 +00:00
if : always()
2021-02-22 04:50:05 +00:00
steps :
2023-09-13 19:26:25 +00:00
- uses : actions/checkout@v4
2021-02-22 04:50:05 +00:00
with :
# Full git history is needed to get a proper list of changed files within `super-linter`
fetch-depth : 0
- name : Run Markdown Lint
2021-06-01 01:01:20 +00:00
uses : docker://ghcr.io/github/super-linter:slim-v4
2021-02-22 04:50:05 +00:00
env :
2022-07-05 15:49:11 +00:00
MULTI_STATUS : false
2021-02-22 04:50:05 +00:00
VALIDATE_ALL_CODEBASE : false
VALIDATE_MARKDOWN : true
2021-04-15 19:29:47 +00:00
DEFAULT_BRANCH : main
2021-04-14 21:40:36 +00:00
2023-11-21 01:04:14 +00:00
toml :
runs-on : ubuntu-latest
timeout-minutes : 30
steps :
- uses : actions/checkout@v4
2024-02-22 18:13:45 +00:00
- uses : dtolnay/rust-toolchain@stable
2023-11-21 01:04:14 +00:00
- name : Install taplo
2024-02-22 18:13:45 +00:00
run : cargo install taplo-cli --locked
2023-11-21 01:04:14 +00:00
- name : Run Taplo
id : taplo
run : taplo fmt --check --diff
- name : Taplo info
if : failure()
run : |
echo 'To fix toml fmt, please run `taplo fmt`'
2024-02-22 18:13:45 +00:00
echo 'To check for a diff, run `taplo fmt --check --diff'
echo 'You can find taplo here : https://taplo.tamasfe.dev/'
echo 'Or if you use VSCode, use the `Even Better Toml` extension with 2 spaces'
echo 'You can find the extension here : https://marketplace.visualstudio.com/items?itemName=tamasfe.even-better-toml'
2023-11-21 01:04:14 +00:00
2024-02-26 16:19:40 +00:00
typos :
runs-on : ubuntu-latest
timeout-minutes : 30
steps :
- uses : actions/checkout@v4
- name : Check for typos
uses : crate-ci/typos@v1.18.2
- name : Typos info
if : failure()
run : |
echo 'To fix typos, please run `typos -w`'
echo 'To check for a diff, run `typos`'
echo 'You can find typos here : https://crates.io/crates/typos'
echo 'if you use VSCode, you can also install `Typos Spell Checker'
echo 'You can find the extension here : https://marketplace.visualstudio.com/items?itemName=tekumara.typos-vscode'
2023-11-21 01:04:14 +00:00
2024-02-27 09:00:15 +00:00
run-examples-macos-metal :
runs-on : macos-14
timeout-minutes : 30
2021-04-14 21:40:36 +00:00
steps :
2023-09-13 19:26:25 +00:00
- uses : actions/checkout@v4
2023-08-19 14:47:41 +00:00
- uses : dtolnay/rust-toolchain@stable
2024-02-27 09:00:15 +00:00
- name : Disable audio
# Disable audio through a patch. on github m1 runners, audio timeouts after 15 minutes
run : git apply --ignore-whitespace tools/example-showcase/disable-audio.patch
2021-04-14 21:40:36 +00:00
- name : Build bevy
2022-07-17 14:43:35 +00:00
# this uses the same command as when running the example to ensure build is reused
2021-04-14 21:40:36 +00:00
run : |
2024-02-27 09:00:15 +00:00
TRACE_CHROME=trace-alien_cake_addict.json CI_TESTING_CONFIG=.github/example-run/alien_cake_addict.ron cargo build --example alien_cake_addict --features "bevy_ci_testing,trace,trace_chrome"
2021-04-14 21:40:36 +00:00
- name : Run examples
run : |
for example in .github/example-run/*.ron; do
example_name=`basename $example .ron`
2024-02-27 09:00:15 +00:00
echo -n $example_name > last_example_run
2021-04-14 21:40:36 +00:00
echo "running $example_name - "`date`
2024-02-27 09:00:15 +00:00
time TRACE_CHROME=trace-$example_name.json CI_TESTING_CONFIG=$example cargo run --example $example_name --features "bevy_ci_testing,trace,trace_chrome"
2021-04-14 21:40:36 +00:00
sleep 10
2024-02-27 09:00:15 +00:00
if [ `find ./ -maxdepth 1 -name 'screenshot-*.png' -print -quit` ]; then
mkdir screenshots-$example_name
mv screenshot-*.png screenshots-$example_name/
fi
2021-04-14 21:40:36 +00:00
done
2024-02-27 09:00:15 +00:00
mkdir traces && mv trace*.json traces/
mkdir screenshots && mv screenshots-* screenshots/
- name : save traces
uses : actions/upload-artifact@v4
with :
name : example-traces-macos
path : traces
- name : save screenshots
uses : actions/upload-artifact@v4
with :
name : screenshots-macos
path : screenshots
- uses : actions/upload-artifact@v4
if : ${{ failure() && github.event_name == 'pull_request' }}
with :
name : example-run-macos
path : example-run/
2021-04-22 19:53:44 +00:00
2021-04-27 02:17:12 +00:00
check-doc :
2021-04-22 19:53:44 +00:00
runs-on : ubuntu-latest
2023-02-01 15:08:31 +00:00
timeout-minutes : 30
2021-04-22 19:53:44 +00:00
steps :
2023-09-13 19:26:25 +00:00
- uses : actions/checkout@v4
2024-01-28 09:59:48 +00:00
- uses : actions/cache@v4
2022-05-02 19:13:34 +00:00
with :
path : |
~/.cargo/bin/
~/.cargo/registry/index/
~/.cargo/registry/cache/
~/.cargo/git/db/
target/
key : ${{ runner.os }}-check-doc-${{ hashFiles('**/Cargo.toml') }}
2022-10-31 17:36:23 +00:00
- uses : dtolnay/rust-toolchain@stable
2021-04-22 19:53:44 +00:00
- name : Install alsa and udev
2021-12-09 20:14:00 +00:00
run : sudo apt-get update; sudo apt-get install --no-install-recommends libasound2-dev libudev-dev libwayland-dev libxkbcommon-dev
2021-04-27 02:17:12 +00:00
- name : Build and check doc
2022-05-02 19:13:34 +00:00
# See tools/ci/src/main.rs for the commands this runs
run : cargo run -p ci -- doc
env :
CARGO_INCREMENTAL : 0
RUSTFLAGS : "-C debuginfo=0"
# This currently report a lot of false positives
# Enable it again once it's fixed - https://github.com/bevyengine/bevy/issues/1983
# - name: Installs cargo-deadlinks
# run: cargo install --force cargo-deadlinks
# - name: Checks dead links
# run: cargo deadlinks --dir target/doc/bevy
# continue-on-error: true
2021-07-27 02:01:11 +00:00
2021-05-30 18:14:58 +00:00
check-missing-examples-in-docs :
runs-on : ubuntu-latest
2023-02-01 15:08:31 +00:00
timeout-minutes : 30
2021-05-30 18:14:58 +00:00
steps :
2023-09-13 19:26:25 +00:00
- uses : actions/checkout@v4
2023-01-29 17:16:29 +00:00
- name : check for missing metadata
id : missing-metadata
2023-02-28 14:24:47 +00:00
run : cargo run -p build-templated-pages -- check-missing examples
2023-01-29 17:16:29 +00:00
- name : check for missing update
2023-02-28 14:24:47 +00:00
run : cargo run -p build-templated-pages -- update examples
2022-06-25 20:23:24 +00:00
- name : Check for modified files
2023-04-21 22:42:33 +00:00
id : missing-update
2022-06-25 20:23:24 +00:00
run : |
echo "if this step fails, run the following command and commit the changed file on your PR."
2023-02-28 14:24:47 +00:00
echo " > cargo run -p build-templated-pages -- update examples"
2022-06-25 20:23:24 +00:00
git diff --quiet HEAD --
2023-01-29 17:16:29 +00:00
- name : Save PR number
if : ${{ failure() && github.event_name == 'pull_request' }}
run : |
mkdir -p ./missing-examples
echo ${{ github.event.number }} > ./missing-examples/NR
- name : log failed task - missing metadata
if : ${{ failure() && github.event_name == 'pull_request' && steps.missing-metadata.conclusion == 'failure' }}
run : touch ./missing-examples/missing-metadata
- name : log failed task - missing update
if : ${{ failure() && github.event_name == 'pull_request' && steps.missing-update.conclusion == 'failure' }}
run : touch ./missing-examples/missing-update
2023-12-24 00:34:02 +00:00
- uses : actions/upload-artifact@v4
2023-01-29 17:16:29 +00:00
if : ${{ failure() && github.event_name == 'pull_request' }}
with :
name : missing-examples
path : missing-examples/
2022-07-02 00:55:52 +00:00
2023-02-28 14:24:47 +00:00
check-missing-features-in-docs :
runs-on : ubuntu-latest
timeout-minutes : 30
2023-03-07 21:42:53 +00:00
needs : check-missing-examples-in-docs
2023-02-28 14:24:47 +00:00
steps :
2023-09-13 19:26:25 +00:00
- uses : actions/checkout@v4
2023-02-28 14:24:47 +00:00
- name : check for missing features
id : missing-features
run : cargo run -p build-templated-pages -- check-missing features
- name : check for missing update
run : cargo run -p build-templated-pages -- update features
- name : Check for modified files
2023-04-21 22:42:33 +00:00
id : missing-update
2023-02-28 14:24:47 +00:00
run : |
echo "if this step fails, run the following command and commit the changed file on your PR."
echo " > cargo run -p build-templated-pages -- update features"
git diff --quiet HEAD --
- name : Save PR number
if : ${{ failure() && github.event_name == 'pull_request' }}
run : |
mkdir -p ./missing-features
echo ${{ github.event.number }} > ./missing-features/NR
- name : log failed task - missing features
if : ${{ failure() && github.event_name == 'pull_request' && steps.missing-features.conclusion == 'failure' }}
run : touch ./missing-features/missing-features
- name : log failed task - missing update
if : ${{ failure() && github.event_name == 'pull_request' && steps.missing-update.conclusion == 'failure' }}
run : touch ./missing-features/missing-update
2023-12-24 00:34:02 +00:00
- uses : actions/upload-artifact@v4
2023-02-28 14:24:47 +00:00
if : ${{ failure() && github.event_name == 'pull_request' }}
with :
name : missing-features
path : missing-features/
2023-01-09 21:19:48 +00:00
msrv :
runs-on : ubuntu-latest
2023-02-01 15:08:31 +00:00
timeout-minutes : 30
2023-01-09 21:19:48 +00:00
needs : build
steps :
2023-09-13 19:26:25 +00:00
- uses : actions/checkout@v4
2024-01-28 09:59:48 +00:00
- uses : actions/cache@v4
2023-01-09 21:19:48 +00:00
with :
path : |
~/.cargo/bin/
~/.cargo/registry/index/
~/.cargo/registry/cache/
~/.cargo/git/db/
target/
key : ${{ runner.os }}-cargo-msrv-${{ hashFiles('**/Cargo.toml') }}
- name : get MSRV
run : |
msrv=`cargo metadata --no-deps --format-version 1 | jq --raw-output '.packages[] | select(.name=="bevy") | .rust_version'`
echo "MSRV=$msrv" >> $GITHUB_ENV
- uses : dtolnay/rust-toolchain@master
with :
toolchain : ${{ env.MSRV }}
- name : Install alsa and udev
run : sudo apt-get update; sudo apt-get install --no-install-recommends libasound2-dev libudev-dev
- name : Run cargo check
2023-02-06 22:14:39 +00:00
id : check
2023-01-09 21:19:48 +00:00
run : cargo check
2023-01-29 17:16:29 +00:00
- name : Save PR number
2023-02-06 22:14:39 +00:00
if : ${{ failure() && github.event_name == 'pull_request' && steps.check.conclusion == 'failure' }}
2023-01-29 17:16:29 +00:00
run : |
mkdir -p ./msrv
echo ${{ github.event.number }} > ./msrv/NR
2023-12-24 00:34:02 +00:00
- uses : actions/upload-artifact@v4
2023-02-06 22:14:39 +00:00
if : ${{ failure() && github.event_name == 'pull_request' && steps.check.conclusion == 'failure' }}
2023-01-29 17:16:29 +00:00
with :
name : msrv
path : msrv/
2023-08-29 19:11:06 +00:00
check-bevy-internal-imports :
runs-on : ubuntu-latest
timeout-minutes : 30
steps :
2023-09-13 19:26:25 +00:00
- uses : actions/checkout@v4
2023-08-29 19:11:06 +00:00
- name : Check for bevy_internal imports
shell : bash
run : |
errors=""
for file in $(find examples tests -name '*.rs'); do
if grep -q "use bevy_internal" "$file"; then
errors+="ERROR: Detected 'use bevy_internal' in $file\n"
fi
done
if [ -n "$errors" ]; then
echo -e "$errors"
echo " Avoid importing bevy_internal, it should not be used directly"
echo " Fix the issue by replacing 'bevy_internal' with 'bevy'"
echo " Example: 'use bevy::sprite::MaterialMesh2dBundle;' instead of 'bevy_internal::sprite::MaterialMesh2dBundle;'"
exit 1
2024-02-25 15:19:27 +00:00
fi
check-cfg :
runs-on : ubuntu-latest
timeout-minutes : 30
steps :
- uses : actions/checkout@v4
- uses : actions/cache@v4
with :
path : |
~/.cargo/bin/
~/.cargo/registry/index/
~/.cargo/registry/cache/
~/.cargo/git/db/
target/
key : ${{ runner.os }}-check-doc-${{ hashFiles('**/Cargo.toml') }}
- uses : dtolnay/rust-toolchain@master
with :
toolchain : ${{ env.NIGHTLY_TOOLCHAIN }}
- name : Install alsa and udev
run : sudo apt-get update; sudo apt-get install --no-install-recommends libasound2-dev libudev-dev libwayland-dev libxkbcommon-dev
- name : Build and check cfg typos
# See tools/ci/src/main.rs for the commands this runs
run : cargo run -p ci -- cfg-check