Run CI workflow on pull_request
and push
#48
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] | |
jobs: | |
fmt: | |
name: Check formatting | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: dtolnay/rust-toolchain@stable | |
with: | |
components: rustfmt | |
- name: Check Formatting | |
run: cargo fmt -- --check | |
tests: | |
name: Test ${{ matrix.toolchain }} ${{ matrix.platform.name }} | |
runs-on: ${{ matrix.platform.os }} | |
strategy: | |
fail-fast: false | |
matrix: | |
toolchain: [stable, nightly, '1.65.0'] | |
platform: | |
# Note: Make sure that we test all the `docs.rs` targets defined in Cargo.toml! | |
- { name: 'Windows 64bit MSVC', target: x86_64-pc-windows-msvc, os: windows-latest, } | |
- { name: 'Windows 32bit MSVC', target: i686-pc-windows-msvc, os: windows-latest, } | |
- { name: 'Windows 64bit GNU', target: x86_64-pc-windows-gnu, os: windows-latest, host: -x86_64-pc-windows-gnu } | |
- { name: 'Windows 32bit GNU', target: i686-pc-windows-gnu, os: windows-latest, host: -i686-pc-windows-gnu } | |
- { name: 'Linux 32bit', target: i686-unknown-linux-gnu, os: ubuntu-latest, } | |
- { name: 'Linux 64bit', target: x86_64-unknown-linux-gnu, os: ubuntu-latest, } | |
- { name: 'X11', target: x86_64-unknown-linux-gnu, os: ubuntu-latest, options: '--no-default-features --features=x11' } | |
- { name: 'Wayland', target: x86_64-unknown-linux-gnu, os: ubuntu-latest, options: '--no-default-features --features=wayland,wayland-dlopen' } | |
- { name: 'Android', target: aarch64-linux-android, os: ubuntu-latest, options: '--package=winit --features=android-native-activity', cmd: 'apk --' } | |
- { name: 'Redox OS', target: x86_64-unknown-redox, os: ubuntu-latest, } | |
- { name: 'macOS', target: x86_64-apple-darwin, os: macos-latest, } | |
- { name: 'iOS x86_64', target: x86_64-apple-ios, os: macos-latest, } | |
- { name: 'iOS Aarch64', target: aarch64-apple-ios, os: macos-latest, } | |
- { name: 'web', target: wasm32-unknown-unknown, os: ubuntu-latest, } | |
exclude: | |
# Android is tested on stable-3 | |
- toolchain: '1.65.0' | |
platform: { name: 'Android', target: aarch64-linux-android, os: ubuntu-latest, options: '--package=winit --features=android-native-activity', cmd: 'apk --' } | |
include: | |
- toolchain: '1.69.0' | |
platform: { name: 'Android', target: aarch64-linux-android, os: ubuntu-latest, options: '--package=winit --features=android-native-activity', cmd: 'apk --' } | |
env: | |
# Set more verbose terminal output | |
CARGO_TERM_VERBOSE: true | |
RUST_BACKTRACE: 1 | |
# Faster compilation and error on warnings | |
RUSTFLAGS: '--codegen=debuginfo=0 --deny=warnings' | |
RUSTDOCFLAGS: '--deny=warnings' | |
OPTIONS: --target=${{ matrix.platform.target }} ${{ matrix.platform.options }} | |
CMD: ${{ matrix.platform.cmd }} | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Restore cache of cargo folder | |
# We use `restore` and later `save`, so that we can create the key after | |
# the cache has been downloaded. | |
# | |
# This could be avoided if we added Cargo.lock to the repository. | |
uses: actions/cache/restore@v3 | |
with: | |
# https://doc.rust-lang.org/cargo/guide/cargo-home.html#caching-the-cargo-home-in-ci | |
path: | | |
~/.cargo/registry/index/ | |
~/.cargo/registry/cache/ | |
~/.cargo/git/db/ | |
key: cargo-${{ matrix.toolchain }}-${{ matrix.platform.name }}-never-intended-to-be-found | |
restore-keys: cargo-${{ matrix.toolchain }}-${{ matrix.platform.name }} | |
- name: Generate lockfile | |
# Also updates the crates.io index | |
run: cargo generate-lockfile | |
- name: Install GCC Multilib | |
if: (matrix.platform.os == 'ubuntu-latest') && contains(matrix.platform.target, 'i686') | |
run: sudo apt-get update && sudo apt-get install gcc-multilib | |
- name: Cache cargo-apk | |
if: contains(matrix.platform.target, 'android') | |
id: cargo-apk-cache | |
uses: actions/cache@v3 | |
with: | |
path: ~/.cargo/bin/cargo-apk | |
# Change this key if we update the required cargo-apk version | |
key: cargo-apk-v0-9-7 | |
- uses: dtolnay/rust-toolchain@master | |
if: contains(matrix.platform.target, 'android') && (steps.cargo-apk-cache.outputs.cache-hit != 'true') | |
with: | |
toolchain: stable | |
- name: Install cargo-apk | |
if: contains(matrix.platform.target, 'android') && (steps.cargo-apk-cache.outputs.cache-hit != 'true') | |
run: cargo install cargo-apk --version=^0.9.7 --locked | |
- uses: dtolnay/rust-toolchain@master | |
with: | |
toolchain: ${{ matrix.toolchain }}${{ matrix.platform.host }} | |
targets: ${{ matrix.platform.target }} | |
components: clippy | |
- name: Check documentation | |
run: cargo doc --no-deps $OPTIONS --document-private-items | |
- name: Build crate | |
run: cargo $CMD build $OPTIONS | |
- name: Build tests | |
if: > | |
!contains(matrix.platform.target, 'redox') && | |
matrix.toolchain != '1.65.0' | |
run: cargo $CMD test --no-run $OPTIONS | |
- name: Run tests | |
if: > | |
!contains(matrix.platform.target, 'android') && | |
!contains(matrix.platform.target, 'ios') && | |
!contains(matrix.platform.target, 'wasm32') && | |
!contains(matrix.platform.target, 'redox') && | |
matrix.toolchain != '1.65.0' | |
run: cargo $CMD test $OPTIONS | |
- name: Lint with clippy | |
if: (matrix.toolchain == 'stable') && !contains(matrix.platform.options, '--no-default-features') | |
run: cargo clippy --all-targets $OPTIONS -- -Dwarnings | |
- name: Build tests with serde enabled | |
if: > | |
!contains(matrix.platform.target, 'redox') && | |
matrix.toolchain != '1.65.0' | |
run: cargo $CMD test --no-run $OPTIONS --features serde | |
- name: Run tests with serde enabled | |
if: > | |
!contains(matrix.platform.target, 'android') && | |
!contains(matrix.platform.target, 'ios') && | |
!contains(matrix.platform.target, 'wasm32') && | |
!contains(matrix.platform.target, 'redox') && | |
matrix.toolchain != '1.65.0' | |
run: cargo $CMD test $OPTIONS --features serde | |
# See restore step above | |
- name: Save cache of cargo folder | |
uses: actions/cache/save@v3 | |
with: | |
path: | | |
~/.cargo/registry/index/ | |
~/.cargo/registry/cache/ | |
~/.cargo/git/db/ | |
key: cargo-${{ matrix.toolchain }}-${{ matrix.platform.name }}-${{ hashFiles('Cargo.lock') }} | |
cargo-deny: | |
name: Run cargo-deny on ${{ matrix.platform.name }} | |
runs-on: ubuntu-latest | |
# TODO: remove this matrix when https://github.com/EmbarkStudios/cargo-deny/issues/324 is resolved | |
strategy: | |
fail-fast: false | |
matrix: | |
platform: | |
- { name: 'Android', target: aarch64-linux-android } | |
- { name: 'iOS', target: aarch64-apple-ios } | |
- { name: 'Linux', target: x86_64-unknown-linux-gnu } | |
- { name: 'macOS', target: x86_64-apple-darwin } | |
- { name: 'Redox OS', target: x86_64-unknown-redox } | |
- { name: 'web', target: wasm32-unknown-unknown } | |
- { name: 'Windows', target: x86_64-pc-windows-gnu } | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: EmbarkStudios/cargo-deny-action@v1 | |
with: | |
command: check | |
log-level: error | |
arguments: --all-features --target ${{ matrix.platform.target }} |