mirror of
https://github.com/bevyengine/bevy
synced 2024-11-10 07:04:33 +00:00
f8fa229465
# Objective
- Have information about examples only in one place that can be used for the repo and for the website (and remove the need to keep a list of example to build for wasm in the website 75acb73040/generate-wasm-examples/generate_wasm_examples.sh (L92-L99)
)
## Solution
- Add metadata about examples in `Cargo.toml`
- Build the `examples/README.md` from a template using those metadata. I used tera as the template engine to use the same tech as the website.
- Make CI fail if an example is missing metadata, or if the readme file needs to be updated (the command to update it is displayed in the failed step in CI)
## Remaining To Do
- After the next release with this merged in, the website will be able to be updated to use those metadata too
- I would like to build the examples in wasm and make them available at http://dev-docs.bevyengine.org/ but that will require more design
- https://github.com/bevyengine/bevy-website/issues/299 for other ToDos
Co-authored-by: Readme <github-actions@github.com>
300 lines
10 KiB
YAML
300 lines
10 KiB
YAML
name: CI
|
|
|
|
on:
|
|
pull_request:
|
|
push:
|
|
branches-ignore:
|
|
- 'dependabot/**'
|
|
- staging-squash-merge.tmp
|
|
|
|
env:
|
|
CARGO_TERM_COLOR: always
|
|
|
|
jobs:
|
|
build:
|
|
strategy:
|
|
matrix:
|
|
toolchain: [stable, nightly]
|
|
os: [windows-latest, ubuntu-latest, macos-latest]
|
|
exclude:
|
|
- os: macos-latest
|
|
toolchain: nightly
|
|
- os: windows-latest
|
|
toolchain: nightly
|
|
runs-on: ${{ matrix.os }}
|
|
steps:
|
|
- uses: actions/checkout@v3
|
|
- uses: actions/cache@v3
|
|
with:
|
|
path: |
|
|
~/.cargo/bin/
|
|
~/.cargo/registry/index/
|
|
~/.cargo/registry/cache/
|
|
~/.cargo/git/db/
|
|
target/
|
|
key: ${{ runner.os }}-cargo-build-${{ matrix.toolchain }}-${{ hashFiles('**/Cargo.toml') }}
|
|
- uses: actions-rs/toolchain@v1
|
|
with:
|
|
toolchain: ${{ matrix.toolchain }}
|
|
override: true
|
|
- 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
|
|
# See tools/ci/src/main.rs for the commands this runs
|
|
run: cargo run -p ci -- test
|
|
env:
|
|
CARGO_INCREMENTAL: 0
|
|
RUSTFLAGS: "-C debuginfo=0 -D warnings"
|
|
|
|
ci:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v3
|
|
- uses: actions/cache@v3
|
|
with:
|
|
path: |
|
|
~/.cargo/bin/
|
|
~/.cargo/registry/index/
|
|
~/.cargo/registry/cache/
|
|
~/.cargo/git/db/
|
|
target/
|
|
key: ${{ runner.os }}-cargo-ci-${{ hashFiles('**/Cargo.toml') }}
|
|
- uses: actions-rs/toolchain@v1
|
|
with:
|
|
toolchain: stable
|
|
components: rustfmt, clippy
|
|
override: true
|
|
- 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: CI job
|
|
# See tools/ci/src/main.rs for the commands this runs
|
|
run: cargo run -p ci -- lints
|
|
|
|
miri:
|
|
runs-on: ubuntu-latest
|
|
timeout-minutes: 60
|
|
steps:
|
|
- uses: actions/checkout@v3
|
|
# TODO: re-enable cache once nightly is unpinned
|
|
# - uses: actions/cache@v3
|
|
# with:
|
|
# path: |
|
|
# ~/.cargo/bin/
|
|
# ~/.cargo/registry/index/
|
|
# ~/.cargo/registry/cache/
|
|
# ~/.cargo/git/db/
|
|
# target/
|
|
# key: ${{ runner.os }}-cargo-miri-${{ hashFiles('**/Cargo.toml') }}
|
|
- uses: actions-rs/toolchain@v1
|
|
with:
|
|
# TODO: check again with nightly once https://github.com/rust-lang/miri/issues/2223 is fixed
|
|
toolchain: nightly-2022-06-08
|
|
components: miri
|
|
override: true
|
|
- 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: CI job
|
|
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
|
|
# -Zmiri-disable-isolation is needed because our executor uses `fastrand` which accesses system time.
|
|
# -Zmiri-ignore-leaks is needed because running bevy_ecs tests finds a memory leak but its impossible
|
|
# to track down because allocids are nondeterministic.
|
|
# -Zmiri-tag-raw-pointers is not strictly "necessary" but enables a lot of extra UB checks relating
|
|
# to raw pointer aliasing rules that we should be trying to uphold.
|
|
MIRIFLAGS: -Zmiri-disable-isolation -Zmiri-ignore-leaks -Zmiri-tag-raw-pointers
|
|
|
|
check-compiles:
|
|
runs-on: ubuntu-latest
|
|
needs: ci
|
|
steps:
|
|
- uses: actions/checkout@v3
|
|
- uses: actions/cache@v3
|
|
with:
|
|
path: |
|
|
~/.cargo/bin/
|
|
~/.cargo/registry/index/
|
|
~/.cargo/registry/cache/
|
|
~/.cargo/git/db/
|
|
target/
|
|
crates/bevy_ecs_compile_fail_tests/target/
|
|
key: ${{ runner.os }}-cargo-check-compiles-${{ hashFiles('**/Cargo.toml') }}
|
|
- uses: actions-rs/toolchain@v1
|
|
with:
|
|
toolchain: stable
|
|
override: true
|
|
- name: Install alsa and udev
|
|
run: sudo apt-get update; sudo apt-get install --no-install-recommends libasound2-dev libudev-dev
|
|
- name: Check Compile
|
|
# See tools/ci/src/main.rs for the commands this runs
|
|
run: cargo run -p ci -- compile
|
|
|
|
build-wasm:
|
|
strategy:
|
|
matrix:
|
|
toolchain: [stable, nightly]
|
|
os: [ubuntu-latest]
|
|
runs-on: ${{ matrix.os }}
|
|
needs: build
|
|
steps:
|
|
- uses: actions/checkout@v3
|
|
- uses: actions/cache@v3
|
|
with:
|
|
path: |
|
|
~/.cargo/bin/
|
|
~/.cargo/registry/index/
|
|
~/.cargo/registry/cache/
|
|
~/.cargo/git/db/
|
|
target/
|
|
key: ${{ runner.os }}-cargo-build-wasm-${{ matrix.toolchain }}-${{ hashFiles('**/Cargo.toml') }}
|
|
- uses: actions-rs/toolchain@v1
|
|
with:
|
|
toolchain: ${{ matrix.toolchain }}
|
|
target: wasm32-unknown-unknown
|
|
override: true
|
|
- name: Check wasm
|
|
uses: actions-rs/cargo@v1
|
|
with:
|
|
command: check
|
|
args: --target wasm32-unknown-unknown --no-default-features --features bevy_winit,x11,hdr,bevy_gltf
|
|
|
|
markdownlint:
|
|
runs-on: ubuntu-latest
|
|
needs: check-examples-readme-update-needed
|
|
if: always()
|
|
steps:
|
|
- uses: actions/checkout@v3
|
|
with:
|
|
# Full git history is needed to get a proper list of changed files within `super-linter`
|
|
fetch-depth: 0
|
|
- name: Run Markdown Lint
|
|
uses: docker://ghcr.io/github/super-linter:slim-v4
|
|
env:
|
|
VALIDATE_ALL_CODEBASE: false
|
|
VALIDATE_MARKDOWN: true
|
|
DEFAULT_BRANCH: main
|
|
# Not needed here as only one Linter is used.
|
|
#GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
|
|
run-examples:
|
|
runs-on: ubuntu-latest
|
|
timeout-minutes: 30
|
|
steps:
|
|
- name: Install Bevy dependencies
|
|
run: |
|
|
sudo apt-get update;
|
|
DEBIAN_FRONTEND=noninteractive sudo apt-get install --no-install-recommends -yq \
|
|
libasound2-dev libudev-dev;
|
|
- name: install xvfb, llvmpipe and lavapipe
|
|
run: |
|
|
sudo apt-get update -y -qq
|
|
sudo add-apt-repository ppa:oibaf/graphics-drivers -y
|
|
sudo apt-get update
|
|
sudo apt install -y xvfb libegl1-mesa libgl1-mesa-dri libxcb-xfixes0-dev mesa-vulkan-drivers
|
|
- uses: actions/checkout@v3
|
|
- uses: actions/cache@v3
|
|
with:
|
|
path: |
|
|
~/.cargo/bin/
|
|
~/.cargo/registry/index/
|
|
~/.cargo/registry/cache/
|
|
~/.cargo/git/db/
|
|
target/
|
|
key: ${{ runner.os }}-cargo-run-examples-${{ hashFiles('**/Cargo.toml') }}
|
|
- uses: actions-rs/toolchain@v1
|
|
with:
|
|
toolchain: stable
|
|
- name: Build bevy
|
|
run: |
|
|
cargo build --features "bevy_ci_testing,trace,trace_chrome"
|
|
- name: Run examples
|
|
run: |
|
|
for example in .github/example-run/*.ron; do
|
|
example_name=`basename $example .ron`
|
|
echo "running $example_name - "`date`
|
|
time TRACE_CHROME=trace-$example_name.json CI_TESTING_CONFIG=$example xvfb-run cargo run --example $example_name --features "bevy_ci_testing,trace,trace_chrome"
|
|
sleep 10
|
|
done
|
|
zip traces.zip trace*.json
|
|
- name: save traces
|
|
uses: actions/upload-artifact@v3
|
|
with:
|
|
name: example-traces.zip
|
|
path: traces.zip
|
|
|
|
check-doc:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v3
|
|
- uses: actions/cache@v2
|
|
with:
|
|
path: |
|
|
~/.cargo/bin/
|
|
~/.cargo/registry/index/
|
|
~/.cargo/registry/cache/
|
|
~/.cargo/git/db/
|
|
target/
|
|
key: ${{ runner.os }}-check-doc-${{ hashFiles('**/Cargo.toml') }}
|
|
- uses: actions-rs/toolchain@v1
|
|
with:
|
|
toolchain: stable
|
|
- 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
|
|
if: runner.os == 'linux'
|
|
- name: Build and check doc
|
|
# 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
|
|
|
|
check-missing-examples-in-docs:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v3
|
|
- run: cargo run -p build-example-pages -- check-missing
|
|
|
|
check-examples-readme-update-needed:
|
|
needs: check-missing-examples-in-docs
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v3
|
|
- run: cargo run -p build-example-pages -- update
|
|
- name: Check for modified files
|
|
run: |
|
|
echo "if this step fails, run the following command and commit the changed file on your PR."
|
|
echo " > cargo run -p build-example-pages -- update"
|
|
git diff --quiet HEAD --
|
|
|
|
check-unused-dependencies:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v3
|
|
- uses: actions/cache@v3
|
|
with:
|
|
path: |
|
|
~/.cargo/bin/
|
|
~/.cargo/registry/index/
|
|
~/.cargo/registry/cache/
|
|
~/.cargo/git/db/
|
|
target/
|
|
key: ${{ runner.os }}-cargo-check-unused-dependencies-${{ hashFiles('**/Cargo.toml') }}
|
|
- uses: actions-rs/toolchain@v1
|
|
with:
|
|
toolchain: nightly
|
|
override: true
|
|
- name: Installs cargo-udeps
|
|
run: cargo install --force cargo-udeps
|
|
- name: Install alsa and udev
|
|
run: sudo apt-get update; sudo apt-get install --no-install-recommends libasound2-dev libudev-dev
|
|
- name: Run cargo udeps
|
|
run: cargo udeps
|