2022-05-31 17:30:31 +00:00
name : validation jobs
on :
2023-03-06 06:08:21 +00:00
merge_group :
2023-03-07 01:37:33 +00:00
pull_request :
2022-05-31 17:30:31 +00:00
push :
branches :
- main
2024-06-07 01:56:25 +00:00
- release-*
2022-05-31 17:30:31 +00:00
2024-02-28 16:07:29 +00:00
concurrency :
group : ${{github.workflow}}-${{github.ref}}
cancel-in-progress : ${{github.event_name == 'pull_request'}}
2022-05-31 17:30:31 +00:00
env :
CARGO_TERM_COLOR : always
2024-04-22 22:41:45 +00:00
# If nightly is breaking CI, modify this variable to target a specific nightly version.
2023-03-07 21:42:53 +00:00
NIGHTLY_TOOLCHAIN : nightly
2022-05-31 17:30:31 +00:00
jobs :
build-and-install-on-iOS :
2023-03-07 01:37:33 +00:00
if : ${{ github.event_name == 'merge_group' }}
2022-05-31 17:30:31 +00:00
runs-on : macos-latest
2023-02-01 15:08:31 +00:00
timeout-minutes : 30
2022-05-31 17:30:31 +00:00
steps :
2023-09-13 19:26:25 +00:00
- uses : actions/checkout@v4
2022-05-31 17:30:31 +00:00
2022-10-31 17:36:23 +00:00
- uses : dtolnay/rust-toolchain@stable
2022-05-31 17:30:31 +00:00
2024-01-28 09:59:48 +00:00
- uses : actions/cache@v4
2022-05-31 17:30:31 +00:00
with :
path : |
target
2024-11-11 18:47:51 +00:00
key : ${{ runner.os }}-ios-install-${{ hashFiles('**/Cargo.lock') }}
2022-05-31 17:30:31 +00:00
2024-04-23 20:27:21 +00:00
# TODO: remove x86 target once it always run on arm GitHub runners
2022-05-31 17:30:31 +00:00
- name : Add iOS targets
2024-04-23 20:27:21 +00:00
run : rustup target add aarch64-apple-ios x86_64-apple-ios aarch64-apple-ios-sim
2022-05-31 17:30:31 +00:00
- name : Build and install iOS app in iOS Simulator.
2023-02-06 18:08:49 +00:00
run : cd examples/mobile && make install
2022-05-31 17:30:31 +00:00
build-android :
2023-03-07 01:37:33 +00:00
if : ${{ github.event_name == 'merge_group' }}
2022-05-31 17:30:31 +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
steps :
2023-09-13 19:26:25 +00:00
- uses : actions/checkout@v4
2022-05-31 17:30:31 +00:00
2022-10-31 17:36:23 +00:00
- uses : dtolnay/rust-toolchain@stable
2022-09-25 00:57:07 +00:00
2024-10-01 22:23:48 +00:00
- name : Set up JDK 17
2024-10-07 07:30:37 +00:00
uses : actions/setup-java@v4
2024-10-01 22:23:48 +00:00
with :
java-version : '17'
distribution : 'temurin'
2024-01-28 09:59:48 +00:00
- uses : actions/cache@v4
2022-05-31 17:30:31 +00:00
with :
path : |
~/.cargo/bin/
~/.cargo/registry/index/
~/.cargo/registry/cache/
~/.cargo/git/db/
target/
key : ${{ runner.os }}-cargo-build-android-${{ hashFiles('**/Cargo.toml') }}
2022-09-25 00:57:07 +00:00
2022-05-31 17:30:31 +00:00
- name : Install Android targets
2024-10-01 22:23:48 +00:00
run : rustup target add aarch64-linux-android
- name : Install Cargo NDK
run : cargo install --force cargo-ndk
2022-09-25 00:57:07 +00:00
2024-10-01 22:23:48 +00:00
- name : Build .so file
run : cargo ndk -t arm64-v8a -o android_example/app/src/main/jniLibs build --package bevy_mobile_example
2022-09-25 00:57:07 +00:00
2024-10-01 22:23:48 +00:00
- name : Build app for Android
run : cd examples/mobile/android_example && chmod +x gradlew && ./gradlew build
2022-05-31 17:30:31 +00:00
2023-08-19 14:47:41 +00:00
run-examples-linux-vulkan :
2024-10-14 05:24:38 +00:00
# also run when pushed to main to update reference screenshots
if : ${{ github.event_name != 'pull_request' }}
2024-10-13 16:36:25 +00:00
runs-on : ubuntu-22.04
2023-08-19 14:47:41 +00:00
timeout-minutes : 30
2022-05-31 17:30:31 +00:00
steps :
2024-04-13 22:34:48 +00:00
- uses : actions/checkout@v4
- name : Install Linux dependencies
uses : ./.github/actions/install-linux-deps
# At some point this may be merged into `install-linux-deps`, but for now it is its own step.
- name : Install additional Linux dependencies for Vulkan
2023-08-19 14:47:41 +00:00
run : |
2023-12-30 09:07:31 +00:00
sudo add-apt-repository ppa:kisak/turtle -y
2024-04-13 22:34:48 +00:00
sudo apt-get install --no-install-recommends libxkbcommon-x11-0 xvfb libegl1-mesa libgl1-mesa-dri libxcb-xfixes0-dev mesa-vulkan-drivers
2024-01-28 09:59:48 +00:00
- uses : actions/cache@v4
2022-05-31 17:30:31 +00:00
with :
path : |
~/.cargo/bin/
~/.cargo/registry/index/
~/.cargo/registry/cache/
~/.cargo/git/db/
target/
2023-08-19 14:47:41 +00:00
key : ${{ runner.os }}-cargo-run-examples-${{ hashFiles('**/Cargo.toml') }}
- uses : dtolnay/rust-toolchain@stable
2022-05-31 17:30:31 +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
2022-05-31 17:30:31 +00:00
run : |
2023-08-19 14:47:41 +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"
2022-05-31 17:30:31 +00:00
- name : Run examples
run : |
for example in .github/example-run/*.ron; do
example_name=`basename $example .ron`
2023-08-19 14:47:41 +00:00
echo -n $example_name > last_example_run
2022-05-31 17:30:31 +00:00
echo "running $example_name - "`date`
2023-08-19 14:47:41 +00:00
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"
2022-05-31 17:30:31 +00:00
sleep 10
2023-08-19 14:47:41 +00:00
if [ `find ./ -maxdepth 1 -name 'screenshot-*.png' -print -quit` ]; then
mkdir screenshots-$example_name
mv screenshot-*.png screenshots-$example_name/
fi
2022-05-31 17:30:31 +00:00
done
2024-02-27 09:00:15 +00:00
mkdir traces && mv trace*.json traces/
mkdir screenshots && mv screenshots-* screenshots/
2023-08-19 14:47:41 +00:00
- name : save traces
2023-12-24 00:34:02 +00:00
uses : actions/upload-artifact@v4
2023-08-19 14:47:41 +00:00
with :
2024-01-31 20:03:47 +00:00
name : example-traces-linux
2024-02-27 09:00:15 +00:00
path : traces
2023-08-19 14:47:41 +00:00
- name : save screenshots
2023-12-24 00:34:02 +00:00
uses : actions/upload-artifact@v4
2023-08-19 14:47:41 +00:00
with :
2024-01-31 20:03:47 +00:00
name : screenshots-linux
2024-02-27 09:00:15 +00:00
path : screenshots
2023-12-24 00:34:02 +00:00
- uses : actions/upload-artifact@v4
2023-08-19 14:47:41 +00:00
if : ${{ failure() && github.event_name == 'pull_request' }}
with :
2024-01-31 20:03:47 +00:00
name : example-run-linux
path : example-run/
2024-10-14 05:24:38 +00:00
compare-linux-screenshots :
name : Compare Linux screenshots
needs : [ run-examples-linux-vulkan]
uses : ./.github/workflows/send-screenshots-to-pixeleagle.yml
with :
commit : ${{ github.sha }}
branch : ${{ github.ref_name }}
artifact : screenshots-linux
os : linux
secrets : inherit
2024-02-27 09:00:15 +00:00
run-examples-on-windows-dx12 :
2024-10-20 14:58:35 +00:00
# also run when pushed to main to update reference screenshots
if : ${{ github.event_name != 'pull_request' }}
2024-02-27 09:00:15 +00:00
runs-on : windows-latest
2024-01-31 20:03:47 +00:00
timeout-minutes : 30
steps :
- uses : actions/checkout@v4
2024-06-27 05:12:15 +00:00
- uses : dtolnay/rust-toolchain@stable
2024-01-31 20:03:47 +00:00
- name : Build bevy
2024-02-27 09:00:15 +00:00
shell : bash
2024-01-31 20:03:47 +00:00
# this uses the same command as when running the example to ensure build is reused
run : |
2024-02-27 09:00:15 +00:00
WGPU_BACKEND=dx12 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"
2024-01-31 20:03:47 +00:00
- name : Run examples
2024-02-27 09:00:15 +00:00
shell : bash
2024-01-31 20:03:47 +00:00
run : |
for example in .github/example-run/*.ron; do
example_name=`basename $example .ron`
echo -n $example_name > last_example_run
echo "running $example_name - "`date`
2024-02-27 09:00:15 +00:00
time WGPU_BACKEND=dx12 TRACE_CHROME=trace-$example_name.json CI_TESTING_CONFIG=$example cargo run --example $example_name --features "bevy_ci_testing,trace,trace_chrome"
2024-01-31 20:03:47 +00:00
sleep 10
if [ `find ./ -maxdepth 1 -name 'screenshot-*.png' -print -quit` ]; then
mkdir screenshots-$example_name
mv screenshot-*.png screenshots-$example_name/
fi
done
2024-02-27 09:00:15 +00:00
mkdir traces && mv trace*.json traces/
mkdir screenshots && mv screenshots-* screenshots/
2024-01-31 20:03:47 +00:00
- name : save traces
uses : actions/upload-artifact@v4
with :
2024-02-27 09:00:15 +00:00
name : example-traces-windows
path : traces
2024-01-31 20:03:47 +00:00
- name : save screenshots
uses : actions/upload-artifact@v4
with :
2024-02-27 09:00:15 +00:00
name : screenshots-windows
path : screenshots
2024-01-31 20:03:47 +00:00
- uses : actions/upload-artifact@v4
if : ${{ failure() && github.event_name == 'pull_request' }}
with :
2024-02-27 09:00:15 +00:00
name : example-run-windows
2023-08-19 14:47:41 +00:00
path : example-run/
2022-06-06 20:22:51 +00:00
2024-10-20 14:58:35 +00:00
compare-windows-screenshots :
name : Compare Windows screenshots
needs : [ run-examples-on-windows-dx12]
uses : ./.github/workflows/send-screenshots-to-pixeleagle.yml
with :
commit : ${{ github.sha }}
branch : ${{ github.ref_name }}
artifact : screenshots-windows
os : windows
secrets : inherit
2022-06-06 20:22:51 +00:00
run-examples-on-wasm :
2023-03-07 01:37:33 +00:00
if : ${{ github.event_name == 'merge_group' }}
2024-10-13 16:36:25 +00:00
runs-on : ubuntu-22.04
2022-06-06 20:22:51 +00:00
timeout-minutes : 60
steps :
2023-09-13 19:26:25 +00:00
- uses : actions/checkout@v4
2022-06-06 20:22:51 +00:00
2022-10-31 17:36:23 +00:00
- uses : dtolnay/rust-toolchain@stable
2022-06-06 20:22:51 +00:00
with :
target : wasm32-unknown-unknown
2024-01-28 09:59:48 +00:00
- uses : actions/cache@v4
2022-06-06 20:22:51 +00:00
with :
path : |
~/.cargo/bin/
~/.cargo/registry/index/
~/.cargo/registry/cache/
~/.cargo/git/db/
~/.github/start-wasm-example/node_modules
target/
key : ${{ runner.os }}-wasm-run-examples-${{ hashFiles('**/Cargo.toml') }}
- name : install xvfb, llvmpipe and lavapipe
run : |
sudo apt-get update -y -qq
2023-12-30 09:07:31 +00:00
sudo add-apt-repository ppa:kisak/turtle -y
2022-06-06 20:22:51 +00:00
sudo apt-get update
sudo apt install -y xvfb libegl1-mesa libgl1-mesa-dri libxcb-xfixes0-dev mesa-vulkan-drivers
- name : Install wasm-bindgen
run : cargo install --force wasm-bindgen-cli
- name : Setup playwright
run : |
cd .github/start-wasm-example
npm install
npx playwright install --with-deps
cd ../..
2024-07-31 21:16:05 +00:00
- name : First Wasm build
2022-06-06 20:22:51 +00:00
run : |
2024-11-07 20:57:45 +00:00
cargo build --release --example testbed_ui --target wasm32-unknown-unknown
2022-06-06 20:22:51 +00:00
- name : Run examples
shell : bash
run : |
# start a webserver
python3 -m http.server --directory examples/wasm &
2022-09-25 00:57:07 +00:00
xvfb-run cargo run -p build-wasm-example -- --browsers chromium --browsers firefox --frames 25 --test 2d_shapes lighting text_debug breakout
2022-06-06 20:22:51 +00:00
- name : Save screenshots
2023-12-24 00:34:02 +00:00
uses : actions/upload-artifact@v4
2022-06-06 20:22:51 +00:00
with :
2024-01-31 20:03:47 +00:00
name : screenshots-wasm
2022-06-06 20:22:51 +00:00
path : .github/start-wasm-example/screenshot-*.png
2022-10-24 13:46:39 +00:00
build-without-default-features :
2023-03-07 01:37:33 +00:00
if : ${{ github.event_name == 'merge_group' }}
2023-02-01 15:08:31 +00:00
timeout-minutes : 30
2022-10-24 13:46:39 +00:00
strategy :
2023-03-07 21:42:53 +00:00
max-parallel : 1
2022-10-24 13:46:39 +00:00
matrix :
crate : [ bevy_ecs, bevy_reflect, bevy]
runs-on : ubuntu-latest
steps :
2023-09-13 19:26:25 +00:00
- uses : actions/checkout@v4
2022-10-31 17:36:23 +00:00
- uses : dtolnay/rust-toolchain@stable
2024-04-13 22:34:48 +00:00
- name : Install Linux dependencies
uses : ./.github/actions/install-linux-deps
2022-10-24 13:46:39 +00:00
- name : Build
run : cargo build -p ${{ matrix.crate }} --no-default-features
env :
CARGO_INCREMENTAL : 0
RUSTFLAGS : "-C debuginfo=0 -D warnings"
2023-03-07 21:42:53 +00:00
build-without-default-features-status :
if : |
always() &&
github.event_name == 'merge_group'
needs : build-without-default-features
runs-on : ubuntu-latest
steps :
- name : Successful
if : ${{ !(contains(needs.*.result, 'failure')) }}
run : exit 0
- name : Failing
if : ${{ contains(needs.*.result, 'failure') }}
run : exit 1
check-unused-dependencies :
if : ${{ github.event_name == 'merge_group' }}
runs-on : ubuntu-latest
timeout-minutes : 30
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-03-07 21:42:53 +00:00
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 : dtolnay/rust-toolchain@master
with :
toolchain : ${{ env.NIGHTLY_TOOLCHAIN }}
- name : Installs cargo-udeps
run : cargo install --force cargo-udeps
2024-04-13 22:34:48 +00:00
- name : Install Linux dependencies
uses : ./.github/actions/install-linux-deps
2023-03-07 21:42:53 +00:00
- name : Run cargo udeps
run : cargo udeps
2024-03-17 19:03:55 +00:00
check-example-showcase-patches-still-work :
if : ${{ github.event_name == 'merge_group' }}
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 }}-cargo-check-showcase-patches-${{ hashFiles('**/Cargo.toml') }}
- uses : dtolnay/rust-toolchain@stable
2024-04-13 22:34:48 +00:00
- name : Install Linux dependencies
uses : ./.github/actions/install-linux-deps
2024-03-17 19:03:55 +00:00
- name : Apply patches
run : |
2024-04-22 21:47:56 +00:00
CODE=0
2024-03-17 19:03:55 +00:00
for patch in tools/example-showcase/*.patch; do
2024-04-22 21:47:56 +00:00
# Try applying the patch, logging an error if it fails.
git apply --ignore-whitespace $patch || { echo "::error::$patch failed to apply."; CODE=1; }
2024-03-17 19:03:55 +00:00
done
2024-04-22 21:47:56 +00:00
exit $CODE
2024-03-17 19:03:55 +00:00
- name : Build with patches
run : cargo build