mirror of
https://github.com/bevyengine/bevy
synced 2024-11-10 07:04:33 +00:00
d1e5c50761
# Objective Fixes #5668. The Rust version used in the CI `build` step previously depended on the default Rust version defined by GitHub in the Ubuntu image: <https://github.com/actions/runner-images/blob/main/images/linux/Ubuntu2004-Readme.md#rust-tools> This currently doesn't allow us to use Rust 1.63 features until this version is updated. ## Solution We now use the `actions-rs/toolchain@v1` action to always use the latest stable Rust version. This is already used for other CI jobs that we have.
292 lines
10 KiB
YAML
292 lines
10 KiB
YAML
name: CI
|
|
|
|
on:
|
|
pull_request:
|
|
push:
|
|
branches-ignore:
|
|
- 'dependabot/**'
|
|
- staging-squash-merge.tmp
|
|
|
|
env:
|
|
CARGO_TERM_COLOR: always
|
|
NIGHTLY_TOOLCHAIN: nightly
|
|
|
|
jobs:
|
|
build:
|
|
strategy:
|
|
matrix:
|
|
os: [windows-latest, ubuntu-latest, macos-latest]
|
|
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-stable-${{ 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
|
|
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
|
|
- 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:
|
|
toolchain: ${{ env.NIGHTLY_TOOLCHAIN }}
|
|
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
|
|
# 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
|
|
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
|
|
# https://github.com/rust-lang/miri#miri--z-flags-and-environment-variables
|
|
# -Zmiri-disable-isolation is needed because our executor uses `fastrand` which accesses system time.
|
|
# -Zmiri-permissive-provenance disables warnings against int2ptr casts (since those are used by once_cell)
|
|
# -Zmiri-ignore-leaks is necessary because a bunch of tests don't join all threads before finishing.
|
|
MIRIFLAGS: -Zmiri-ignore-leaks -Zmiri-disable-isolation -Zmiri-permissive-provenance
|
|
|
|
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:
|
|
runs-on: ubuntu-latest
|
|
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: ubuntu-assets-cargo-build-wasm-stable-${{ hashFiles('**/Cargo.toml') }}
|
|
- uses: actions-rs/toolchain@v1
|
|
with:
|
|
toolchain: stable
|
|
target: wasm32-unknown-unknown
|
|
override: true
|
|
- name: Check wasm
|
|
uses: actions-rs/cargo@v1
|
|
with:
|
|
command: check
|
|
args: --target wasm32-unknown-unknown
|
|
|
|
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:
|
|
MULTI_STATUS: false
|
|
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
|
|
# this uses the same command as when running the example to ensure build is reused
|
|
run: |
|
|
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"
|
|
- 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: ${{ env.NIGHTLY_TOOLCHAIN }}
|
|
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
|