Merge pull request #810 from RedPhoenixQ/io-errors #416
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: Rust | |
on: [push, pull_request] | |
jobs: | |
lint: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Check fmt | |
run: cargo fmt -- --check | |
msrv: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: dtolnay/rust-toolchain@1.56.0 | |
- run: cargo check | |
minimal-versions: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Install tools | |
run: cargo install cargo-hack cargo-minimal-versions | |
- name: Install nightly rust | |
uses: dtolnay/rust-toolchain@nightly | |
- name: Check with minimal versions | |
run: cargo minimal-versions check | |
- name: Check with minimal versions (serialize) | |
run: cargo minimal-versions check --features serialize | |
- name: Check with minimal versions (encoding) | |
run: cargo minimal-versions check --features encoding | |
- name: Check with minimal versions (async-tokio) | |
run: cargo minimal-versions check --features async-tokio | |
test: | |
strategy: | |
matrix: | |
platform: [ubuntu-latest, windows-latest] | |
runs-on: ${{ matrix.platform }} | |
# Set variable to enable coverage | |
env: | |
RUSTFLAGS: -C instrument-coverage | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Install coverage reporter (llvm-tools-preview) | |
if: runner.os == 'Linux' | |
run: rustup component add llvm-tools-preview | |
- name: Install coverage reporter (grcov) | |
if: runner.os == 'Linux' | |
run: cargo install grcov | |
- name: Build | |
run: cargo build | |
- name: Build benchmarks | |
run: cargo bench --no-run | |
- name: Build benchmarks (compare) | |
working-directory: compare | |
run: cargo bench --no-run | |
- name: Run tests + benchmarks | |
run: cargo test --all-features --benches --tests | |
- name: Run tests (no features) | |
env: | |
LLVM_PROFILE_FILE: coverage/no-features-%p-%m.profraw | |
run: cargo test --no-default-features | |
- name: Run tests (serialize) | |
env: | |
LLVM_PROFILE_FILE: coverage/serialize-%p-%m.profraw | |
run: cargo test --features serialize | |
- name: Run tests (serialize+encoding) | |
env: | |
LLVM_PROFILE_FILE: coverage/serialize-encoding-%p-%m.profraw | |
run: cargo test --features serialize,encoding | |
- name: Run tests (serialize+escape-html) | |
env: | |
LLVM_PROFILE_FILE: coverage/serialize-escape-html-%p-%m.profraw | |
run: cargo test --features serialize,escape-html | |
- name: Run tests (all features) | |
env: | |
LLVM_PROFILE_FILE: coverage/all-features-%p-%m.profraw | |
run: cargo test --all-features | |
- name: Prepare coverage information for upload | |
if: runner.os == 'Linux' | |
run: | | |
grcov ./coverage \ | |
-s . \ | |
--binary-path ./target/debug/ \ | |
--branch \ | |
--ignore-not-existing \ | |
--ignore 'tests/*' \ | |
-o ./coverage.lcov | |
- name: Upload coverage to codecov.io | |
if: runner.os == 'Linux' | |
uses: codecov/codecov-action@v4 | |
with: | |
files: ./coverage.lcov | |
flags: unittests | |
verbose: true | |
continue-on-error: true | |
# Check that tests that are sensitive to target are passed | |
x86: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Install 32-bit target | |
run: rustup target add i686-unknown-linux-gnu | |
- name: Install 32-bit libs (for criterion) | |
# Criterion wants to compile something. | |
# Cargo builds criterion even when it is not required for those tests. | |
# Without those libs compilation failed with: | |
# error: linking with `cc` failed: exit status: 1 | |
# | | |
# = note: LC_ALL="C" PATH="..." ... | |
# = note: /usr/bin/ld: cannot find Scrt1.o: No such file or directory | |
# /usr/bin/ld: cannot find crti.o: No such file or directory | |
# /usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/11/libgcc.a when searching for -lgcc | |
# /usr/bin/ld: cannot find -lgcc: No such file or directory | |
# collect2: error: ld returned 1 exit status | |
# Fixed as suggested in this answer: | |
# https://stackoverflow.com/a/16016792/7518605 | |
run: sudo apt install gcc-multilib | |
- name: Run some tests on 32-bit target | |
run: cargo test --target i686-unknown-linux-gnu --test issues | |
- name: Run some tests on 32-bit target (async-tokio) | |
run: cargo test --target i686-unknown-linux-gnu --features async-tokio --test async-tokio |